package org.infinispan.marshall.core;
import static java.util.Objects.deepEquals;
import static org.infinispan.marshall.core.Primitives.ID_BOOLEAN_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_BOOLEAN_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_BYTE_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_BYTE_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_CHAR_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_CHAR_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_DOUBLE_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_DOUBLE_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_FLOAT_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_FLOAT_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_INT_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_INT_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_LONG_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_LONG_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_SHORT_ARRAY;
import static org.infinispan.marshall.core.Primitives.ID_SHORT_OBJ;
import static org.infinispan.marshall.core.Primitives.ID_STRING;
import static org.infinispan.marshall.core.Primitives.readPrimitive;
import static org.infinispan.marshall.core.Primitives.writePrimitive;
import static org.testng.AssertJUnit.assertTrue;
import java.io.IOException;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.AbstractInfinispanTest;
import org.infinispan.test.Exceptions;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Created by karesti on 22/03/17.
*/
@Test(groups = "functional", testName = "marshall.PrimitivesTest")
public class PrimitivesTest extends AbstractInfinispanTest {
private EmbeddedCacheManager cm;
private GlobalMarshaller globalMarshaller;
@BeforeClass
public void setUp() {
cm = TestCacheManagerFactory.createCacheManager();
globalMarshaller = TestingUtil.extractGlobalMarshaller(cm);
}
@AfterClass
public void tearDown() {
if (cm != null) cm.stop();
}
public void testReadAndWrite() throws Exception {
assertReadAndWrite(new byte[]{0, 1}, ID_BYTE_ARRAY);
assertReadAndWrite("kaixo", ID_STRING);
assertReadAndWrite(true, ID_BOOLEAN_OBJ);
assertReadAndWrite((byte) 0, ID_BYTE_OBJ);
assertReadAndWrite('P', ID_CHAR_OBJ);
assertReadAndWrite(123d, ID_DOUBLE_OBJ);
assertReadAndWrite(123f, ID_FLOAT_OBJ);
assertReadAndWrite(123, ID_INT_OBJ);
assertReadAndWrite(123L, ID_LONG_OBJ);
assertReadAndWrite((short) 123, ID_SHORT_OBJ);
assertReadAndWrite(new boolean[]{true, false}, ID_BOOLEAN_ARRAY);
assertReadAndWrite(new char[]{'k', 'a', 'i', 'x', 'o'}, ID_CHAR_ARRAY);
assertReadAndWrite(new double[]{123d, 456d}, ID_DOUBLE_ARRAY);
assertReadAndWrite(new float[]{123f, 456f}, ID_FLOAT_ARRAY);
assertReadAndWrite(new int[]{123, 456}, ID_INT_ARRAY);
assertReadAndWrite(new long[]{123L, 456L}, ID_LONG_ARRAY);
assertReadAndWrite(new short[]{123, 456}, ID_SHORT_ARRAY);
Exceptions.expectException(IOException.class, "Unknown primitive type: diable",
() -> writePrimitive("diable", new BytesObjectOutput(10240, globalMarshaller), 666));
}
private void assertReadAndWrite(Object write, int id) throws IOException, ClassNotFoundException {
BytesObjectOutput out = new BytesObjectOutput(10240, globalMarshaller);
writePrimitive(write, out, id);
Object read = readPrimitive(BytesObjectInput.from(out.bytes, 0, globalMarshaller));
assertTrue(deepEquals(write, read));
}
}