URingPaxos-master/src/test/ch/usi/da/paxos/TestMessage.java
package ch.usi.da.paxos;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import ch.usi.da.paxos.api.PaxosRole;
import ch.usi.da.paxos.message.Control;
import ch.usi.da.paxos.message.ControlType;
import ch.usi.da.paxos.message.Message;
import ch.usi.da.paxos.message.MessageType;
import ch.usi.da.paxos.message.Value;

public class TestMessage {

	@Test
	public void serializeMessage() throws Exception {
		Message m = new Message(1L, 0, PaxosRole.Leader, MessageType.Value, 0, null);
		assertEquals(m,Message.fromWire(Message.toWire(m)));
		assertEquals(Message.getCRC32(m),Message.getCRC32(Message.fromWire(Message.toWire(m))));
		
		m = new Message(1L, 0, PaxosRole.Leader, MessageType.Value, 0, null);
		m.incrementVoteCount();
		assertEquals(m,Message.fromWire(Message.toWire(m)));
		assertEquals(Message.getCRC32(m),Message.getCRC32(Message.fromWire(Message.toWire(m))));
		assertEquals(1,Message.fromWire(Message.toWire(m)).getVoteCount());
		
		m = new Message(5L, 999, PaxosRole.Acceptor, MessageType.Phase1, 0, 0, null);
		assertEquals(m,Message.fromWire(Message.toWire(m)));
		assertEquals(Message.getCRC32(m),Message.getCRC32(Message.fromWire(Message.toWire(m))));

		Value v = new Value("Test", "Value".getBytes());
		m = new Message(1L, 10, PaxosRole.Proposer, MessageType.Safe, 999, 10, v);
		assertEquals(m,Message.fromWire(Message.toWire(m)));
		assertEquals(Message.getCRC32(m),Message.getCRC32(Message.fromWire(Message.toWire(m))));

		v = new Value(Value.getSkipID(), "Value".getBytes());
		m = new Message(1L, 10, PaxosRole.Proposer, MessageType.Safe, 999, 20, v);
		assertEquals(m,Message.fromWire(Message.toWire(m)));
		assertEquals(Message.getCRC32(m),Message.getCRC32(Message.fromWire(Message.toWire(m))));
		
	}

	@Test
	public void serializeControl() throws Exception {
		Control c = new Control(1, ControlType.Subscribe, 2, 5);
		System.err.println(c);
		Value v = new Value(Value.getControlID(),Control.toWire(c));
		System.err.println(v);
		System.err.println(v.asString());		
		assertEquals(c,Control.fromWire(Control.toWire(c)));
		assertEquals(true,c.equals(c));
		Control c2 = new Control(1, ControlType.Subscribe, 2, 6);
		assertEquals(false,c.equals(c2));
		Control c3 = new Control(2, ControlType.Subscribe, 2, 5);
		assertEquals(false,c.equals(c3));
		Control c4 = new Control(1, ControlType.Prepare, 2, 5);
		assertEquals(false,c.equals(c4));
	}

}
