package org.infinispan.server.core;
import static org.infinispan.server.core.transport.ExtendedByteBuf.readUnsignedInt;
import static org.infinispan.server.core.transport.ExtendedByteBuf.readUnsignedLong;
import static org.infinispan.server.core.transport.ExtendedByteBuf.writeUnsignedInt;
import static org.infinispan.server.core.transport.ExtendedByteBuf.writeUnsignedLong;
import static org.testng.AssertJUnit.assertEquals;
import org.infinispan.commons.util.Util;
import org.testng.annotations.Test;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
/**
* Variable length number test.
*
* @author Galder ZamarreƱo
* @since 4.1
*/
@Test(groups = "functional", testName = "server.hotrod.VariableLengthTest")
public class VariableLengthTest {
public void test2pow7minus1() {
writeReadInt(127, 1);
}
public void test2pow7() {
writeReadInt(128, 2);
}
public void test2pow14minus1() {
writeReadInt(16383, 2);
}
public void test2pow14() {
writeReadInt(16384, 3);
}
public void test2pow21minus1() {
writeReadInt(2097151, 3);
}
public void test2pow21() {
writeReadInt(2097152, 4);
}
public void test2pow28minus1() {
writeReadInt(268435455, 4);
}
public void test2pow28() {
writeReadInt(268435456, 5);
}
public void test2pow35minus1() {
writeReadLong(34359738367L, 5);
}
public void test2pow35() {
writeReadLong(34359738368L, 6);
}
public void test2pow42minus1() {
writeReadLong(4398046511103L, 6);
}
public void test2pow42() {
writeReadLong(4398046511104L, 7);
}
public void test2pow49minus1() {
writeReadLong(562949953421311L, 7);
}
public void test2pow49() {
writeReadLong(562949953421312L, 8);
}
public void test2pow56minus1() {
writeReadLong(72057594037927935L, 8);
}
public void test2pow56() {
writeReadLong(72057594037927936L, 9);
}
public void test2pow63minus1() {
writeReadLong(9223372036854775807L, 9);
}
@Test(expectedExceptions = IllegalStateException.class)
public void testTooLongInt() {
ByteBuf buffer = Unpooled.directBuffer(1024);
assert(buffer.writerIndex() == 0);
writeUnsignedLong(9223372036854775807L, buffer);
readUnsignedInt(buffer);
buffer.release();
}
@Test(groups = "unstable")
public void testPrintHexadecimalVint() {
ByteBuf buffer = Unpooled.directBuffer(1024);
assert(buffer.writerIndex() == 0);
writeUnsignedLong(512, buffer);
System.out.println(Util.hexDump(buffer.nioBuffer()));
System.out.println();
buffer.release();
}
// public void test2pow63() {
// writeReadLong(9223372036854775808L, 10)
// }
private void writeReadInt(int num, int expected) {
ByteBuf buffer = Unpooled.directBuffer(1024);
assert(buffer.writerIndex() == 0);
writeUnsignedInt(num, buffer);
assertEquals(buffer.writerIndex(), expected);
assertEquals(readUnsignedInt(buffer), num);
buffer.release();
}
private void writeReadLong(long num, int expected) {
ByteBuf buffer = Unpooled.directBuffer(1024);
assert(buffer.writerIndex() == 0);
writeUnsignedLong(num, buffer);
assertEquals(buffer.writerIndex(), expected);
assertEquals(readUnsignedLong(buffer), num);
buffer.release();
}
}