use of com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient in project distributedlog by twitter.
the class TestProxyClientManager method testBasicCreateRemove.
@Test(timeout = 60000)
public void testBasicCreateRemove() throws Exception {
SocketAddress address = createSocketAddress(1000);
MockProxyClientBuilder builder = new MockProxyClientBuilder();
MockProxyClient mockProxyClient = createMockProxyClient(address);
builder.provideProxyClient(address, mockProxyClient);
ProxyClientManager clientManager = createProxyClientManager(builder, 0L);
assertEquals("There should be no clients in the manager", 0, clientManager.getNumProxies());
ProxyClient proxyClient = clientManager.createClient(address);
assertEquals("Create client should build the proxy client", 1, clientManager.getNumProxies());
assertTrue("The client returned should be the same client that builder built", mockProxyClient == proxyClient);
}
use of com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient in project distributedlog by twitter.
the class TestProxyClientManager method testGetShouldCreateClient.
@Test(timeout = 60000)
public void testGetShouldCreateClient() throws Exception {
SocketAddress address = createSocketAddress(2000);
MockProxyClientBuilder builder = new MockProxyClientBuilder();
MockProxyClient mockProxyClient = createMockProxyClient(address);
builder.provideProxyClient(address, mockProxyClient);
ProxyClientManager clientManager = createProxyClientManager(builder, 0L);
assertEquals("There should be no clients in the manager", 0, clientManager.getNumProxies());
ProxyClient proxyClient = clientManager.getClient(address);
assertEquals("Get client should build the proxy client", 1, clientManager.getNumProxies());
assertTrue("The client returned should be the same client that builder built", mockProxyClient == proxyClient);
}
use of com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient in project distributedlog by twitter.
the class TestProxyClientManager method createMockProxyClient.
private static Pair<MockProxyClient, MockServerInfoService> createMockProxyClient(SocketAddress address, ServerInfo serverInfo) {
MockServerInfoService service = new MockServerInfoService();
MockProxyClient proxyClient = new MockProxyClient(address, service);
service.updateServerInfo(serverInfo);
return Pair.of(proxyClient, service);
}
use of com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient in project distributedlog by twitter.
the class TestProxyClientManager method testPeriodicHandshake.
@Test(timeout = 60000)
public void testPeriodicHandshake() throws Exception {
final int numHosts = 3;
final int numStreamsPerHost = 3;
final int initialPort = 5000;
MockProxyClientBuilder builder = new MockProxyClientBuilder();
Map<SocketAddress, ServerInfo> serverInfoMap = new HashMap<SocketAddress, ServerInfo>();
Map<SocketAddress, MockServerInfoService> mockServiceMap = new HashMap<SocketAddress, MockServerInfoService>();
final Map<SocketAddress, CountDownLatch> hostDoneLatches = new HashMap<SocketAddress, CountDownLatch>();
for (int i = 0; i < numHosts; i++) {
SocketAddress address = createSocketAddress(initialPort + i);
ServerInfo serverInfo = new ServerInfo();
for (int j = 0; j < numStreamsPerHost; j++) {
serverInfo.putToOwnerships(runtime.getMethodName() + "_stream_" + j, address.toString());
}
Pair<MockProxyClient, MockServerInfoService> mockProxyClient = createMockProxyClient(address, serverInfo);
builder.provideProxyClient(address, mockProxyClient.getLeft());
serverInfoMap.put(address, serverInfo);
mockServiceMap.put(address, mockProxyClient.getRight());
hostDoneLatches.put(address, new CountDownLatch(2));
}
final Map<SocketAddress, ServerInfo> results = new HashMap<SocketAddress, ServerInfo>();
final CountDownLatch doneLatch = new CountDownLatch(numHosts);
ProxyListener listener = new ProxyListener() {
@Override
public void onHandshakeSuccess(SocketAddress address, ProxyClient client, ServerInfo serverInfo) {
synchronized (results) {
results.put(address, serverInfo);
CountDownLatch latch = hostDoneLatches.get(address);
if (null != latch) {
latch.countDown();
}
}
doneLatch.countDown();
}
@Override
public void onHandshakeFailure(SocketAddress address, ProxyClient client, Throwable cause) {
}
};
TestHostProvider rs = new TestHostProvider();
ProxyClientManager clientManager = createProxyClientManager(builder, rs, 50L);
clientManager.setPeriodicHandshakeEnabled(false);
clientManager.registerProxyListener(listener);
assertEquals("There should be no clients in the manager", 0, clientManager.getNumProxies());
for (int i = 0; i < numHosts; i++) {
SocketAddress address = createSocketAddress(initialPort + i);
rs.addHost(address);
clientManager.createClient(address);
}
// make sure the first 3 handshakes going through
doneLatch.await();
assertEquals("Handshake should return server info", numHosts, results.size());
assertTrue("Handshake should get all server infos", Maps.difference(serverInfoMap, results).areEqual());
// update server info
for (int i = 0; i < numHosts; i++) {
SocketAddress address = createSocketAddress(initialPort + i);
ServerInfo serverInfo = new ServerInfo();
for (int j = 0; j < numStreamsPerHost; j++) {
serverInfo.putToOwnerships(runtime.getMethodName() + "_new_stream_" + j, address.toString());
}
MockServerInfoService service = mockServiceMap.get(address);
serverInfoMap.put(address, serverInfo);
service.updateServerInfo(serverInfo);
}
clientManager.setPeriodicHandshakeEnabled(true);
for (int i = 0; i < numHosts; i++) {
SocketAddress address = createSocketAddress(initialPort + i);
CountDownLatch latch = hostDoneLatches.get(address);
latch.await();
}
assertTrue("Periodic handshake should update all server infos", Maps.difference(serverInfoMap, results).areEqual());
}
use of com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient in project distributedlog by twitter.
the class TestProxyClientManager method testConditionalRemoveClient.
@Test(timeout = 60000)
public void testConditionalRemoveClient() throws Exception {
SocketAddress address = createSocketAddress(3000);
MockProxyClientBuilder builder = new MockProxyClientBuilder();
MockProxyClient mockProxyClient = createMockProxyClient(address);
MockProxyClient anotherMockProxyClient = createMockProxyClient(address);
builder.provideProxyClient(address, mockProxyClient);
ProxyClientManager clientManager = createProxyClientManager(builder, 0L);
assertEquals("There should be no clients in the manager", 0, clientManager.getNumProxies());
clientManager.createClient(address);
assertEquals("Create client should build the proxy client", 1, clientManager.getNumProxies());
clientManager.removeClient(address, anotherMockProxyClient);
assertEquals("Conditional remove should not remove proxy client", 1, clientManager.getNumProxies());
clientManager.removeClient(address, mockProxyClient);
assertEquals("Conditional remove should remove proxy client", 0, clientManager.getNumProxies());
}
Aggregations