org.deephacks.confit.serialization.ValueSerializationTest.java Source code

Java tutorial

Introduction

Here is the source code for org.deephacks.confit.serialization.ValueSerializationTest.java

Source

/**
 * 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 org.deephacks.confit.serialization;

import org.apache.commons.lang.RandomStringUtils;
import org.deephacks.confit.serialization.BytesUtils.ReferenceList;
import org.deephacks.confit.serialization.ValueSerialization.ValueReader;
import org.deephacks.confit.serialization.ValueSerialization.ValueWriter;
import org.junit.Test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;

import static org.junit.Assert.*;
import static org.junit.matchers.JUnitMatchers.hasItems;

public class ValueSerializationTest {
    private int randomFieldsNum = 100;

    @Test
    public void test_random_write_read() throws Exception {
        for (int i = 0; i < 1000; i++) {
            ArrayList<Integer> ids = new ArrayList<>();
            ValueWriter writer = new ValueWriter();

            int stringId = new Random().nextInt();
            ids.add(stringId);
            String stringValue = RandomStringUtils.randomAlphanumeric(255);
            writer.putValue(stringId, stringValue);

            int booleanId = new Random().nextInt();
            ids.add(booleanId);
            boolean booleanValue = random(2) == 0;
            writer.putValue(booleanId, booleanValue);

            int longId = new Random().nextInt();
            ids.add(longId);
            long longValue = new Random().nextLong();
            writer.putValue(longId, longValue);

            int intId = new Random().nextInt();
            ids.add(intId);
            int intValue = new Random().nextInt();
            writer.putValue(intId, intValue);

            int shortId = new Random().nextInt();
            ids.add(shortId);
            short shortValue = (short) (new Random().nextInt() % Short.MAX_VALUE);
            writer.putValue(shortId, shortValue);

            int byteId = new Random().nextInt();
            ids.add(byteId);
            byte byteValue = (byte) (new Random().nextInt() % Byte.MAX_VALUE);
            writer.putValue(byteId, byteValue);

            int floatId = new Random().nextInt();
            ids.add(floatId);
            float floatValue = new Random().nextFloat();
            writer.putValue(floatId, floatValue);

            int doubleId = new Random().nextInt();
            ids.add(doubleId);
            double doubleValue = new Random().nextDouble();
            writer.putValue(doubleId, doubleValue);

            int referencesId = new Random().nextInt();
            ids.add(referencesId);
            Collection<String> instances = randomStrings();
            ReferenceList list = new ReferenceList(referencesId);
            list.getInstances().addAll(instances);
            writer.putValue(referencesId, list);

            int stringsId = new Random().nextInt();
            ids.add(stringsId);
            Collection<String> strings = randomStrings();
            writer.putValues(stringsId, strings, String.class);

            int booleansId = new Random().nextInt();
            ids.add(booleansId);
            Collection<Boolean> booleans = randomBooleans();
            writer.putValues(booleansId, booleans, Boolean.class);

            int longsId = new Random().nextInt();
            ids.add(longsId);
            Collection<Long> longs = randomLongs();
            writer.putValues(longsId, longs, Long.class);

            int intsId = new Random().nextInt();
            ids.add(intsId);
            Collection<Integer> integers = randomInts();
            writer.putValues(intsId, integers, Integer.class);

            int shortsId = new Random().nextInt();
            ids.add(shortsId);
            Collection<Short> shorts = randomShorts();
            writer.putValues(shortsId, shorts, Short.class);

            int bytesId = new Random().nextInt();
            ids.add(bytesId);
            Collection<Byte> bytes = randomBytes();
            writer.putValues(bytesId, bytes, Byte.class);

            int floatsId = new Random().nextInt();
            ids.add(floatsId);
            Collection<Float> floats = randomFloats();
            writer.putValues(floatsId, floats, Float.class);

            int doublesId = new Random().nextInt();
            ids.add(doublesId);
            Collection<Double> doubles = randomDoubles();
            writer.putValues(doublesId, doubles, Double.class);

            byte[] values = writer.write();

            ValueReader reader = new ValueReader(values);

            Integer[] idsArray = convert(reader.getIds(), Integer.class);
            assertThat(ids, hasItems(idsArray));

            assertEquals(booleanValue, reader.getValue(booleanId));

            assertEquals(longValue, reader.getValue(longId));

            assertEquals(intValue, reader.getValue(intId));

            assertEquals(shortValue, reader.getValue(shortId));

            assertEquals(byteValue, reader.getValue(byteId));

            assertEquals(doubleValue, reader.getValue(doubleId));

            assertEquals(floatValue, reader.getValue(floatId));

            ReferenceList referenceList = (ReferenceList) reader.getValue(referencesId);
            List<String> instanceList = referenceList.getInstances();
            assertThat(instances, hasItems((String[]) instanceList.toArray(new String[instanceList.size()])));

            Collection<String> collection = (Collection<String>) reader.getValue(stringsId);
            assertThat(strings, hasItems(collection.toArray(new String[collection.size()])));

            Boolean[] boolArray = ((Collection<Boolean>) reader.getValue(booleansId)).toArray(new Boolean[0]);
            assertThat(booleans, hasItems(boolArray));

            Long[] longArray = ((Collection<Long>) reader.getValue(longsId)).toArray(new Long[0]);
            assertThat(longs, hasItems(longArray));

            Integer[] intArray = ((Collection<Integer>) reader.getValue(intsId)).toArray(new Integer[0]);
            assertThat(integers, hasItems(intArray));

            Short[] shortArray = ((Collection<Short>) reader.getValue(shortsId)).toArray(new Short[0]);
            assertThat(shorts, hasItems(shortArray));

            Byte[] byteArray = ((Collection<Byte>) reader.getValue(bytesId)).toArray(new Byte[0]);
            assertThat(bytes, hasItems(byteArray));

            Double[] doubleArray = ((Collection<Double>) reader.getValue(doublesId)).toArray(new Double[0]);
            assertThat(doubles, hasItems(doubleArray));

            Float[] floatArray = ((Collection<Float>) reader.getValue(floatsId)).toArray(new Float[0]);
            assertThat(floats, hasItems(floatArray));
        }

    }

    public static <T> T[] convert(final Object array, Class<T> wrapperClass) {
        final int arrayLength = Array.getLength(array);
        final T[] result = (T[]) Array.newInstance(wrapperClass, arrayLength);
        for (int i = 0; i < arrayLength; i++) {
            Array.set(result, i, Array.get(array, i));
        }
        return result;
    }

    public Collection<String> randomStrings() {
        Collection<String> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(RandomStringUtils.randomAlphabetic(random(255)));
        }
        return values;
    }

    public Collection<Boolean> randomBooleans() {
        Collection<Boolean> values = new ArrayList<>();
        boolean[] possible = new boolean[] { true, false };
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(possible[random(2)]);
        }
        return values;
    }

    public Collection<Long> randomLongs() {
        Collection<Long> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(random(Long.MAX_VALUE));
        }
        return values;
    }

    public Collection<Integer> randomInts() {
        Collection<Integer> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(random(Integer.MAX_VALUE));
        }
        return values;
    }

    public Collection<Short> randomShorts() {
        Collection<Short> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add((short) random(Integer.MAX_VALUE));
        }
        return values;
    }

    public Collection<Byte> randomBytes() {
        Collection<Byte> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add((byte) random(Integer.MAX_VALUE));
        }
        return values;
    }

    public Collection<Float> randomFloats() {
        Collection<Float> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(new Random().nextFloat());
        }
        return values;
    }

    public Collection<Double> randomDoubles() {
        Collection<Double> values = new ArrayList<>();
        for (int i = 0; i < random(randomFieldsNum); i++) {
            values.add(new Random().nextDouble());
        }
        return values;
    }

    public int random(int max) {
        return Math.abs(new Random().nextInt()) % max;
    }

    public long random(long max) {
        return Math.abs(new Random().nextLong()) % max;
    }

}