Package net.kuujo.copycat.protocol

Source Code of net.kuujo.copycat.protocol.ProtocolReaderWriterTest

package net.kuujo.copycat.protocol;

import net.kuujo.copycat.cluster.ClusterConfig;
import net.kuujo.copycat.cluster.Member;
import net.kuujo.copycat.cluster.MemberConfig;
import net.kuujo.copycat.internal.log.ConfigurationEntry;
import net.kuujo.copycat.internal.log.OperationEntry;
import net.kuujo.copycat.internal.log.SnapshotEntry;
import net.kuujo.copycat.log.Entry;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;

/**
* Protocol reader/writer test.
*
* @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*/
@Test
public class ProtocolReaderWriterTest {
  private ProtocolReader reader;
  private ProtocolWriter writer;

  @BeforeMethod
  public void beforeMethod() {
    reader = new ProtocolReader();
    writer = new ProtocolWriter();
  }

  @AfterMethod
  public void afterMethod() {
    reader = null;
    writer = null;
  }

  /**
   * Tests writing/reading a ping request.
   */
  public void testWriteReadPingRequest() {
    PingRequest request = new PingRequest(UUID.randomUUID().toString(), 1, "foo", 4, 1, 3);
    PingRequest result = reader.readRequest(writer.writeRequest(request));
    Assert.assertEquals(result.id(), request.id());
    Assert.assertEquals(result.term(), request.term());
    Assert.assertEquals(result.leader(), request.leader());
    Assert.assertEquals(result.logIndex(), request.logIndex());
    Assert.assertEquals(result.logTerm(), request.logTerm());
    Assert.assertEquals(result.commitIndex(), request.commitIndex());
  }

  /**
   * Tests writing/reading a ping response.
   */
  public void testWriteReadPingResponse() {
    PingResponse response = new PingResponse(UUID.randomUUID().toString(), 1, true);
    PingResponse result = reader.readResponse(writer.writeResponse(response));
    Assert.assertEquals(result.id(), response.id());
    Assert.assertEquals(result.term(), response.term());
    Assert.assertEquals(result.succeeded(), response.succeeded());
  }

  /**
   * Tests writing/reading a sync request.
   */
  public void testWriteReadSyncRequest() {
    ClusterConfig<Member> clusterConfig = new ClusterConfig<>()
      .withLocalMember(new Member(new MemberConfig("foo")))
      .withRemoteMembers(new Member(new MemberConfig("bar")), new Member(new MemberConfig("baz")));
    SnapshotEntry snapshotEntry = new SnapshotEntry(1, clusterConfig, new byte[50]);
    ConfigurationEntry configurationEntry = new ConfigurationEntry(1, clusterConfig);
    OperationEntry operationEntry = new OperationEntry(1, "foo", Arrays.asList("bar", "baz"));
    List<Entry> entries = Arrays.asList(snapshotEntry, configurationEntry, operationEntry);
    SyncRequest request = new SyncRequest(UUID.randomUUID().toString(), 1, "foo", 4, 1, entries, 3);
    SyncRequest result = reader.readRequest(writer.writeRequest(request));
    Assert.assertEquals(result.id(), request.id());
    Assert.assertEquals(result.term(), request.term());
    Assert.assertEquals(result.leader(), request.leader());
    Assert.assertEquals(result.prevLogIndex(), request.prevLogIndex());
    Assert.assertEquals(result.prevLogTerm(), request.prevLogTerm());
    Assert.assertEquals(result.entries().size(), request.entries().size());
    Assert.assertEquals(result.entries().get(0), request.entries().get(0));
    Assert.assertEquals(result.entries().get(1), request.entries().get(1));
    Assert.assertEquals(result.entries().get(2), request.entries().get(2));
    Assert.assertEquals(result.commitIndex(), request.commitIndex());
  }

  /**
   * Tests writing/reading a sync response.
   */
  public void testWriteReadSyncResponse() {
    SyncResponse response = new SyncResponse(UUID.randomUUID().toString(), 1, true, 1);
    SyncResponse result = reader.readResponse(writer.writeResponse(response));
    Assert.assertEquals(result.id(), response.id());
    Assert.assertEquals(result.term(), response.term());
    Assert.assertEquals(result.succeeded(), response.succeeded());
    Assert.assertEquals(result.lastLogIndex(), response.lastLogIndex());
  }

  /**
   * Tests writing/reading a poll request.
   */
  public void testWriteReadPollRequest() {
    PollRequest request = new PollRequest(UUID.randomUUID().toString(), 1, "foo", 4, 1);
    PollRequest result = reader.readRequest(writer.writeRequest(request));
    Assert.assertEquals(result.id(), request.id());
    Assert.assertEquals(result.term(), request.term());
    Assert.assertEquals(result.candidate(), request.candidate());
    Assert.assertEquals(result.lastLogIndex(), request.lastLogIndex());
    Assert.assertEquals(result.lastLogTerm(), request.lastLogTerm());
  }

  /**
   * Tests writing/reading a poll response.
   */
  public void testWriteReadPollResponse() {
    PollResponse response = new PollResponse(UUID.randomUUID().toString(), 1, true);
    PollResponse result = reader.readResponse(writer.writeResponse(response));
    Assert.assertEquals(result.id(), response.id());
    Assert.assertEquals(result.term(), response.term());
    Assert.assertEquals(result.voteGranted(), response.voteGranted());
  }

  /**
   * Tests writing/reading a submit request.
   */
  public void testWriteReadSubmitRequest() {
    SubmitRequest request = new SubmitRequest(UUID.randomUUID().toString(), "foo", Arrays.asList("bar", "baz"));
    SubmitRequest result = reader.readRequest(writer.writeRequest(request));
    Assert.assertEquals(result.id(), request.id());
    Assert.assertEquals(result.operation(), request.operation());
    Assert.assertEquals(result.args(), request.args());
  }

  /**
   * Tests writing/reading a submit response.
   */
  public void testWriteReadSubmitResponse() {
    SubmitResponse response = new SubmitResponse(UUID.randomUUID().toString(), "Hello world!");
    SubmitResponse result = reader.readResponse(writer.writeResponse(response));
    Assert.assertEquals(result.id(), response.id());
    Assert.assertEquals(result.result(), response.result());
  }

}
TOP

Related Classes of net.kuujo.copycat.protocol.ProtocolReaderWriterTest

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.