use of org.mockito.ArgumentCaptor in project hono by eclipse.
the class FileBasedCredentialsServiceTest method testLoadCredentialsCanReadOutputOfSaveToFile.
/**
* Verifies that the file written by the registry when persisting the registry's contents can
* be loaded in again.
*
* @param ctx The vert.x test context.
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testLoadCredentialsCanReadOutputOfSaveToFile(final TestContext ctx) {
// GIVEN a service configured to persist credentials to file
// that contains some credentials
props.setFilename(FILE_NAME);
props.setSaveToFile(true);
when(fileSystem.existsBlocking(FILE_NAME)).thenReturn(Boolean.TRUE);
final Async add = ctx.async(2);
final CredentialsObject hashedPassword = CredentialsObject.fromHashedPassword("4700", "bumlux", "secret", "sha-512", null, null, null);
final CredentialsObject psk = CredentialsObject.fromPresharedKey("4711", "sensor1", "sharedkey".getBytes(StandardCharsets.UTF_8), null, null);
svc.add(Constants.DEFAULT_TENANT, JsonObject.mapFrom(psk), ctx.asyncAssertSuccess(s -> {
ctx.assertEquals(HttpURLConnection.HTTP_CREATED, s.getStatus());
add.countDown();
}));
svc.add("OTHER_TENANT", JsonObject.mapFrom(hashedPassword), ctx.asyncAssertSuccess(s -> {
ctx.assertEquals(HttpURLConnection.HTTP_CREATED, s.getStatus());
add.countDown();
}));
add.await(2000);
// WHEN saving the registry content to the file and clearing the registry
final Async write = ctx.async();
doAnswer(invocation -> {
Handler handler = invocation.getArgument(2);
handler.handle(Future.succeededFuture());
write.complete();
return null;
}).when(fileSystem).writeFile(eq(FILE_NAME), any(Buffer.class), any(Handler.class));
svc.saveToFile();
write.await(2000);
ArgumentCaptor<Buffer> buffer = ArgumentCaptor.forClass(Buffer.class);
verify(fileSystem).writeFile(eq(FILE_NAME), buffer.capture(), any(Handler.class));
svc.clear();
assertNotRegistered(svc, Constants.DEFAULT_PATH_SEPARATOR, "sensor1", CredentialsConstants.SECRETS_TYPE_PRESHARED_KEY, ctx);
// THEN the credentials can be loaded back in from the file
final Async read = ctx.async();
doAnswer(invocation -> {
Handler handler = invocation.getArgument(1);
handler.handle(Future.succeededFuture(buffer.getValue()));
read.complete();
return null;
}).when(fileSystem).readFile(eq(FILE_NAME), any(Handler.class));
svc.loadCredentials();
read.await(2000);
assertRegistered(svc, Constants.DEFAULT_TENANT, "sensor1", CredentialsConstants.SECRETS_TYPE_PRESHARED_KEY, ctx);
assertRegistered(svc, "OTHER_TENANT", "bumlux", CredentialsConstants.SECRETS_TYPE_HASHED_PASSWORD, ctx);
}
use of org.mockito.ArgumentCaptor in project hono by eclipse.
the class RegistrationClientImplTest method testAssertRegistrationInvokesServiceIfNoCacheConfigured.
/**
* Verifies that the client retrieves registration information from the
* Device Registration service if no cache is configured.
*
* @param ctx The vert.x test context.
*/
@SuppressWarnings("unchecked")
@Test
public void testAssertRegistrationInvokesServiceIfNoCacheConfigured(final TestContext ctx) {
// GIVEN an adapter with no cache configured
final JsonObject registrationAssertion = newRegistrationAssertionResult();
final Message response = ProtonHelper.message(registrationAssertion.encode());
MessageHelper.addProperty(response, MessageHelper.APP_PROPERTY_STATUS, HttpURLConnection.HTTP_OK);
// WHEN getting registration information
final Async assertion = ctx.async();
client.assertRegistration("device").setHandler(ctx.asyncAssertSuccess(result -> assertion.complete()));
final ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(sender).send(messageCaptor.capture(), any(Handler.class));
response.setCorrelationId(messageCaptor.getValue().getMessageId());
final ProtonDelivery delivery = mock(ProtonDelivery.class);
client.handleResponse(delivery, response);
// THEN the registration information has been retrieved from the service
assertion.await();
// and not been put to the cache
verify(cache, never()).put(any(), any(RegistrationResult.class), any(Duration.class));
}
use of org.mockito.ArgumentCaptor in project hono by eclipse.
the class TenantClientImplTest method testGetTenantAddsInfoToCacheOnCacheMiss.
/**
* Verifies that on a cache miss the adapter retrieves tenant information
* from the Tenant service and puts it to the cache.
*
* @param ctx The vert.x test context.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetTenantAddsInfoToCacheOnCacheMiss(final TestContext ctx) {
// GIVEN an adapter with an empty cache
client.setResponseCache(cache);
final JsonObject tenantResult = newTenantResult("tenant");
// WHEN getting tenant information
final Async get = ctx.async();
client.get("tenant").setHandler(ctx.asyncAssertSuccess(tenant -> get.complete()));
final ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(sender).send(messageCaptor.capture(), any(Handler.class));
final Message response = ProtonHelper.message(tenantResult.encode());
MessageHelper.addProperty(response, MessageHelper.APP_PROPERTY_STATUS, HttpURLConnection.HTTP_OK);
MessageHelper.addCacheDirective(response, CacheDirective.maxAgeDirective(60));
response.setCorrelationId(messageCaptor.getValue().getMessageId());
final ProtonDelivery delivery = mock(ProtonDelivery.class);
client.handleResponse(delivery, response);
// THEN the tenant result has been added to the cache
get.await();
verify(cache).put(eq(TriTuple.of(TenantAction.get, "tenant", null)), any(TenantResult.class), any(Duration.class));
}
Aggregations