package lsr.paxos.messages; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import org.junit.Before; import org.junit.Test; public class RecoveryAnswerTest extends AbstractMessageTestCase<RecoveryAnswer> { private RecoveryAnswer recoveryAnswer; @Before public void setUp() { recoveryAnswer = new RecoveryAnswer(5, new long[] {1, 2, 3}, 10); } @Test public void shouldInitializeUsingTwoArgumentConstructor() { recoveryAnswer = new RecoveryAnswer(5, 10); assertEquals(MessageType.RecoveryAnswer, recoveryAnswer.getType()); assertEquals(5, recoveryAnswer.getView()); assertEquals(10, recoveryAnswer.getNextId()); assertArrayEquals(new long[0], recoveryAnswer.getEpoch()); } @Test public void shouldReturnCorrectMessageType() { assertEquals(MessageType.RecoveryAnswer, recoveryAnswer.getType()); } @Test public void shoudReturnCorrectView() { assertEquals(5, recoveryAnswer.getView()); } @Test public void shouldReturnCorrectEpoch() { assertArrayEquals(new long[] {1, 2, 3}, recoveryAnswer.getEpoch()); } @Test public void shouldReturnCorrectNextId() { assertEquals(10, recoveryAnswer.getNextId()); } @Test public void shouldSerializeAndDeserialize() throws IOException { verifySerialization(recoveryAnswer); byte[] bytes = recoveryAnswer.toByteArray(); assertEquals(bytes.length, recoveryAnswer.byteSize()); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); DataInputStream dis = new DataInputStream(bis); MessageType type = MessageType.values()[dis.readByte()]; RecoveryAnswer deserializedRecovery = new RecoveryAnswer(dis); assertEquals(MessageType.RecoveryAnswer, type); compare(recoveryAnswer, deserializedRecovery); assertEquals(0, dis.available()); } protected void compare(RecoveryAnswer expected, RecoveryAnswer actual) { assertEquals(expected.getView(), actual.getView()); assertArrayEquals(expected.getEpoch(), actual.getEpoch()); } }