Package com.jeklsoft.cassandraclient.hector

Source Code of com.jeklsoft.cassandraclient.hector.TestExtendedTypeInferringSerializer

//Copyright 2012 Joe McTee
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.

package com.jeklsoft.cassandraclient.hector;

import static org.junit.Assert.assertEquals;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import org.junit.BeforeClass;
import org.junit.Test;

import me.prettyprint.cassandra.serializers.BigIntegerSerializer;

public class TestExtendedTypeInferringSerializer {

    private static ExtendedTypeInferringSerializer extendedTypeInferringSerializer;

    @BeforeClass
    public static void setup() throws Exception {
        extendedTypeInferringSerializer = ExtendedTypeInferringSerializer.get();
    }

    //    UUID
    @Test
    public void uuidObjectShouldReturnUUIDByteBuffer() {
        UUID value = new UUID(0x0807060504030201L, 0x0102030405060708L);
        long msb = value.getMostSignificantBits();
        long lsb = value.getLeastSignificantBits();
        byte[] array = new byte[16];

        for (int ii = 0; ii < 8; ii++) {
            int shiftCount = 8 * (7 - ii);
            array[ii] = (byte) (msb >>> shiftCount);
            array[ii + 8] = (byte) (lsb >>> shiftCount);
        }

        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    String
    @Test
    public void stringObjectShouldReturnStringByteBuffer() {
        String value = "Test";
        byte[] array = value.getBytes();

        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Long
    @Test
    public void longObjectShouldReturnLongByteBuffer() {
        Long value = new Long(0x0807060504030201L);

        byte[] array = createByteArrayFromLong(value, 8);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Integer
    @Test
    public void integerObjectShouldReturnIntegerByteBuffer() {
        Integer value = new Integer(0x04030201);

        byte[] array = createByteArrayFromLong(new Long(value), 4);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Boolean
    @Test
    public void booleanObjectShouldReturnBooleanByteBuffer() {
        Boolean value = true;

        byte[] array = createByteArrayFromLong(1L, 1);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);

        value = false;

        array = createByteArrayFromLong(0L, 1);
        expectedBuffer = ByteBuffer.wrap(array);

        buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Double
    @Test
    public void doubleObjectShouldReturnDoubleByteBuffer() {
        Double value = 1.234;

        Long intBits = Double.doubleToRawLongBits(value);
        byte[] array = createByteArrayFromLong(intBits, 8);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Float
    @Test
    public void floatObjectShouldReturnFloatByteBuffer() {
        Float value = 1.234F;

        Long intBits = new Long(Float.floatToRawIntBits(value));
        byte[] array = createByteArrayFromLong(intBits, 4);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Short
    @Test
    public void shortObjectShouldReturnShortByteBuffer() {
        Short value = new Integer(1).shortValue();

        byte[] array = createByteArrayFromLong(new Long(value), 2);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    byte[]
    @Test
    public void byteArrayObjectShouldReturnBytesArrayByteBuffer() {
        byte[] value = new byte[3];
        value[0] = 1;
        value[1] = 2;
        value[2] = 3;

        ByteBuffer expectedBuffer = ByteBuffer.wrap(value);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    ByteBuffer
    @Test
    public void byteBufferObjectShouldReturnByteBufferByteBuffer() {
        byte[] array = new byte[3];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;

        ByteBuffer value = ByteBuffer.wrap(array);

        byte[] array2 = new byte[3];
        array2[0] = 1;
        array2[1] = 2;
        array2[2] = 3;

        ByteBuffer expectedBuffer = ByteBuffer.wrap(array2);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Date
    @Test
    public void dateObjectShouldReturnDateByteBuffer() {
        Date value = new Date();

        byte[] array = createByteArrayFromLong(value.getTime(), 8);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    BigInteger
    @Test
    public void bigIntegerObjectShouldReturnBigIntegerByteBuffer() {
        ExtensibleTypeInferringSerializer.addSerializer(BigInteger.class, BigIntegerSerializer.get());

        BigInteger value = BigInteger.valueOf(0x0807060504030201L);

        byte[] array = value.toByteArray();
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    Object
    @Test
    public void serializableObjectObjectShouldReturnObjectByteBuffer() throws IOException {
        // ArrayList is serializable
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);

        Object value = list;

        byte[] array = createByteArrayFromObject(list);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    @Test(expected = NotSerializableException.class)
    public void nonserializableObjectObjectShouldThrowException() throws IOException {
        // Object is not serializable
        Object value = new Object();

        byte[] array = createByteArrayFromObject(value);
        ByteBuffer expectedBuffer = ByteBuffer.wrap(array);

        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(value);

        assertEquals(expectedBuffer, buffer);
    }

    //    null
    @Test
    public void nullObjectShouldReturnNull() {
        ByteBuffer buffer = extendedTypeInferringSerializer.toByteBuffer(null);

        assertEquals(null, buffer);
    }

    // FromByteBuffer throws exception
    @Test(expected = IllegalStateException.class)
    public void callingFromByteBufferThrowsException() {
        ByteBuffer buffer = ByteBuffer.allocate(3);
        buffer.put(new Integer(0).byteValue());
        buffer.put(new Integer(1).byteValue());
        buffer.put(new Integer(2).byteValue());

        Object value = extendedTypeInferringSerializer.fromByteBuffer(buffer);
    }

    private byte[] createByteArrayFromLong(Long value, int bytesToUse) {
        byte[] array = new byte[bytesToUse];

        for (int ii = 0; ii < bytesToUse; ii++) {
            int shiftCount = 8 * (bytesToUse - 1 - ii);
            array[ii] = (byte) (value >>> shiftCount);
        }

        return array;
    }

    private byte[] createByteArrayFromObject(Object obj) throws IOException {
        // Only works if object is serializable, otherwise exception...
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(obj);
        objectOutputStream.close();
        return byteArrayOutputStream.toByteArray();
    }

}
TOP

Related Classes of com.jeklsoft.cassandraclient.hector.TestExtendedTypeInferringSerializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.