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
+ }
+ }
}