You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2022/01/11 23:56:34 UTC

[ignite-3] 06/27: - make sure Externalizable constructor is called on unmarshalling

This is an automated email from the ASF dual-hosted git repository.

sdanilov pushed a commit to branch uos-network
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 6183eeba7f4023542dc59265e4dd785324ebe67a
Author: Roman Puchkovskiy <ro...@gmail.com>
AuthorDate: Tue Jan 11 10:36:30 2022 +0400

    - make sure Externalizable constructor is called on unmarshalling
---
 ...UserObjectMarshallerWithExternalizableTest.java | 29 ++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithExternalizableTest.java b/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithExternalizableTest.java
index c46c078..6f1765a 100644
--- a/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithExternalizableTest.java
+++ b/modules/network/src/test/java/org/apache/ignite/internal/network/serialization/marshal/DefaultUserObjectMarshallerWithExternalizableTest.java
@@ -27,6 +27,7 @@ import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
@@ -57,6 +58,8 @@ class DefaultUserObjectMarshallerWithExternalizableTest {
     private static final int WRITE_REPLACE_INCREMENT = 1_000_000;
     private static final int READ_RESOLVE_INCREMENT = 1_000;
 
+    private static boolean constructorCalled;
+
     @Test
     void usesExactlyOneDescriptorWhenMarshallingExternalizable() throws Exception {
         MarshalledObject marshalled = marshaller.marshal(new SimpleExternalizable(42));
@@ -234,6 +237,16 @@ class DefaultUserObjectMarshallerWithExternalizableTest {
         assertThat(unmarshalled.intHolder.value, is(42));
     }
 
+    @Test
+    void invokesDefaultConstructorOnExternalizableUnmarshalling() throws Exception {
+        WithSideEffectInConstructor object = new WithSideEffectInConstructor();
+        constructorCalled = false;
+
+        marshalAndUnmarshalNonNull(object);
+
+        assertTrue(constructorCalled);
+    }
+
     /**
      * An {@link Externalizable} that does not have {@code writeReplace()}/{@code readResolve()} methods.
      */
@@ -528,4 +541,20 @@ class DefaultUserObjectMarshallerWithExternalizableTest {
             this.value = value;
         }
     }
+
+    private static class WithSideEffectInConstructor implements Externalizable {
+        public WithSideEffectInConstructor() {
+            constructorCalled = true;
+        }
+
+        @Override
+        public void writeExternal(ObjectOutput out) {
+            // no-op
+        }
+
+        @Override
+        public void readExternal(ObjectInput in) {
+            // no-op
+        }
+    }
 }