IGNITE-1816: Added tests.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f7aa70ee Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f7aa70ee Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f7aa70ee Branch: refs/heads/ignite-1816 Commit: f7aa70eeec2a0df86a11a4c338fc87c03686d834 Parents: 93f12f7 Author: vozerov-gridgain <[email protected]> Authored: Fri Nov 13 12:03:39 2015 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Fri Nov 13 12:03:39 2015 +0300 ---------------------------------------------------------------------- .../portable/BinaryFieldsAbstractSelfTest.java | 11 +- .../BinaryFooterOffsetsAbstractSelfTest.java | 199 + .../BinaryFooterOffsetsHeapSelfTest.java | 32 + .../BinaryFooterOffsetsOffheapSelfTest.java | 61 + .../portable/BinaryMarshallerSelfTest.java | 3795 ++++++++++++++++++ .../BinaryObjectBuilderAdditionalSelfTest.java | 1291 ++++++ .../portable/BinaryObjectBuilderSelfTest.java | 1066 +++++ ...idBinaryObjectBuilderAdditionalSelfTest.java | 1282 ------ .../GridBinaryObjectBuilderSelfTest.java | 1057 ----- .../GridPortableMarshallerSelfTest.java | 3786 ----------------- .../PortableCompactOffsetsAbstractSelfTest.java | 190 - .../PortableCompactOffsetsHeapSelfTest.java | 32 - .../PortableCompactOffsetsOffheapSelfTest.java | 61 - .../BinaryFieldsHeapNonCompactSelfTest.java | 34 + .../BinaryFieldsOffheapNonCompactSelfTest.java | 30 + ...naryFooterOffsetsHeapNonCompactSelfTest.java | 30 + ...yFooterOffsetsOffheapNonCompactSelfTest.java | 30 + .../BinaryMarshallerNonCompactSelfTest.java | 30 + ...jectBuilderAdditionalNonCompactSelfTest.java | 30 + .../BinaryObjectBuilderNonCompactSelfTest.java | 30 + .../IgnitePortableObjectsTestSuite.java | 36 +- 21 files changed, 6694 insertions(+), 6419 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/f7aa70ee/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFieldsAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFieldsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFieldsAbstractSelfTest.java index 101b3bc..8f79db1 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFieldsAbstractSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFieldsAbstractSelfTest.java @@ -46,11 +46,13 @@ public abstract class BinaryFieldsAbstractSelfTest extends GridCommonAbstractTes * @return Portable marshaller. * @throws Exception If failed. */ - protected static PortableMarshaller createMarshaller() throws Exception { + protected PortableMarshaller createMarshaller() throws Exception { PortableContext ctx = new PortableContext(BinaryCachingMetadataHandler.create(), new IgniteConfiguration()); PortableMarshaller marsh = new PortableMarshaller(); + marsh.setCompactFooter(compactFooter()); + marsh.setTypeConfigurations(Arrays.asList( new BinaryTypeConfiguration(TestObject.class.getName()), new BinaryTypeConfiguration(TestOuterObject.class.getName()), @@ -65,6 +67,13 @@ public abstract class BinaryFieldsAbstractSelfTest extends GridCommonAbstractTes } /** + * @return Whether to use compact footer. + */ + protected boolean compactFooter() { + return true; + } + + /** * Get portable context for the current marshaller. * * @param marsh Marshaller. http://git-wip-us.apache.org/repos/asf/ignite/blob/f7aa70ee/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsAbstractSelfTest.java new file mode 100644 index 0000000..3ec0b83 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsAbstractSelfTest.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.ignite.internal.portable; + +import org.apache.ignite.binary.BinaryField; +import org.apache.ignite.binary.BinaryTypeConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.util.IgniteUtils; +import org.apache.ignite.marshaller.MarshallerContextTestImpl; +import org.apache.ignite.marshaller.portable.PortableMarshaller; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +import java.util.Arrays; + +/** + * Contains tests for compact offsets. + */ +public abstract class BinaryFooterOffsetsAbstractSelfTest extends GridCommonAbstractTest { + /** 2 pow 8. */ + private static int POW_8 = 1 << 8; + + /** 2 pow 16. */ + private static int POW_16 = 1 << 16; + + /** Marshaller. */ + protected PortableMarshaller marsh; + + /** Portable context. */ + protected PortableContext ctx; + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + super.beforeTest(); + + ctx = new PortableContext(BinaryCachingMetadataHandler.create(), new IgniteConfiguration()); + + marsh = new PortableMarshaller(); + + marsh.setCompactFooter(compactFooter()); + + marsh.setTypeConfigurations(Arrays.asList(new BinaryTypeConfiguration(TestObject.class.getName()))); + marsh.setContext(new MarshallerContextTestImpl(null)); + + IgniteUtils.invoke(PortableMarshaller.class, marsh, "setPortableContext", ctx); + } + + /** + * @return Whether to use compact footers. + */ + protected boolean compactFooter() { + return true; + } + + /** + * Test 1 byte. + * + * @throws Exception If failed. + */ + public void test1Byte() throws Exception { + check(POW_8 >> 2); + } + + /** + * Test 1 byte with sign altering. + * + * @throws Exception If failed. + */ + public void test1ByteSign() throws Exception { + check(POW_8 >> 1); + } + + /** + * Test 2 bytes. + * + * @throws Exception If failed. + */ + public void test2Bytes() throws Exception { + check(POW_16 >> 2); + } + + /** + * Test 2 bytes with sign altering. + * + * @throws Exception If failed. + */ + public void test2BytesSign() throws Exception { + check(POW_16 >> 1); + } + + /** + * Test 4 bytes. + * + * @throws Exception If failed. + */ + public void test4Bytes() throws Exception { + check(POW_16 << 2); + } + + /** + * Main check routine. + * + * @param len Length of the first field. + * + * @throws Exception If failed. + */ + private void check(int len) throws Exception { + TestObject obj = new TestObject(len); + + BinaryObjectEx portObj = toPortable(marsh, obj); + + // 1. Test portable object content. + assert portObj.hasField("field1"); + assert portObj.hasField("field2"); + + byte[] field1 = portObj.field("field1"); + Integer field2 = portObj.field("field2"); + + assert field1 != null; + assert field2 != null; + + assert Arrays.equals(obj.field1, field1); + assert obj.field2 == field2; + + // 2. Test fields API. + BinaryField field1Desc = portObj.type().field("field1"); + BinaryField field2Desc = portObj.type().field("field2"); + + assert field1Desc.exists(portObj); + assert field2Desc.exists(portObj); + + assert Arrays.equals(obj.field1, (byte[])field1Desc.value(portObj)); + assert obj.field2 == (Integer)field2Desc.value(portObj); + + // 3. Test deserialize. + TestObject objRestored = portObj.deserialize(); + + assert objRestored != null; + + assert Arrays.equals(obj.field1, objRestored.field1); + assert obj.field2 == objRestored.field2; + } + + /** + * Convert object to portable object. + * + * @param marsh Marshaller. + * @param obj Object. + * @return Portable object. + * @throws Exception If failed. + */ + protected abstract BinaryObjectEx toPortable(PortableMarshaller marsh, Object obj) throws Exception; + + /** + * Test object. + */ + public static class TestObject { + /** First field with variable length. */ + public byte[] field1; + + /** Second field. */ + public int field2; + + /** + * Default constructor. + */ + public TestObject() { + // No-op. + } + + /** + * Constructor. + * + * @param len Array length. + */ + public TestObject(int len) { + field1 = new byte[len]; + + field1[0] = 1; + field1[len - 1] = 2; + + field2 = len; + } + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/f7aa70ee/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsHeapSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsHeapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsHeapSelfTest.java new file mode 100644 index 0000000..b23f012 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsHeapSelfTest.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.ignite.internal.portable; + +import org.apache.ignite.marshaller.portable.PortableMarshaller; + +/** + * Compact offsets tests for heap portable objects. + */ +public class BinaryFooterOffsetsHeapSelfTest extends BinaryFooterOffsetsAbstractSelfTest { + /** {@inheritDoc} */ + @Override protected BinaryObjectEx toPortable(PortableMarshaller marsh, Object obj) throws Exception { + byte[] bytes = marsh.marshal(obj); + + return new BinaryObjectImpl(ctx, bytes, 0); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/f7aa70ee/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsOffheapSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsOffheapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsOffheapSelfTest.java new file mode 100644 index 0000000..e52ebe7 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/BinaryFooterOffsetsOffheapSelfTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.ignite.internal.portable; + +import org.apache.ignite.internal.util.GridUnsafe; +import org.apache.ignite.marshaller.portable.PortableMarshaller; +import org.eclipse.jetty.util.ConcurrentHashSet; +import sun.misc.Unsafe; + +/** + * Compact offsets tests for offheap portable objects. + */ +public class BinaryFooterOffsetsOffheapSelfTest extends BinaryFooterOffsetsAbstractSelfTest { + /** Unsafe instance. */ + private static final Unsafe UNSAFE = GridUnsafe.unsafe(); + + /** Byte array offset for unsafe mechanics. */ + protected static final long BYTE_ARR_OFF = UNSAFE.arrayBaseOffset(byte[].class); + + /** Allocated unsafe pointer. */ + private final ConcurrentHashSet<Long> ptrs = new ConcurrentHashSet<>(); + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + super.afterTest(); + + // Cleanup allocated objects. + for (Long ptr : ptrs) + UNSAFE.freeMemory(ptr); + + ptrs.clear(); + } + + /** {@inheritDoc} */ + @Override protected BinaryObjectEx toPortable(PortableMarshaller marsh, Object obj) throws Exception { + byte[] arr = marsh.marshal(obj); + + long ptr = UNSAFE.allocateMemory(arr.length); + + ptrs.add(ptr); + + UNSAFE.copyMemory(arr, BYTE_ARR_OFF, null, ptr, arr.length); + + return new BinaryObjectOffheapImpl(ctx, ptr, 0, arr.length); + } +}
