Package org.robotninjas.barge.jaxrs.ws

Source Code of org.robotninjas.barge.jaxrs.ws.WsEventListenerTest

package org.robotninjas.barge.jaxrs.ws;

import org.jetlang.fibers.FiberStub;
import org.junit.Test;
import org.robotninjas.barge.api.AppendEntries;
import org.robotninjas.barge.api.RequestVote;
import org.robotninjas.barge.state.Raft;

import static org.mockito.Mockito.*;
import static org.robotninjas.barge.state.Raft.StateType.CANDIDATE;
import static org.robotninjas.barge.state.Raft.StateType.LEADER;
import static org.robotninjas.barge.state.Raft.StateType.START;

public class WsEventListenerTest {

  private final FiberStub fiber = spy(new FiberStub());
  private final WsEventListener wsEventListener = new WsEventListener(fiber);
  private final Listener listener = mock(Listener.class);
  private final Raft raft = mock(Raft.class);

  @Test
  public void starts_executor_when_starting() throws Exception {
    wsEventListener.start();

    verify(fiber).start();
  }

  @Test
  public void disposes_executor_when_stopping() throws Exception {
    wsEventListener.stop();

    verify(fiber).dispose();
  }

  @Test
  public void dispatch_runnable_notifying_state_change_to_registered_listener_when_state_changes() throws Exception {
    wsEventListener.addClient(listener);
    wsEventListener.changeState(raft, CANDIDATE, LEADER);

    fiber.executeAllPending();

    verify(listener).send(contains("stateChange"));
  }

  @Test
  public void dispatch_runnable_notifying_invalid_transition_to_registered_listener_when_transition_is_invalid() throws Exception {
    wsEventListener.addClient(listener);
    wsEventListener.invalidTransition(raft, LEADER, START);

    fiber.executeAllPending();

    verify(listener).send(contains("invalidTransition"));
  }

  @Test
  public void dispatch_runnable_notifying_stop_to_registered_listener_when_stopping() throws Exception {
    wsEventListener.addClient(listener);
    wsEventListener.stop(raft);

    fiber.executeAllPending();

    verify(listener).send(contains("stopping"));
  }

  @Test
  public void dispatch_runnable_notifying_init_to_registered_listener_when_initialized() throws Exception {
    wsEventListener.addClient(listener);
    wsEventListener.init(raft);

    fiber.executeAllPending();

    verify(listener).send(contains("init"));
  }

  @Test
  public void dispatch_runnable_notifying_append_entries_to_registered_listener() throws Exception {
    AppendEntries entries = AppendEntries.getDefaultInstance();

    wsEventListener.addClient(listener);
    wsEventListener.appendEntries(raft, entries);

    fiber.executeAllPending();

    verify(listener).send(contains("appendEntries"));
  }

  @Test
  public void dispatch_runnable_notifying_request_vote_to_registered_listener() throws Exception {
    RequestVote vote = RequestVote.getDefaultInstance();

    wsEventListener.addClient(listener);
    wsEventListener.requestVote(raft, vote);

    fiber.executeAllPending();

    verify(listener).send(contains("requestVote"));
  }

  @Test
  public void dispatch_runnable_notifying_commit_to_registered_listener() throws Exception {
    byte[] bytes = "foo".getBytes();

    wsEventListener.addClient(listener);
    wsEventListener.commit(raft, bytes);

    fiber.executeAllPending();

    verify(listener).send(contains("commit"));
  }


  @Test
  public void removed_listener_does_not_receive_notifications_after_its_removal() throws Exception {
    wsEventListener.addClient(listener);
    wsEventListener.changeState(raft, CANDIDATE, LEADER);
    fiber.executeAllPending();

    wsEventListener.removeClient(listener);

    wsEventListener.changeState(raft, CANDIDATE, LEADER);
    fiber.executeAllPending();

    verify(listener, times(1)).send(anyString());
  }

}
TOP

Related Classes of org.robotninjas.barge.jaxrs.ws.WsEventListenerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.