/* * Copyright 2013 Cameron Beccario * * 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 net.nullschool.grains.kryo; import com.esotericsoftware.kryo.Kryo; import net.nullschool.collect.basic.BasicConstList; import net.nullschool.collect.basic.BasicToolsTest; import net.nullschool.grains.generate.model.*; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import static org.junit.Assert.*; import static net.nullschool.grains.kryo.KryoTestTools.*; import static net.nullschool.collect.basic.BasicCollections.*; import static net.nullschool.grains.generate.model.CompleteTest.*; /** * 2013-06-04<p/> * * @author Cameron Beccario */ public class KryoTest { @Test public void test_intrinsic_serialization() { CompleteGrain expected = newCompleteBuilderWithSampleValues().build(); assertEquals(28, expected.size()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Object actual = roundTrip(expected, baos); assertEquals( "10net.nullschool.grains.generate.model.CompleteGraiee1182a51182b61182c802182d24182e96182f11java." + "math.BigIntegef2121182g4?8000182habff0000000182i12java.math.BigDecimaec12a0182j70a182k31hell" + "ef182l13java.util.UUIc411bd31dfeda2C95a2a7Qbd581e3ab182m14java.net.URc91http://nullschool.ne" + "f4182o15net.nullschool.grains.generate.model.Complete$Colof212182p16net.nullschool.grains.ge" + "nerate.model.NodeGraiee11ie4220182q17net.nullschool.collect.basic.BasicConstLisf4122224182r1" + "7121611922016119240182s17122426182t17121611924016119260182u18net.nullschool.collect.basic.Ba" + "sicConstSef4123334182v181216119280161192a0182w19net.nullschool.collect.basic.BasicConstMaf01" + "233223424182x191233161192c034161192e0182y1anet.nullschool.collect.basic.BasicConstSortedSef4" + "1023.32182z1bnet.nullschool.collect.basic.BasicConstSortedMaf010222161192100241611921201ze11" + "911331811171216119220161192401ze2171217123334171235360", BasicToolsTest.asReadableString(baos.toByteArray())); assertTrue(actual instanceof CompleteGrain); assertEquals(expected, actual); assertEquals( BasicToolsTest.asTypeHierarchy(expected), BasicToolsTest.asTypeHierarchy(actual)); } @Test public void test_sparse_serialization() { CompleteGrain expected = CompleteFactory.defaultValue(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Object actual = roundTrip(expected, baos); assertEquals( "10net.nullschool.grains.generate.model.CompleteGraiee10", BasicToolsTest.asReadableString(baos.toByteArray())); assertTrue(actual instanceof CompleteGrain); assertEquals(expected, actual); assertEquals( BasicToolsTest.asTypeHierarchy(expected), BasicToolsTest.asTypeHierarchy(actual)); } @Test public void test_extension_serialization() { NodeGrain expected = NodeFactory.newBuilder().setId(10).build(); expected = expected.with("x", 1); expected = expected.with("y", 2); expected = expected.with("z", null); // expected that this extension key will be dropped expected = expected.with("extra", mapOf("a", 1, "b", 2)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Object actual = roundTrip(expected, baos); assertEquals( "10net.nullschool.grains.generate.model.NodeGraiee11ie42141extre111net.nullschool.collect.basic.B" + "asicConstMaf0123182a223182b24182x22182y240", BasicToolsTest.asReadableString(baos.toByteArray())); assertTrue(actual instanceof NodeGrain); expected = expected.without("z"); assertEquals(expected, actual); assertEquals( BasicToolsTest.asTypeHierarchy(expected), BasicToolsTest.asTypeHierarchy(actual)); } @Test public void test_kryo_registration() { CompleteGrain expected = CompleteFactory.defaultValue() .withT(listOf(newNode(1), newNode(2))) .withI(BigDecimal.ONE) .with("extra", Complete.Color.green); Kryo kryo = newTestKryo(); kryo.setRegistrationRequired(true); kryo.register(BasicConstList.class, 40); kryo.register(BigDecimal.class, 41); kryo.register(CompleteGrain.class, 42); kryo.register(NodeGrain.class, 43); kryo.register(Complete.Color.class, 44); ByteArrayOutputStream baos = new ByteArrayOutputStream(); Object actual = roundTrip(expected, baos, kryo, kryo); assertEquals( ",1182i+1210182t*12-11ie4220-182401extre1.120", BasicToolsTest.asReadableString(baos.toByteArray())); assertTrue(actual instanceof CompleteGrain); assertEquals(expected, actual); assertEquals( BasicToolsTest.asTypeHierarchy(expected), BasicToolsTest.asTypeHierarchy(actual)); } }