/** * Creates an exception for a registration result. * * @param result The result containing the status code. * @return The exception. * @throws NullPointerException if response is {@code null}. */ public static final ServiceInvocationException from(final RegistrationResult result) { final String detailMessage = Optional.ofNullable(result.getPayload()) .map(payload -> payload.getString(RegistrationConstants.FIELD_ERROR)).orElse(null); return StatusCodeMapper.from(result.getStatus(), detailMessage); }
private Future<EventBusMessage> processDeregisterRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("deregistering device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); removeDevice(tenantId, deviceId, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processDeregisterRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("deregistering device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); removeDevice(tenantId, deviceId, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processGetRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("retrieving device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); getDevice(tenantId, deviceId, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processUpdateRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); final JsonObject payload = getRequestPayload(request.getJsonPayload()); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("updating registration information for device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); updateDevice(tenantId, deviceId, payload, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processRegisterRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); final JsonObject payload = getRequestPayload(request.getJsonPayload()); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("registering device [{}] for tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); addDevice(tenantId, deviceId, payload, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processGetRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("retrieving device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); getDevice(tenantId, deviceId, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setJsonPayload(res.getPayload()) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processRegisterRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); final JsonObject payload = getRequestPayload(request.getJsonPayload()); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("registering device [{}] for tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); addDevice(tenantId, deviceId, payload, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
private Future<EventBusMessage> processUpdateRequest(final EventBusMessage request) { final String tenantId = request.getTenant(); final String deviceId = request.getDeviceId(); final JsonObject payload = getRequestPayload(request.getJsonPayload()); if (tenantId == null || deviceId == null) { return Future.failedFuture(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST)); } else { log.debug("updating registration information for device [{}] of tenant [{}]", deviceId, tenantId); final Future<RegistrationResult> result = Future.future(); updateDevice(tenantId, deviceId, payload, result.completer()); return result.map(res -> { return request.getResponse(res.getStatus()) .setDeviceId(deviceId) .setCacheDirective(res.getCacheDirective()); }); } }
/** * Verifies that the registry returns 404 when unregistering an unknown device. * * @param ctx The vert.x test context. */ @Test public void testDeregisterUnknownDeviceReturnsNotFound(final TestContext ctx) { getCompleteRegistrationService() .removeDevice(TENANT, DEVICE, ctx.asyncAssertSuccess(response -> { ctx.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, response.getStatus()); })); }
/** * Verifies that the registry returns 404 when getting an unknown device. * * @param ctx The vert.x test context. */ @Test public void testGetUnknownDeviceReturnsNotFound(final TestContext ctx) { getCompleteRegistrationService() .getDevice(TENANT, DEVICE, ctx.asyncAssertSuccess(response -> { ctx.assertEquals(HttpURLConnection.HTTP_NOT_FOUND, response.getStatus()); })); }
/** * Verifies that the addDevice method returns not implemented. * * @param ctx The vertx unit test context. */ @Test public void testAddDevice(final TestContext ctx) { // GIVEN an empty registry final CompleteBaseRegistrationService<ServiceConfigProperties> registrationService = newCompleteRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to add a new device registrationService.addDevice(Constants.DEFAULT_TENANT, "4711", new JsonObject(), ctx.asyncAssertSuccess(result -> { // THEN the response contain a JWT token with an empty result with status code 501. ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_IMPLEMENTED); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that the updateDevice method returns not implemented. * * @param ctx The vertx unit test context. */ @Test public void testUpdateDevice(final TestContext ctx) { // GIVEN an empty registry final CompleteBaseRegistrationService<ServiceConfigProperties> registrationService = newCompleteRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to update a device registrationService.updateDevice(Constants.DEFAULT_TENANT, "4711", new JsonObject(), ctx.asyncAssertSuccess(result -> { // THEN the response contain a JWT token with an empty result with status code 501. ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_IMPLEMENTED); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that the registry returns 200 when getting an existing device. * * @param ctx The vert.x test context. */ @Test public void testGetSucceedsForRegisteredDevice(final TestContext ctx) { final Future<RegistrationResult> result = Future.future(); getCompleteRegistrationService().addDevice(TENANT, DEVICE, new JsonObject(), result.completer()); result.compose(response -> { ctx.assertEquals(HttpURLConnection.HTTP_CREATED, response.getStatus()); final Future<RegistrationResult> addResult = Future.future(); getCompleteRegistrationService().getDevice(TENANT, DEVICE, addResult.completer()); return addResult; }).setHandler( ctx.asyncAssertSuccess(s -> { ctx.assertEquals(HttpURLConnection.HTTP_OK, s.getStatus()); ctx.assertNotNull(s.getPayload()); } )); }
/** * Verifies that the removeDevice method returns not implemented. * * @param ctx The vertx unit test context. */ @Test public void testRemoveDevice(final TestContext ctx) { // GIVEN an empty registry final CompleteBaseRegistrationService<ServiceConfigProperties> registrationService = newCompleteRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to remove a device registrationService.removeDevice(Constants.DEFAULT_TENANT, "4711", ctx.asyncAssertSuccess(result -> { // THEN the response contain a JWT token with an empty result with status code 501. ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_IMPLEMENTED); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that the getDevice method returns not implemented. * * @param ctx The vertx unit test context. */ @Test public void testGetDevice(final TestContext ctx) { // GIVEN an empty registry final CompleteBaseRegistrationService<ServiceConfigProperties> registrationService = newCompleteRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to get a device's data registrationService.getDevice(Constants.DEFAULT_TENANT, "4711", ctx.asyncAssertSuccess(result -> { // THEN the response contain a JWT token with an empty result with status code 501. ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_IMPLEMENTED); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that a non existing device's status cannot be asserted. * * @param ctx The vertx unit test context. */ @Test public void testAssertDeviceRegistrationFailsForNonExistingDevice(final TestContext ctx) { // GIVEN a registry that does not contain any devices final BaseRegistrationService<ServiceConfigProperties> registrationService = newRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to assert a device's registration status registrationService.assertRegistration(Constants.DEFAULT_TENANT, "non-existent", ctx.asyncAssertSuccess(result -> { // THEN the response does not contain a JWT token ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_FOUND); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that a disabled device's status cannot be asserted. * * @param ctx The vertx unit test context. */ @Test public void testAssertDeviceRegistrationFailsForDisabledDevice(final TestContext ctx) { // GIVEN a registry that contains a disabled device final BaseRegistrationService<ServiceConfigProperties> registrationService = newRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to assert the device's registration status registrationService.assertRegistration(Constants.DEFAULT_TENANT, "4712", ctx.asyncAssertSuccess(result -> { // THEN the response does not contain a JWT token ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_NOT_FOUND); ctx.assertNull(result.getPayload()); })); }
/** * Verifies that a device's status cannot be asserted by a disabled gateway. * * @param ctx The vertx unit test context. */ @Test public void testAssertDeviceRegistrationFailsForDisabledGateway(final TestContext ctx) { // GIVEN a registry that contains an enabled device // and a gateway that the device is configured for but // which is disabled final BaseRegistrationService<ServiceConfigProperties> registrationService = newRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to assert the device's registration status for a gateway registrationService.assertRegistration(Constants.DEFAULT_TENANT, "4713", "gw-3", ctx.asyncAssertSuccess(result -> { // THEN the response contains a 403 status ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_FORBIDDEN); // and does not contain a JWT token ctx.assertNull(result.getPayload()); })); }
/** * Verifies that a device's status cannot be asserted by a non-existing gateway. * * @param ctx The vertx unit test context. */ @Test public void testAssertDeviceRegistrationFailsForNonExistingGateway(final TestContext ctx) { // GIVEN a registry that contains an enabled device but no gateway final BaseRegistrationService<ServiceConfigProperties> registrationService = newRegistrationService(); registrationService.setRegistrationAssertionFactory(RegistrationAssertionHelperImpl.forSigning(vertx, props)); // WHEN trying to assert the device's registration status for a gateway registrationService.assertRegistration(Constants.DEFAULT_TENANT, "4711", "non-existent-gw", ctx.asyncAssertSuccess(result -> { // THEN the response contains a 403 status ctx.assertEquals(result.getStatus(), HttpURLConnection.HTTP_FORBIDDEN); // and does not contain a JWT token ctx.assertNull(result.getPayload()); })); }