@Test
public void testKeyDistribution() throws Exception {
DistributedKeyManager manager1 = getKeyManager(injector1, true);
DistributedKeyManager manager2 = getKeyManager(injector2, false);
TimeUnit.MILLISECONDS.sleep(1000);
TestingTokenManager tokenManager1 =
new TestingTokenManager(manager1, injector1.getInstance(AccessTokenIdentifierCodec.class));
TestingTokenManager tokenManager2 =
new TestingTokenManager(manager2, injector2.getInstance(AccessTokenIdentifierCodec.class));
tokenManager1.startAndWait();
tokenManager2.startAndWait();
long now = System.currentTimeMillis();
AccessTokenIdentifier ident1 = new AccessTokenIdentifier("testuser", Lists.newArrayList("users", "admins"),
now, now + 60 * 60 * 1000);
AccessToken token1 = tokenManager1.signIdentifier(ident1);
tokenManager2.waitForKey(tokenManager1.getCurrentKey().getKeyId(), 2000, TimeUnit.MILLISECONDS);
tokenManager2.validateSecret(token1);
tokenManager2.waitForCurrentKey(2000, TimeUnit.MILLISECONDS);
AccessToken token2 = tokenManager2.signIdentifier(ident1);
tokenManager1.validateSecret(token2);
assertEquals(token1.getIdentifier().getUsername(), token2.getIdentifier().getUsername());
assertEquals(token1.getIdentifier().getGroups(), token2.getIdentifier().getGroups());
assertEquals(token1, token2);
tokenManager1.stopAndWait();
tokenManager2.stopAndWait();
}