Search in sources :

Example 1 with MockProxyClient

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);
}
Also used : MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) Test(org.junit.Test)

Example 2 with MockProxyClient

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);
}
Also used : MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) Test(org.junit.Test)

Example 3 with MockProxyClient

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);
}
Also used : MockServerInfoService(com.twitter.distributedlog.client.proxy.MockDistributedLogServices.MockServerInfoService) MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient)

Example 4 with MockProxyClient

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());
}
Also used : HashMap(java.util.HashMap) ServerInfo(com.twitter.distributedlog.thrift.service.ServerInfo) MockServerInfoService(com.twitter.distributedlog.client.proxy.MockDistributedLogServices.MockServerInfoService) MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) CountDownLatch(java.util.concurrent.CountDownLatch) MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) Test(org.junit.Test)

Example 5 with MockProxyClient

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());
}
Also used : MockProxyClient(com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) Test(org.junit.Test)

Aggregations

MockProxyClient (com.twitter.distributedlog.client.proxy.MockProxyClientBuilder.MockProxyClient)8 InetSocketAddress (java.net.InetSocketAddress)7 SocketAddress (java.net.SocketAddress)7 Test (org.junit.Test)7 MockServerInfoService (com.twitter.distributedlog.client.proxy.MockDistributedLogServices.MockServerInfoService)4 ServerInfo (com.twitter.distributedlog.thrift.service.ServerInfo)3 CountDownLatch (java.util.concurrent.CountDownLatch)3 HashMap (java.util.HashMap)2 AtomicReference (java.util.concurrent.atomic.AtomicReference)1