use of org.eclipse.hono.service.management.Filter in project hono by eclipse.
the class AbstractTenantManagementSearchTenantsTest method testSearchTenantsWithPageOffset.
/**
* Verifies that a request to search tenants with valid page offset succeeds and the result is in accordance with
* the specified page offset.
*
* @param ctx The vert.x test context.
*/
@Test
default void testSearchTenantsWithPageOffset(final VertxTestContext ctx) {
final String tenantId1 = DeviceRegistryUtils.getUniqueIdentifier();
final String tenantId2 = DeviceRegistryUtils.getUniqueIdentifier();
final int pageSize = 1;
final int pageOffset = 1;
final Filter filter = new Filter("/enabled", true);
final Sort sortOption = new Sort("/ext/id");
sortOption.setDirection(Sort.Direction.DESC);
createTenants(Map.of(tenantId1, new Tenant().setEnabled(true).setExtensions(Map.of("id", "1")), tenantId2, new Tenant().setEnabled(true).setExtensions(Map.of("id", "2")))).onFailure(ctx::failNow).compose(ok -> getTenantManagementService().searchTenants(pageSize, pageOffset, List.of(filter), List.of(sortOption), NoopSpan.INSTANCE)).onComplete(ctx.succeeding(s -> {
ctx.verify(() -> {
assertThat(s.getStatus()).isEqualTo(HttpURLConnection.HTTP_OK);
final SearchResult<TenantWithId> searchResult = s.getPayload();
assertThat(searchResult.getTotal()).isEqualTo(2);
assertThat(searchResult.getResult()).hasSize(1);
assertThat(searchResult.getResult().get(0).getId()).isEqualTo(tenantId1);
});
ctx.completeNow();
}));
}
use of org.eclipse.hono.service.management.Filter in project hono by eclipse.
the class MongoDbBasedDeviceDao method find.
/**
* {@inheritDoc}
*/
@Override
public Future<SearchResult<DeviceWithId>> find(final String tenantId, final int pageSize, final int pageOffset, final List<Filter> filters, final List<Sort> sortOptions, final SpanContext tracingContext) {
Objects.requireNonNull(tenantId);
Objects.requireNonNull(filters);
Objects.requireNonNull(sortOptions);
if (pageSize <= 0) {
throw new IllegalArgumentException("page size must be a positive integer");
}
if (pageOffset < 0) {
throw new IllegalArgumentException("page offset must not be negative");
}
final Span span = tracer.buildSpan("find Devices").addReference(References.CHILD_OF, tracingContext).start();
final JsonObject filterDocument = MongoDbDocumentBuilder.builder().withTenantId(tenantId).withDeviceFilters(filters).document();
final JsonObject sortDocument = MongoDbDocumentBuilder.builder().withDeviceSortOptions(sortOptions).document();
return processSearchResource(pageSize, pageOffset, filterDocument, sortDocument, MongoDbBasedDeviceDao::getDevicesWithId).onFailure(t -> TracingHelper.logError(span, "error finding devices", t)).onComplete(r -> span.finish());
}
use of org.eclipse.hono.service.management.Filter in project hono by eclipse.
the class MongoDbBasedTenantDao method find.
/**
* {@inheritDoc}
*/
@Override
public Future<SearchResult<TenantWithId>> find(final int pageSize, final int pageOffset, final List<Filter> filters, final List<Sort> sortOptions, final SpanContext tracingContext) {
Objects.requireNonNull(filters);
Objects.requireNonNull(sortOptions);
if (pageSize <= 0) {
throw new IllegalArgumentException("page size must be a positive integer");
}
if (pageOffset < 0) {
throw new IllegalArgumentException("page offset must not be negative");
}
final Span span = tracer.buildSpan("find Tenants").addReference(References.CHILD_OF, tracingContext).start();
final JsonObject filterDocument = MongoDbDocumentBuilder.builder().withTenantFilters(filters).document();
final JsonObject sortDocument = MongoDbDocumentBuilder.builder().withTenantSortOptions(sortOptions).document();
return processSearchResource(pageSize, pageOffset, filterDocument, sortDocument, MongoDbBasedTenantDao::getTenantsWithId).onFailure(t -> TracingHelper.logError(span, "error finding tenants", t)).onComplete(r -> span.finish());
}
use of org.eclipse.hono.service.management.Filter in project hono by eclipse.
the class DelegatingDeviceManagementHttpEndpointTest method testSearchDevicesSucceedsWithSearchCriteria.
/**
* Verifies that the endpoint uses search criteria provided in a request's query parameters.
*/
@Test
public void testSearchDevicesSucceedsWithSearchCriteria() {
final HttpServerResponse response = newResponse();
requestParams.add(RegistryManagementConstants.PARAM_PAGE_SIZE, "10");
requestParams.add(RegistryManagementConstants.PARAM_PAGE_OFFSET, "50");
requestParams.add(RegistryManagementConstants.PARAM_FILTER_JSON, "{\"field\":\"/manufacturer\",\"value\":\"ACME*\"}");
requestParams.add(RegistryManagementConstants.PARAM_SORT_JSON, "{\"field\":\"/manufacturer\",\"direction\":\"desc\"}");
final HttpServerRequest request = newRequest(HttpMethod.GET, "/v1/devices/mytenant", requestHeaders, requestParams, response);
router.handle(request);
verify(response).setStatusCode(HttpURLConnection.HTTP_OK);
verify(service).searchDevices(eq("mytenant"), eq(10), eq(50), argThat(filters -> {
if (filters.isEmpty()) {
return false;
} else {
final Filter filter = filters.get(0);
return "/manufacturer".equals(filter.getField().toString()) && "ACME*".equals(filter.getValue()) && Operator.eq == filter.getOperator();
}
}), argThat(sortOptions -> {
if (sortOptions.isEmpty()) {
return false;
} else {
final Sort sortOption = sortOptions.get(0);
return "/manufacturer".equals(sortOption.getField().toString()) && Direction.DESC == sortOption.getDirection();
}
}), any(Span.class));
}
use of org.eclipse.hono.service.management.Filter in project hono by eclipse.
the class AbstractDeviceManagementSearchDevicesTest method testSearchDevicesWithMultipleFiltersSucceeds.
/**
* Verifies that a request to search devices with multiple filters succeeds and matching devices are found.
*
* @param ctx The vert.x test context.
*/
@Test
default void testSearchDevicesWithMultipleFiltersSucceeds(final VertxTestContext ctx) {
final String tenantId = DeviceRegistryUtils.getUniqueIdentifier();
final int pageSize = 10;
final int pageOffset = 0;
final Filter filter1 = new Filter("/enabled", true);
final Filter filter2 = new Filter("/via/0", "gw-1");
final Filter filter3 = new Filter("/id", "testDevice1");
createDevices(tenantId, Map.of("testDevice1", new Device().setEnabled(true).setVia(List.of("gw-1")), "testDevice2", new Device().setEnabled(false))).compose(ok -> getDeviceManagementService().searchDevices(tenantId, pageSize, pageOffset, List.of(filter1, filter2, filter3), List.of(), NoopSpan.INSTANCE).onComplete(ctx.succeeding(s -> {
ctx.verify(() -> {
assertThat(s.getStatus()).isEqualTo(HttpURLConnection.HTTP_OK);
final SearchResult<DeviceWithId> searchResult = s.getPayload();
assertThat(searchResult.getTotal()).isEqualTo(1);
assertThat(searchResult.getResult()).hasSize(1);
assertThat(searchResult.getResult().get(0).getId()).isEqualTo("testDevice1");
});
ctx.completeNow();
})));
}
Aggregations