コード例 #1
0
ファイル: GroupTest.java プロジェクト: EricCen/commons
  @Test
  public void testJoinsAndWatchesSurviveExpiredSession() throws Exception {
    onLoseMembership.execute();
    replay(onLoseMembership);

    assertEmptyMembershipObserved();

    Membership membership = joinGroup.join(onLoseMembership);
    String originalMemberId = membership.getMemberId();
    assertMembershipObserved(originalMemberId);

    expireSession(zkClient);

    // We should have lost our group membership and then re-gained it with a new ephemeral node.
    // We may or may-not see the intermediate state change but we must see the final state
    Iterable<String> members = listener.take();
    if (Iterables.isEmpty(members)) {
      members = listener.take();
    }
    assertEquals(1, Iterables.size(members));
    assertNotEqual(originalMemberId, Iterables.getOnlyElement(members));
    assertNotEqual(originalMemberId, membership.getMemberId());

    listener.assertEmpty();

    verify(onLoseMembership);
    reset(onLoseMembership); // Turn off expectations during ZK server shutdown.
  }
コード例 #2
0
  @Test
  public void testMemoryCapacityFires() {
    CacheConfiguration config = new CacheConfiguration();
    RecordingListener listener = new RecordingListener();
    config.addConfigurationListener(listener);

    assertRegistered(listener, config);
    listener.clearFiredEvents();

    for (int i = 0; i < 10; i++) {
      config.setMaxElementsInMemory(i + 1);
    }

    List<Event> events = listener.getFiredEvents();

    Assert.assertEquals(10, events.size());

    for (int i = 0; i < events.size(); i++) {
      Event e = events.get(i);

      Assert.assertEquals("mem", e.type);
      Assert.assertEquals(Integer.valueOf(i), e.oldValue);
      Assert.assertEquals(Integer.valueOf(i + 1), e.newValue);
    }
  }
コード例 #3
0
  public void testManualServiceStopWhileStarting() throws Exception {
    ManualSwitchedService service = new ManualSwitchedService();
    RecordingListener listener = RecordingListener.record(service);

    service.start();
    assertEquals(State.STARTING, service.state());
    assertFalse(service.isRunning());
    assertTrue(service.doStartCalled);

    service.stop();
    assertEquals(State.STOPPING, service.state());
    assertFalse(service.isRunning());
    assertFalse(service.doStopCalled);

    service.notifyStarted();
    assertEquals(State.STOPPING, service.state());
    assertFalse(service.isRunning());
    assertTrue(service.doStopCalled);

    service.notifyStopped();
    assertEquals(State.TERMINATED, service.state());
    assertFalse(service.isRunning());
    assertEquals(
        ImmutableList.of(State.STARTING, State.STOPPING, State.TERMINATED),
        listener.getStateHistory());
  }
コード例 #4
0
 public void testManualServiceFailWhileStarting() throws Exception {
   ManualSwitchedService service = new ManualSwitchedService();
   RecordingListener listener = RecordingListener.record(service);
   service.start();
   service.notifyFailed(EXCEPTION);
   assertEquals(ImmutableList.of(State.STARTING, State.FAILED), listener.getStateHistory());
 }
コード例 #5
0
  @Test
  public void testTtlFires() {
    CacheConfiguration config = new CacheConfiguration();
    RecordingListener listener = new RecordingListener();
    config.addConfigurationListener(listener);

    assertRegistered(listener, config);
    listener.clearFiredEvents();

    for (int i = 0; i < 10; i++) {
      config.setTimeToLiveSeconds(i + 1);
    }

    List<Event> events = listener.getFiredEvents();

    Assert.assertEquals(10, events.size());

    for (int i = 0; i < events.size(); i++) {
      Event e = events.get(i);

      Assert.assertEquals("ttl", e.type);
      Assert.assertEquals(Long.valueOf(i), e.oldValue);
      Assert.assertEquals(Long.valueOf(i + 1), e.newValue);
    }
  }
コード例 #6
0
  @Test
  public void testLoggingEnableDisable() {
    CacheConfiguration config = new CacheConfiguration();
    RecordingListener listener = new RecordingListener();
    config.addConfigurationListener(listener);

    assertRegistered(listener, config);
    listener.clearFiredEvents();

    config.setLogging(true);
    List<Event> events = listener.getFiredEvents();
    Assert.assertEquals(1, events.size());

    config.setLogging(false);
    events = listener.getFiredEvents();
    Assert.assertEquals(2, events.size());

    for (int i = 0; i < events.size(); i++) {
      Event e = events.get(i);

      Assert.assertEquals("logging", e.type);
      Assert.assertEquals(Boolean.valueOf(i != 0), e.oldValue);
      Assert.assertEquals(Boolean.valueOf(i == 0), e.newValue);
    }
  }
コード例 #7
0
  public void testThrowingServiceStartAndWait() throws Exception {
    StartThrowingService service = new StartThrowingService();
    RecordingListener listener = RecordingListener.record(service);

    try {
      service.startAndWait();
      fail();
    } catch (UncheckedExecutionException e) {
      assertEquals(service.exception, e.getCause());
    }
    assertEquals(ImmutableList.of(State.STARTING, State.FAILED), listener.getStateHistory());
  }
コード例 #8
0
  public void testStopUnstartedService() throws Exception {
    NoOpService service = new NoOpService();
    RecordingListener listener = RecordingListener.record(service);

    Future<State> stopResult = service.stop();
    assertEquals(State.TERMINATED, service.state());
    assertEquals(State.TERMINATED, stopResult.get());

    Future<State> startResult = service.start();
    assertEquals(State.TERMINATED, service.state());
    assertEquals(State.TERMINATED, startResult.get());
    assertEquals(State.TERMINATED, Iterables.getOnlyElement(listener.getStateHistory()));
  }
コード例 #9
0
  @Test
  public void testMultipleListeners() {
    CacheConfiguration config = new CacheConfiguration();
    RecordingListener listener1 = new RecordingListener();
    RecordingListener listener2 = new RecordingListener();
    config.addConfigurationListener(listener1);
    config.addConfigurationListener(listener2);

    assertRegistered(listener1, config);
    assertRegistered(listener2, config);
    listener1.clearFiredEvents();
    listener2.clearFiredEvents();

    for (int i = 0; i < 10; i++) {
      config.setTimeToIdleSeconds(i);
      config.setTimeToLiveSeconds(i);
      config.setMaxElementsInMemory(i);
      config.setMaxElementsOnDisk(i);
    }

    // 36 not 40 since the first four events don't change anything...
    Assert.assertEquals(36, listener1.getFiredEvents().size());
    Assert.assertEquals(36, listener2.getFiredEvents().size());

    Assert.assertEquals(listener1.getFiredEvents(), listener2.getFiredEvents());
  }
コード例 #10
0
  public void testNoOpServiceStartStopIdempotence() throws Exception {
    NoOpService service = new NoOpService();
    RecordingListener listener = RecordingListener.record(service);
    service.start();
    service.start();
    assertEquals(State.RUNNING, service.state());

    service.stop();
    service.stop();
    assertEquals(State.TERMINATED, service.state());
    assertEquals(
        ImmutableList.of(State.STARTING, State.RUNNING, State.STOPPING, State.TERMINATED),
        listener.getStateHistory());
  }
コード例 #11
0
  public void testFailingServiceStopAndWait_runFailinging() throws Exception {
    RunFailingService service = new RunFailingService();
    RecordingListener listener = RecordingListener.record(service);

    service.startAndWait();
    try {
      service.stopAndWait();
      fail();
    } catch (UncheckedExecutionException e) {
      assertEquals(EXCEPTION, e.getCause().getCause());
    }
    assertEquals(
        ImmutableList.of(State.STARTING, State.RUNNING, State.FAILED), listener.getStateHistory());
  }
コード例 #12
0
ファイル: GroupTest.java プロジェクト: EricCen/commons
  @Test
  public void testJoinsAndWatchesSurviveDisconnect() throws Exception {
    replay(onLoseMembership);

    assertEmptyMembershipObserved();

    Membership membership = joinGroup.join();
    String originalMemberId = membership.getMemberId();
    assertMembershipObserved(originalMemberId);

    shutdownNetwork();
    restartNetwork();

    // The member should still be present under existing ephemeral node since session did not
    // expire.
    watchGroup.watch(listener);
    assertMembershipObserved(originalMemberId);

    membership.cancel();

    assertEmptyMembershipObserved();
    assertEmptyMembershipObserved(); // and again for 2nd listener

    listener.assertEmpty();

    verify(onLoseMembership);
    reset(onLoseMembership); // Turn off expectations during ZK server shutdown.
  }
コード例 #13
0
  public void testThreadedServiceStartAndWaitStopAndWait() throws Throwable {
    ThreadedService service = new ThreadedService();
    RecordingListener listener = RecordingListener.record(service);
    service.start().get();
    assertEquals(State.RUNNING, service.state());

    service.awaitRunChecks();

    service.stopAndWait();
    assertEquals(State.TERMINATED, service.state());

    throwIfSet(thrownByExecutionThread);
    assertEquals(
        ImmutableList.of(State.STARTING, State.RUNNING, State.STOPPING, State.TERMINATED),
        listener.getStateHistory());
  }
コード例 #14
0
 public void testManualServiceFailureIdempotence() {
   ManualSwitchedService service = new ManualSwitchedService();
   RecordingListener.record(service);
   service.start();
   service.notifyFailed(new Exception("1"));
   service.notifyFailed(new Exception("2"));
   try {
     service.startAndWait();
     fail();
   } catch (UncheckedExecutionException e) {
     assertEquals("1", e.getCause().getMessage());
   }
 }
コード例 #15
0
  @Test
  public void testRemovingListeners() {
    CacheConfiguration config = new CacheConfiguration();
    RecordingListener listener1 = new RecordingListener();
    RecordingListener listener2 = new RecordingListener();
    config.addConfigurationListener(listener1);
    config.addConfigurationListener(listener2);

    assertRegistered(listener1, config);
    assertRegistered(listener2, config);
    listener1.clearFiredEvents();
    listener2.clearFiredEvents();

    for (int i = 0; i < 5; i++) {
      config.setTimeToIdleSeconds(i);
      config.setTimeToLiveSeconds(i);
      config.setMaxElementsInMemory(i);
      config.setMaxElementsOnDisk(i);
    }

    config.removeConfigurationListener(listener1);
    assertDeregistered(listener1, config);

    for (int i = 5; i < 10; i++) {
      config.setTimeToIdleSeconds(i);
      config.setTimeToLiveSeconds(i);
      config.setMaxElementsInMemory(i);
      config.setMaxElementsOnDisk(i);
    }

    config.removeConfigurationListener(listener2);
    assertDeregistered(listener2, config);

    List<Event> events1 = listener1.getFiredEvents();
    List<Event> events2 = listener2.getFiredEvents();

    // 17 not 21 since the first four events don't change anything...
    Assert.assertEquals(17, events1.size());
    // 37 not 41 since the first four events don't change anything...
    Assert.assertEquals(37, events2.size());

    for (Event e : events1) {
      Assert.assertTrue(events2.contains(e));
    }
  }
コード例 #16
0
ファイル: GroupTest.java プロジェクト: EricCen/commons
  @Test
  public void testStopWatching() throws Exception {
    replay(onLoseMembership);

    assertEmptyMembershipObserved();

    Membership member1 = joinGroup.join();
    String memberId1 = member1.getMemberId();
    assertMembershipObserved(memberId1);

    Membership member2 = joinGroup.join();
    String memberId2 = member2.getMemberId();
    assertMembershipObserved(memberId1, memberId2);

    stopWatching.execute();

    member1.cancel();
    Membership member3 = joinGroup.join();
    member2.cancel();
    member3.cancel();

    listener.assertEmpty();
  }
コード例 #17
0
 private void assertDeregistered(RecordingListener listener, CacheConfiguration config) {
   List<Event> events = listener.getFiredEvents();
   Assert.assertTrue(events.contains(new Event("deregistered", config, null)));
 }
コード例 #18
0
ファイル: GroupTest.java プロジェクト: EricCen/commons
  private void assertMembershipObserved(RecordingListener listener, String... expectedMemberIds)
      throws InterruptedException {

    assertEquals(ImmutableSet.copyOf(expectedMemberIds), ImmutableSet.copyOf(listener.take()));
  }