@Test public void testClientListenerDisconnected() throws InterruptedException { Config config = new Config(); config.setProperty(GroupProperties.PROP_IO_THREAD_COUNT, "1"); final HazelcastInstance hz = Hazelcast.newHazelcastInstance(config); final HazelcastInstance hz2 = Hazelcast.newHazelcastInstance(config); int clientCount = 10; ClientDisconnectedListenerLatch listenerLatch = new ClientDisconnectedListenerLatch(2 * clientCount); hz.getClientService().addClientListener(listenerLatch); hz2.getClientService().addClientListener(listenerLatch); Collection<HazelcastInstance> clients = new LinkedList<HazelcastInstance>(); for (int i = 0; i < clientCount; i++) { HazelcastInstance client = HazelcastClient.newHazelcastClient(); IMap<Object, Object> map = client.getMap(randomMapName()); map.addEntryListener(new EntryAdapter<Object, Object>(), true); map.put(generateKeyOwnedBy(hz), "value"); map.put(generateKeyOwnedBy(hz2), "value"); clients.add(client); } ExecutorService ex = Executors.newFixedThreadPool(4); try { for (final HazelcastInstance client : clients) { ex.execute( new Runnable() { @Override public void run() { client.shutdown(); } }); } assertOpenEventually(listenerLatch, 30); assertTrueEventually( new AssertTask() { @Override public void run() throws Exception { assertEquals(0, hz.getClientService().getConnectedClients().size()); } }, 10); assertTrueEventually( new AssertTask() { @Override public void run() throws Exception { assertEquals(0, hz2.getClientService().getConnectedClients().size()); } }, 10); } finally { ex.shutdown(); } }
@Test(expected = NullPointerException.class) public void testRemoveClientListener_whenIdIsNull() { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); ClientService clientService = instance.getClientService(); clientService.removeClientListener(null); }
@Test public void testNumberOfClients_afterUnAuthenticatedClient_withTwoNode() { final HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(); final HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(); final ClientConfig clientConfig = new ClientConfig(); clientConfig.getGroupConfig().setPassword("wrongPassword"); try { HazelcastClient.newHazelcastClient(clientConfig); } catch (IllegalStateException ignored) { } assertEquals(0, instance1.getClientService().getConnectedClients().size()); assertEquals(0, instance2.getClientService().getConnectedClients().size()); }
@Test public void testRemoveClientListener_whenNonExistingId() { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); ClientService clientService = instance.getClientService(); clientService.removeClientListener("foobar"); }
@Test public void testClientListenerForBothNodes() { final HazelcastInstance instance1 = Hazelcast.newHazelcastInstance(); final HazelcastInstance instance2 = Hazelcast.newHazelcastInstance(); final ClientConnectedListenerLatch clientListenerLatch = new ClientConnectedListenerLatch(2); final ClientService clientService1 = instance1.getClientService(); clientService1.addClientListener(clientListenerLatch); final ClientService clientService2 = instance2.getClientService(); clientService2.addClientListener(clientListenerLatch); final HazelcastInstance client = HazelcastClient.newHazelcastClient(); final String instance1Key = generateKeyOwnedBy(instance1); final String instance2Key = generateKeyOwnedBy(instance2); final IMap<Object, Object> map = client.getMap("map"); map.put(instance1Key, 0); map.put(instance2Key, 0); assertClientConnected(clientService1, clientService2); assertOpenEventually(clientListenerLatch, 5); }
@Test public void testClientListener() throws InterruptedException { final HazelcastInstance instance = Hazelcast.newHazelcastInstance(); final ClientService clientService = instance.getClientService(); final CountDownLatch latchAdd = new CountDownLatch(2); final CountDownLatch latchRemove = new CountDownLatch(2); final AtomicInteger totalAdd = new AtomicInteger(0); final ClientListener clientListener = new ClientListener() { @Override public void clientConnected(Client client) { totalAdd.incrementAndGet(); latchAdd.countDown(); } @Override public void clientDisconnected(Client client) { latchRemove.countDown(); } }; final String id = clientService.addClientListener(clientListener); final HazelcastInstance client1 = HazelcastClient.newHazelcastClient(); final HazelcastInstance client2 = HazelcastClient.newHazelcastClient(); client1.getLifecycleService().shutdown(); client2.getLifecycleService().shutdown(); assertTrue(latchAdd.await(6, TimeUnit.SECONDS)); assertTrue(latchRemove.await(6, TimeUnit.SECONDS)); assertTrue(clientService.removeClientListener(id)); assertFalse(clientService.removeClientListener("foo")); assertEquals(0, clientService.getConnectedClients().size()); final HazelcastInstance client3 = HazelcastClient.newHazelcastClient(); assertTrueEventually( new AssertTask() { @Override public void run() throws Exception { assertEquals(1, clientService.getConnectedClients().size()); } }, 4); assertEquals(2, totalAdd.get()); }
@Test public void testRemoveClientListener_whenListenerAlreadyRemoved() { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); ClientService clientService = instance.getClientService(); ClientListener clientListener = mock(ClientListener.class); String id = clientService.addClientListener(clientListener); // first time remove clientService.removeClientListener(id); // second time remove clientService.removeClientListener(id); }
@Test public void testConnectedClients() { final HazelcastInstance instance = Hazelcast.newHazelcastInstance(); final HazelcastInstance client1 = HazelcastClient.newHazelcastClient(); final HazelcastInstance client2 = HazelcastClient.newHazelcastClient(); final ClientService clientService = instance.getClientService(); final Collection<Client> connectedClients = clientService.getConnectedClients(); assertEquals(2, connectedClients.size()); final String uuid1 = client1.getLocalEndpoint().getUuid(); final String uuid2 = client2.getLocalEndpoint().getUuid(); for (Client connectedClient : connectedClients) { final String uuid = connectedClient.getUuid(); assertTrue(uuid.equals(uuid1) || uuid.equals(uuid2)); } }