package io.scalecube.cluster.gossip;
import static io.netty.buffer.Unpooled.buffer;
import static io.netty.buffer.Unpooled.copiedBuffer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import io.scalecube.cluster.Member;
import io.scalecube.testlib.BaseTest;
import io.scalecube.transport.Address;
import io.scalecube.transport.Message;
import io.netty.buffer.ByteBuf;
import io.scalecube.transport.MessageCodec;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GossipRequestTest extends BaseTest {
private static final String testDataQualifier = "scalecube/testData";
private TestData testData;
@Before
public void init() throws Throwable {
Map<String, String> properties = new HashMap<>();
properties.put("key", "123");
testData = new TestData();
testData.setProperties(properties);
}
@Test
public void testSerializationAndDeserialization() throws Exception {
Member from = new Member("0", Address.from("localhost:1234"));
List<Gossip> gossips = getGossips();
Message message = Message.withData(new GossipRequest(gossips, from.id())).correlationId("CORR_ID").build();
ByteBuf bb = buffer();
MessageCodec.serialize(message, bb);
assertTrue(bb.readableBytes() > 0);
ByteBuf input = copiedBuffer(bb);
Message deserializedMessage = MessageCodec.deserialize(input);
assertNotNull(deserializedMessage);
Assert.assertEquals(deserializedMessage.data().getClass(), GossipRequest.class);
Assert.assertEquals("CORR_ID", deserializedMessage.correlationId());
GossipRequest gossipRequest = deserializedMessage.data();
assertNotNull(gossipRequest);
assertNotNull(gossipRequest.gossips());
assertNotNull(gossipRequest.gossips().get(0));
Object msgData = gossipRequest.gossips().get(0).message().data();
assertNotNull(msgData);
assertTrue(msgData.toString(), msgData instanceof TestData);
assertEquals(testData.getProperties(), ((TestData) msgData).getProperties());
}
private List<Gossip> getGossips() {
Gossip request = new Gossip("idGossip", Message.withData(testData).qualifier(testDataQualifier).build());
Gossip request2 = new Gossip("idGossip2", Message.withData(testData).qualifier(testDataQualifier).build());
List<Gossip> gossips = new ArrayList<>(2);
gossips.add(request);
gossips.add(request2);
return gossips;
}
private static class TestData {
private Map<String, String> properties;
TestData() {}
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
}
}