use of com.couchbase.client.core.Core in project couchbase-jvm-clients by couchbase.
the class RequestContextTest method customPayloadCanBeAttached.
@Test
void customPayloadCanBeAttached() {
Request<?> request = mock(Request.class);
Core core = mock(Core.class);
RequestContext ctx = new RequestContext(new CoreContext(core, 1, null, mock(Authenticator.class)), request);
assertNull(ctx.clientContext());
Map<String, Object> payload = new HashMap<>();
payload.put("foo", true);
ctx.clientContext(payload);
assertEquals(payload, ctx.clientContext());
}
use of com.couchbase.client.core.Core in project couchbase-jvm-clients by couchbase.
the class AsyncScopeTest method shouldReuseAsyncCollection.
@Test
void shouldReuseAsyncCollection() {
Core core = mock(Core.class);
ConfigurationProvider configProvider = mock(ConfigurationProvider.class);
Flux<ClusterConfig> configs = (Flux<ClusterConfig>) mock(Flux.class);
when(configProvider.configs()).thenReturn(configs);
when(core.configurationProvider()).thenReturn(configProvider);
AsyncScope scope = new AsyncScope("scope", "bucket", core, mock(ClusterEnvironment.class));
AsyncCollection collection1 = scope.defaultCollection();
AsyncCollection collection2 = scope.defaultCollection();
AsyncCollection collection3 = scope.collection("foo");
AsyncCollection collection4 = scope.collection("foo");
assertEquals(collection1, collection2);
assertEquals(collection3, collection4);
assertNotEquals(collection1, collection3);
assertNotEquals(collection2, collection4);
}
use of com.couchbase.client.core.Core in project couchbase-jvm-clients by couchbase.
the class SearchMock method loadSearchTestCase.
/**
* Given JSON in the form expected, e.g. those from https://github.com/chvck/sdk-testcases which contains the
* returned JSON from the search service in a field "data", returns the completed SearchResult that the API
* would return.
*/
public static SearchResult loadSearchTestCase(InputStream json) throws ExecutionException, InterruptedException, IOException {
// The idea is to fake packets that have come from the search service.
// Start by preparing the packets.
JsonObject jo = JsonObject.fromJson(toByteArray(json));
JsonObject data = jo.getObject("data");
byte[] b = data.toString().getBytes(StandardCharsets.UTF_8);
ByteBuf bytes = Unpooled.wrappedBuffer(b);
HttpContent content = new DefaultLastHttpContent(bytes);
HttpResponse resp = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
// Fake some core stuff
Core mockedCore = mock(Core.class);
CoreEnvironment env = CoreEnvironment.create();
CoreContext ctx = new CoreContext(mockedCore, 0, env, PasswordAuthenticator.create("Administrator", "password"));
// Our ChunkedSearchMessageHandler needs to be initialised by pretending we've sent an outbound SearchRequest
// through it
SearchRequest req = new SearchRequest(Duration.ofSeconds(10), ctx, BestEffortRetryStrategy.INSTANCE, null, null, null, null);
// ChunkedSearchMessageHandler will try to encode() the SearchRequest. Rather than mocking everything required
// to get that working, just mock the encode method.
SearchRequest spiedReq = spy(req);
doReturn(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "localhost")).when(spiedReq).encode();
doAnswer(v -> {
EndpointContext endpointContext = new EndpointContext(ctx, new HostAndPort(null, 0), null, null, null, Optional.of("bucket"), null);
BaseEndpoint endpoint = mock(BaseEndpoint.class);
when(endpoint.context()).thenReturn(endpointContext);
when(endpoint.pipelined()).thenReturn(false);
// ChunkedSearchMessageHandler does most of the work in handling responses from the service
ChunkedSearchMessageHandler handler = new ChunkedSearchMessageHandler(endpoint, endpointContext);
// Netty's EmbeddedChannel lets us test ChannelHandlers like ChunkedSearchMessageHandler. It's a Netty Channel
// that doesn't touch the network at all.
final EmbeddedChannel channel = new EmbeddedChannel(handler);
// Writing the request is necessary to estabish some initial state inChunkedSearchMessageHandler
channel.writeAndFlush(spiedReq);
// Finally we can do the interesting bit of passing our fake FTS service response into
// ChunkedSearchMessageHandler
channel.writeInbound(resp);
channel.writeInbound(content);
return null;
}).when(mockedCore).send(any());
CompletableFuture<SearchResult> future = SearchAccessor.searchQueryAsync(mockedCore, req, DefaultJsonSerializer.create());
SearchResult result = future.get();
return result;
}
use of com.couchbase.client.core.Core in project couchbase-jvm-clients by couchbase.
the class AsyncSearchIndexManager method analyzeDocument.
/**
* Allows to see how a document is analyzed against a specific index.
*
* @param name the name of the search index.
* @param document the document to analyze.
* @return a {@link CompletableFuture} with analyzed document parts once complete.
*/
public CompletableFuture<List<JsonObject>> analyzeDocument(final String name, final JsonObject document, final AnalyzeDocumentOptions options) {
notNullOrEmpty(name, "Search Index Name");
notNull(document, "Document");
return searchHttpClient.post(path(analyzeDocumentPath(name)), options.build()).trace(TracingIdentifiers.SPAN_REQUEST_MS_ANALYZE_DOCUMENT).json(Mapper.encodeAsBytes(document.toMap())).exec(core).exceptionally(throwable -> {
if (throwable.getMessage().contains("Page not found")) {
throw new FeatureNotAvailableException("Document analysis is not available on this server version!");
} else if (throwable instanceof RuntimeException) {
throw (RuntimeException) throwable;
} else {
throw new CouchbaseException("Failed to analyze search document", throwable);
}
}).thenApply(response -> {
JsonNode rootNode = Mapper.decodeIntoTree(response.content());
List<Map<String, Object>> analyzed = Mapper.convertValue(rootNode.get("analyzed"), new TypeReference<List<Map<String, Object>>>() {
});
return analyzed.stream().filter(Objects::nonNull).map(JsonObject::from).collect(Collectors.toList());
});
}
Aggregations