Search in sources :

Example 21 with Future

use of io.vertx.core.Future in project hono by eclipse.

the class FileBasedRegistrationServiceTest method testDoStartLoadsDeviceIdentities.

/**
 * Verifies that device identities are successfully loaded from file during startup.
 *
 * @param ctx The test context.
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDoStartLoadsDeviceIdentities(final TestContext ctx) {
    // GIVEN a service configured with a file name
    when(fileSystem.existsBlocking(props.getFilename())).thenReturn(Boolean.TRUE);
    doAnswer(invocation -> {
        final Buffer data = DeviceRegistryTestUtils.readFile(FILE_NAME);
        Handler handler = invocation.getArgument(1);
        handler.handle(Future.succeededFuture(data));
        return null;
    }).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
    // WHEN the service is started
    Async startup = ctx.async();
    Future<Void> startFuture = Future.future();
    startFuture.setHandler(ctx.asyncAssertSuccess(s -> {
        startup.complete();
    }));
    registrationService.doStart(startFuture);
    // THEN the device identities from the file are loaded
    startup.await();
    registrationService.getDevice(TENANT, DEVICE, ctx.asyncAssertSuccess());
    registrationService.getDevice(TENANT, "4712", ctx.asyncAssertSuccess(result -> {
        final JsonObject data = result.getPayload().getJsonObject(RegistrationConstants.FIELD_DATA);
        ctx.assertEquals(data.getString(FileBasedRegistrationService.PROPERTY_VIA), GW);
    }));
    registrationService.getDevice(TENANT, GW, ctx.asyncAssertSuccess());
}
Also used : Buffer(io.vertx.core.buffer.Buffer) CoreMatchers.is(org.hamcrest.CoreMatchers.is) HttpURLConnection(java.net.HttpURLConnection) TestContext(io.vertx.ext.unit.TestContext) Async(io.vertx.ext.unit.Async) ArgumentMatchers(org.mockito.ArgumentMatchers) RunWith(org.junit.runner.RunWith) EventBusMessage(org.eclipse.hono.util.EventBusMessage) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) Constants(org.eclipse.hono.util.Constants) Context(io.vertx.core.Context) Assert.assertThat(org.junit.Assert.assertThat) EventBus(io.vertx.core.eventbus.EventBus) RegistrationResult(org.eclipse.hono.util.RegistrationResult) Timeout(org.junit.rules.Timeout) JsonObject(io.vertx.core.json.JsonObject) Before(org.junit.Before) Vertx(io.vertx.core.Vertx) RegistrationConstants(org.eclipse.hono.util.RegistrationConstants) Test(org.junit.Test) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) Future(io.vertx.core.Future) StandardCharsets(java.nio.charset.StandardCharsets) Mockito(org.mockito.Mockito) Rule(org.junit.Rule) Buffer(io.vertx.core.buffer.Buffer) Assert.assertFalse(org.junit.Assert.assertFalse) FileSystem(io.vertx.core.file.FileSystem) Handler(io.vertx.core.Handler) Async(io.vertx.ext.unit.Async) Handler(io.vertx.core.Handler) JsonObject(io.vertx.core.json.JsonObject) Test(org.junit.Test)

Example 22 with Future

use of io.vertx.core.Future in project hono by eclipse.

the class FileBasedRegistrationServiceTest method testContentsNotSavedOnShutdownIfSavingIfDisabled.

/**
 * Verifies that setting the <em>saveToFile</em> configuration property to <em>false</em> prevents
 * the registration service to write its content to the file system during shutdown.
 *
 * @param ctx The vert.x test context.
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testContentsNotSavedOnShutdownIfSavingIfDisabled(final TestContext ctx) {
    // GIVEN a registration service configured to not persist data
    props.setSaveToFile(false);
    when(fileSystem.existsBlocking(props.getFilename())).thenReturn(Boolean.TRUE);
    doAnswer(invocation -> {
        Handler handler = invocation.getArgument(1);
        handler.handle(Future.failedFuture("malformed data"));
        return null;
    }).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
    Async startup = ctx.async();
    Future<Void> startupTracker = Future.future();
    startupTracker.setHandler(ctx.asyncAssertSuccess(started -> {
        startup.complete();
    }));
    registrationService.doStart(startupTracker);
    startup.await();
    // WHEN adding a device
    registrationService.addDevice(TENANT, DEVICE, new JsonObject());
    // and shutting down the service
    Async shutdown = ctx.async();
    Future<Void> shutdownTracker = Future.future();
    shutdownTracker.setHandler(ctx.asyncAssertSuccess(done -> {
        shutdown.complete();
    }));
    registrationService.doStop(shutdownTracker);
    // THEN no data has been written to the file system
    shutdown.await();
    verify(fileSystem, never()).createFile(eq(props.getFilename()), any(Handler.class));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) HttpURLConnection(java.net.HttpURLConnection) TestContext(io.vertx.ext.unit.TestContext) Async(io.vertx.ext.unit.Async) ArgumentMatchers(org.mockito.ArgumentMatchers) RunWith(org.junit.runner.RunWith) EventBusMessage(org.eclipse.hono.util.EventBusMessage) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) Constants(org.eclipse.hono.util.Constants) Context(io.vertx.core.Context) Assert.assertThat(org.junit.Assert.assertThat) EventBus(io.vertx.core.eventbus.EventBus) RegistrationResult(org.eclipse.hono.util.RegistrationResult) Timeout(org.junit.rules.Timeout) JsonObject(io.vertx.core.json.JsonObject) Before(org.junit.Before) Vertx(io.vertx.core.Vertx) RegistrationConstants(org.eclipse.hono.util.RegistrationConstants) Test(org.junit.Test) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) Future(io.vertx.core.Future) StandardCharsets(java.nio.charset.StandardCharsets) Mockito(org.mockito.Mockito) Rule(org.junit.Rule) Buffer(io.vertx.core.buffer.Buffer) Assert.assertFalse(org.junit.Assert.assertFalse) FileSystem(io.vertx.core.file.FileSystem) Handler(io.vertx.core.Handler) Async(io.vertx.ext.unit.Async) Handler(io.vertx.core.Handler) JsonObject(io.vertx.core.json.JsonObject) Test(org.junit.Test)

Example 23 with Future

use of io.vertx.core.Future in project hono by eclipse.

the class FileBasedRegistrationServiceTest method testPeriodicSafeJobIsNotScheduledIfSavingIfDisabled.

/**
 * Verifies that setting the <em>saveToFile</em> configuration property to <em>false</em> prevents
 * the registration service to write its content to the file system periodically.
 *
 * @param ctx The vert.x test context.
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testPeriodicSafeJobIsNotScheduledIfSavingIfDisabled(final TestContext ctx) {
    props.setSaveToFile(false);
    when(fileSystem.existsBlocking(props.getFilename())).thenReturn(Boolean.TRUE);
    doAnswer(invocation -> {
        Handler handler = invocation.getArgument(1);
        handler.handle(Future.failedFuture("malformed file"));
        return null;
    }).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
    Async startup = ctx.async();
    Future<Void> startupTracker = Future.future();
    startupTracker.setHandler(ctx.asyncAssertSuccess(done -> {
        startup.complete();
    }));
    registrationService.doStart(startupTracker);
    startup.await();
    verify(vertx, never()).setPeriodic(anyLong(), any(Handler.class));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) HttpURLConnection(java.net.HttpURLConnection) TestContext(io.vertx.ext.unit.TestContext) Async(io.vertx.ext.unit.Async) ArgumentMatchers(org.mockito.ArgumentMatchers) RunWith(org.junit.runner.RunWith) EventBusMessage(org.eclipse.hono.util.EventBusMessage) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) Constants(org.eclipse.hono.util.Constants) Context(io.vertx.core.Context) Assert.assertThat(org.junit.Assert.assertThat) EventBus(io.vertx.core.eventbus.EventBus) RegistrationResult(org.eclipse.hono.util.RegistrationResult) Timeout(org.junit.rules.Timeout) JsonObject(io.vertx.core.json.JsonObject) Before(org.junit.Before) Vertx(io.vertx.core.Vertx) RegistrationConstants(org.eclipse.hono.util.RegistrationConstants) Test(org.junit.Test) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) Future(io.vertx.core.Future) StandardCharsets(java.nio.charset.StandardCharsets) Mockito(org.mockito.Mockito) Rule(org.junit.Rule) Buffer(io.vertx.core.buffer.Buffer) Assert.assertFalse(org.junit.Assert.assertFalse) FileSystem(io.vertx.core.file.FileSystem) Handler(io.vertx.core.Handler) Async(io.vertx.ext.unit.Async) Handler(io.vertx.core.Handler) Test(org.junit.Test)

Example 24 with Future

use of io.vertx.core.Future in project hono by eclipse.

the class FileBasedTenantServiceTest method testDoStartIgnoresMalformedJson.

/**
 * Verifies that the tenant service successfully starts up even if
 * the file to read tenants from contains malformed JSON.
 *
 * @param ctx The vert.x context.
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDoStartIgnoresMalformedJson(final TestContext ctx) {
    // GIVEN a tenant service configured to read data from a file
    // that contains malformed JSON
    props.setFilename(FILE_NAME);
    when(fileSystem.existsBlocking(FILE_NAME)).thenReturn(Boolean.TRUE);
    doAnswer(invocation -> {
        final Buffer data = mock(Buffer.class);
        when(data.getBytes()).thenReturn("NO JSON".getBytes(StandardCharsets.UTF_8));
        final Handler handler = invocation.getArgument(1);
        handler.handle(Future.succeededFuture(data));
        return null;
    }).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
    // WHEN starting the service
    final Future<Void> startupTracker = Future.future();
    startupTracker.setHandler(ctx.asyncAssertSuccess(started -> {
    // THEN startup succeeds
    }));
    svc.doStart(startupTracker);
}
Also used : Buffer(io.vertx.core.buffer.Buffer) CoreMatchers.is(org.hamcrest.CoreMatchers.is) HttpURLConnection(java.net.HttpURLConnection) TestContext(io.vertx.ext.unit.TestContext) Async(io.vertx.ext.unit.Async) TenantConstants(org.eclipse.hono.util.TenantConstants) RunWith(org.junit.runner.RunWith) Constants(org.eclipse.hono.util.Constants) Context(io.vertx.core.Context) Assert.assertThat(org.junit.Assert.assertThat) ArgumentCaptor(org.mockito.ArgumentCaptor) EventBus(io.vertx.core.eventbus.EventBus) Matchers.eq(org.mockito.Matchers.eq) TenantService(org.eclipse.hono.service.tenant.TenantService) Timeout(org.junit.rules.Timeout) JsonObject(io.vertx.core.json.JsonObject) Before(org.junit.Before) Vertx(io.vertx.core.Vertx) Test(org.junit.Test) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) Future(io.vertx.core.Future) StandardCharsets(java.nio.charset.StandardCharsets) Matchers.any(org.mockito.Matchers.any) Mockito(org.mockito.Mockito) JsonArray(io.vertx.core.json.JsonArray) Rule(org.junit.Rule) Buffer(io.vertx.core.buffer.Buffer) FileSystem(io.vertx.core.file.FileSystem) Handler(io.vertx.core.Handler) Handler(io.vertx.core.Handler) Test(org.junit.Test)

Example 25 with Future

use of io.vertx.core.Future in project hono by eclipse.

the class FileBasedTenantServiceTest method testDoStartLoadsTenants.

/**
 * Verifies that tenants are successfully loaded from file during startup.
 *
 * @param ctx The test context.
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testDoStartLoadsTenants(final TestContext ctx) {
    // GIVEN a service configured with a file name
    props.setFilename(FILE_NAME);
    when(fileSystem.existsBlocking(props.getFilename())).thenReturn(Boolean.TRUE);
    doAnswer(invocation -> {
        final Buffer data = DeviceRegistryTestUtils.readFile(FILE_NAME);
        final Handler handler = invocation.getArgument(1);
        handler.handle(Future.succeededFuture(data));
        return null;
    }).when(fileSystem).readFile(eq(props.getFilename()), any(Handler.class));
    // WHEN the service is started
    final Async startup = ctx.async();
    final Future<Void> startFuture = Future.future();
    startFuture.setHandler(ctx.asyncAssertSuccess(s -> {
        startup.complete();
    }));
    svc.doStart(startFuture);
    // THEN the credentials from the file are loaded
    startup.await();
    assertTenantExists(svc, Constants.DEFAULT_TENANT, ctx);
}
Also used : Buffer(io.vertx.core.buffer.Buffer) CoreMatchers.is(org.hamcrest.CoreMatchers.is) HttpURLConnection(java.net.HttpURLConnection) TestContext(io.vertx.ext.unit.TestContext) Async(io.vertx.ext.unit.Async) TenantConstants(org.eclipse.hono.util.TenantConstants) RunWith(org.junit.runner.RunWith) Constants(org.eclipse.hono.util.Constants) Context(io.vertx.core.Context) Assert.assertThat(org.junit.Assert.assertThat) ArgumentCaptor(org.mockito.ArgumentCaptor) EventBus(io.vertx.core.eventbus.EventBus) Matchers.eq(org.mockito.Matchers.eq) TenantService(org.eclipse.hono.service.tenant.TenantService) Timeout(org.junit.rules.Timeout) JsonObject(io.vertx.core.json.JsonObject) Before(org.junit.Before) Vertx(io.vertx.core.Vertx) Test(org.junit.Test) VertxUnitRunner(io.vertx.ext.unit.junit.VertxUnitRunner) Future(io.vertx.core.Future) StandardCharsets(java.nio.charset.StandardCharsets) Matchers.any(org.mockito.Matchers.any) Mockito(org.mockito.Mockito) JsonArray(io.vertx.core.json.JsonArray) Rule(org.junit.Rule) Buffer(io.vertx.core.buffer.Buffer) FileSystem(io.vertx.core.file.FileSystem) Handler(io.vertx.core.Handler) Async(io.vertx.ext.unit.Async) Handler(io.vertx.core.Handler) Test(org.junit.Test)

Aggregations

Future (io.vertx.core.Future)375 HttpURLConnection (java.net.HttpURLConnection)195 Handler (io.vertx.core.Handler)174 List (java.util.List)166 Objects (java.util.Objects)164 JsonObject (io.vertx.core.json.JsonObject)163 Promise (io.vertx.core.Promise)159 Vertx (io.vertx.core.Vertx)157 Buffer (io.vertx.core.buffer.Buffer)149 Optional (java.util.Optional)147 Logger (org.slf4j.Logger)136 LoggerFactory (org.slf4j.LoggerFactory)136 CompositeFuture (io.vertx.core.CompositeFuture)127 ClientErrorException (org.eclipse.hono.client.ClientErrorException)127 Map (java.util.Map)122 Span (io.opentracing.Span)117 AsyncResult (io.vertx.core.AsyncResult)112 TracingHelper (org.eclipse.hono.tracing.TracingHelper)98 Constants (org.eclipse.hono.util.Constants)97 ArrayList (java.util.ArrayList)94