예제 #1
0
  @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();
    }
  }
예제 #2
0
  @Test(expected = NullPointerException.class)
  public void testRemoveClientListener_whenIdIsNull() {
    HazelcastInstance instance = Hazelcast.newHazelcastInstance();

    ClientService clientService = instance.getClientService();
    clientService.removeClientListener(null);
  }
예제 #3
0
  @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());
  }
예제 #4
0
  @Test
  public void testRemoveClientListener_whenNonExistingId() {
    HazelcastInstance instance = Hazelcast.newHazelcastInstance();

    ClientService clientService = instance.getClientService();

    clientService.removeClientListener("foobar");
  }
예제 #5
0
  @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);
  }
예제 #6
0
  @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());
  }
예제 #7
0
  @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);
  }
예제 #8
0
  @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));
    }
  }