package com.jfastnet.messages;
import com.esotericsoftware.kryo.Kryo;
import com.jfastnet.AbstractTest;
import com.jfastnet.Config;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
/** @author Klaus Pfeiffer - klaus@allpiper.com */
@Slf4j
public class MessageTest extends AbstractTest {
boolean registerClass = false;
public static class Message1 extends Message {}
public static class Message2 extends Message {
long value = 0;
public Message2(long value) { this.value = value; }
}
@Test
public void sizeTest() {
Config config;
config = newClientConfig();
byte[] b1 = config.serialiser.serialise(new Message1());
log.info("size unregistered message class: {}", b1.length);
registerClass = true;
config = newClientConfig();
byte[] b2 = config.serialiser.serialise(new Message1());
log.info("size registered message class: {}", b2.length);
assertThat("Message with registered class has to be smaller", b2.length, is(lessThan(b1.length)));
assertThat("Naked message should have at max 4 bytes", b2.length, lessThanOrEqualTo(4));
}
@Test
public void sizeTestLongValue() {
Config config;
config = newClientConfig();
byte[] b1;
b1 = config.serialiser.serialise(new Message2(0));
log.info("size unreg. zero long value: {}", b1.length);
b1 = config.serialiser.serialise(new Message2(Long.MAX_VALUE));
log.info("size unreg. max long value: {}", b1.length);
registerClass = true;
config = newClientConfig();
b1 = config.serialiser.serialise(new Message2(0));
log.info("size reg. zero long value: {}", b1.length);
b1 = config.serialiser.serialise(new Message2(112233));
log.info("size reg. long value 112233: {}", b1.length);
b1 = config.serialiser.serialise(new Message2(Long.MAX_VALUE));
log.info("size reg. max long value: {}", b1.length);
}
@Override
public void customizeKryo(Kryo kryo) {
if (registerClass) {
kryo.register(Message1.class);
kryo.register(Message2.class);
}
}
}