You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/11/03 15:36:06 UTC
[3/3] ignite git commit: IGNITE-1838: Added tests for compact offsets.
IGNITE-1838: Added tests for compact offsets.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/26ab6001
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/26ab6001
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/26ab6001
Branch: refs/heads/ignite-1838
Commit: 26ab6001cb5ed984446c4e640b256a72d35afca5
Parents: 5db7b06
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Tue Nov 3 17:36:46 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Tue Nov 3 17:36:46 2015 +0300
----------------------------------------------------------------------
.../PortableCompactOffsetsAbstractSelfTest.java | 201 +++++++++++++++++++
.../PortableCompactOffsetsHeapSelfTest.java | 32 +++
.../PortableCompactOffsetsOffheapSelfTest.java | 61 ++++++
.../IgnitePortableObjectsTestSuite.java | 5 +
4 files changed, 299 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/26ab6001/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsAbstractSelfTest.java
new file mode 100644
index 0000000..28058de
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsAbstractSelfTest.java
@@ -0,0 +1,201 @@
+/*
+ * 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.IgniteUtils;
+import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.portable.PortableMarshaller;
+import org.apache.ignite.portable.PortableField;
+import org.apache.ignite.portable.PortableMetadata;
+import org.apache.ignite.portable.PortableTypeConfiguration;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+
+import java.util.Arrays;
+
+/**
+ * Contains tests for compact offsets.
+ */
+public abstract class PortableCompactOffsetsAbstractSelfTest extends GridCommonAbstractTest {
+ /** 2 pow 8. */
+ private static int POW_8 = 1 << 8;
+
+ /** 2 pow 16. */
+ private static int POW_16 = 1 << 16;
+
+ /** Dummy metadata handler. */
+ protected static final PortableMetaDataHandler META_HND = new PortableMetaDataHandler() {
+ @Override public void addMeta(int typeId, PortableMetadata meta) {
+ // No-op.
+ }
+
+ @Override public PortableMetadata metadata(int typeId) {
+ return null;
+ }
+ };
+
+ /** Marshaller. */
+ protected PortableMarshaller marsh;
+
+ /** Portable context. */
+ protected PortableContext ctx;
+
+ /** {@inheritDoc} */
+ @Override protected void beforeTest() throws Exception {
+ super.beforeTest();
+
+ ctx = new PortableContext(META_HND, null);
+
+ marsh = new PortableMarshaller();
+
+ marsh.setTypeConfigurations(Arrays.asList(new PortableTypeConfiguration(TestObject.class.getName())));
+ marsh.setContext(new MarshallerContextTestImpl(null));
+
+ IgniteUtils.invoke(PortableMarshaller.class, marsh, "setPortableContext", ctx);
+ }
+
+ /**
+ * 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);
+
+ PortableObjectEx 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.
+ PortableField field1Desc = portObj.fieldDescriptor("field1");
+ PortableField field2Desc = portObj.fieldDescriptor("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 PortableObjectEx 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/26ab6001/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsHeapSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsHeapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsHeapSelfTest.java
new file mode 100644
index 0000000..826f972
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsHeapSelfTest.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 PortableCompactOffsetsHeapSelfTest extends PortableCompactOffsetsAbstractSelfTest {
+ /** {@inheritDoc} */
+ @Override protected PortableObjectEx toPortable(PortableMarshaller marsh, Object obj) throws Exception {
+ byte[] bytes = marsh.marshal(obj);
+
+ return new PortableObjectImpl(ctx, bytes, 0);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/26ab6001/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsOffheapSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsOffheapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsOffheapSelfTest.java
new file mode 100644
index 0000000..9ad1c67
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/PortableCompactOffsetsOffheapSelfTest.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 PortableCompactOffsetsOffheapSelfTest extends PortableCompactOffsetsAbstractSelfTest {
+ /** 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 PortableObjectEx 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 PortableObjectOffheapImpl(ctx, ptr, 0, arr.length);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/26ab6001/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePortableObjectsTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePortableObjectsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePortableObjectsTestSuite.java
index c7391a6..3cfd530 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePortableObjectsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePortableObjectsTestSuite.java
@@ -28,6 +28,9 @@ import org.apache.ignite.internal.portable.GridPortableMarshallerSelfTest;
import org.apache.ignite.internal.portable.GridPortableMetaDataDisabledSelfTest;
import org.apache.ignite.internal.portable.GridPortableMetaDataSelfTest;
import org.apache.ignite.internal.portable.GridPortableWildcardsSelfTest;
+import org.apache.ignite.internal.portable.PortableCompactOffsetsAbstractSelfTest;
+import org.apache.ignite.internal.portable.PortableCompactOffsetsHeapSelfTest;
+import org.apache.ignite.internal.portable.PortableCompactOffsetsOffheapSelfTest;
import org.apache.ignite.internal.portable.PortableFieldsHeapSelfTest;
import org.apache.ignite.internal.portable.PortableFieldsOffheapSelfTest;
import org.apache.ignite.internal.processors.cache.portable.GridCacheClientNodePortableMetadataMultinodeTest;
@@ -64,6 +67,8 @@ public class IgnitePortableObjectsTestSuite extends TestSuite {
suite.addTestSuite(GridPortableBuilderStringAsCharsSelfTest.class);
suite.addTestSuite(PortableFieldsHeapSelfTest.class);
suite.addTestSuite(PortableFieldsOffheapSelfTest.class);
+ suite.addTestSuite(PortableCompactOffsetsHeapSelfTest.class);
+ suite.addTestSuite(PortableCompactOffsetsOffheapSelfTest.class);
suite.addTestSuite(GridPortableMetaDataSelfTest.class);
suite.addTestSuite(GridPortableMetaDataDisabledSelfTest.class);
suite.addTestSuite(GridPortableAffinityKeySelfTest.class);