You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2017/03/13 15:28:58 UTC

[35/48] polygene-java git commit: POLYGENE-231 Assert various deserialization scenarii

POLYGENE-231 Assert various deserialization scenarii

- do not choke on missing optional state
- do not choke on superfluous state
- works with shuffled state

And fix msgpack serialization that failed on the former use case


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/1d8f6fb6
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/1d8f6fb6
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/1d8f6fb6

Branch: refs/heads/serialization-3.0
Commit: 1d8f6fb63d30b0466d17022d149b7ae02bf0de2d
Parents: 514617f
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Mar 6 14:54:17 2017 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Mar 13 16:27:47 2017 +0100

----------------------------------------------------------------------
 ...AbstractValueCompositeSerializationTest.java | 110 ++++++++++++++++++-
 .../msgpack/MessagePackDeserializer.java        |   2 +-
 2 files changed, 107 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1d8f6fb6/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractValueCompositeSerializationTest.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractValueCompositeSerializationTest.java b/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractValueCompositeSerializationTest.java
index 6c10776..dced530 100644
--- a/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractValueCompositeSerializationTest.java
+++ b/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractValueCompositeSerializationTest.java
@@ -71,9 +71,6 @@ import static org.junit.Assert.assertThat;
  */
 // TODO Assert Arrays behaviour!
 // TODO Assert Generics behaviour!
-// TODO Assert deserialization using a value super type that has less properties/associations (e.g. ignore spurious state)
-// TODO Assert deserialization from state missing optional values (e.g. do not fail on missing optional values)
-// TODO Assert deserialization from state with different properties/associations order (e.g. do not fail on unordered values)
 public abstract class AbstractValueCompositeSerializationTest
     extends AbstractPolygeneTest
 {
@@ -99,7 +96,8 @@ public abstract class AbstractValueCompositeSerializationTest
     public void assemble( ModuleAssembly module )
         throws AssemblyException
     {
-        module.values( Some.class, AnotherValue.class, FooValue.class, CustomFooValue.class,
+        module.values( Some.class, SomeExtended.class, SomeShuffled.class,
+                       AnotherValue.class, FooValue.class, CustomFooValue.class,
                        SpecificCollection.class /*, SpecificValue.class, GenericValue.class */ );
 
         new EntityTestAssembler().visibleIn( Visibility.layer ).assemble( module.layer().module( "persistence" ) );
@@ -147,6 +145,61 @@ public abstract class AbstractValueCompositeSerializationTest
     }
 
     @Test
+    public void canDeserializeUsingSuperTypeWithLessState()
+    {
+        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork() )
+        {
+            SomeExtended someExtended = buildSomeExtendedValue( moduleInstance, uow, "42" );
+
+            String serialized = serialization.serialize( someExtended );
+            System.out.println( serialized );
+
+            Some deserialized = serialization.deserialize( module, Some.class, serialized );
+            System.out.println( deserialized );
+        }
+    }
+
+    @Test
+    public void canDeserializeUsingChildTypeWithSupplementaryOptionalState()
+    {
+        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork() )
+        {
+            Some some = buildSomeValue( moduleInstance, uow, "42" );
+
+            String serialized = serialization.serialize( some );
+            System.out.println( serialized );
+
+            SomeExtended deserialized = serialization.deserialize( module, SomeExtended.class, serialized );
+            System.out.println( deserialized );
+        }
+    }
+
+    /**
+     * State model order depend on declaration order, this test ensures that moving a state method up/down into a type
+     * does not break deserialization.
+     */
+    @Test
+    public void canDeserializeFromShuffledState()
+    {
+        try( UnitOfWork uow = unitOfWorkFactory.newUnitOfWork() )
+        {
+            SomeExtended someExtended = buildSomeExtendedValue( moduleInstance, uow, "42" );
+
+            String serialized = serialization.serialize( someExtended );
+            System.out.println( serialized );
+
+            SomeShuffled deserialized = serialization.deserialize( module, SomeShuffled.class, serialized );
+            System.out.println( deserialized );
+
+            serialized = serialization.serialize( deserialized );
+            System.out.println( serialized );
+
+            serialization.deserialize( module, SomeExtended.class, serialized );
+            System.out.println( deserialized );
+        }
+    }
+
+    @Test
     @Ignore( "JSONEntityState cannot handle polymorphic deserialization" )
     // TODO Entity == Identity + Value
     // JSONEntityState does not allow for polymorphic serialization
@@ -208,6 +261,19 @@ public abstract class AbstractValueCompositeSerializationTest
         return builder.newInstance();
     }
 
+    protected static SomeExtended buildSomeExtendedValue( Module module, UnitOfWork uow, String identity )
+    {
+        ValueBuilder<SomeExtended> builder = module.newValueBuilder( SomeExtended.class );
+        SomeExtended proto = builder.prototype();
+        proto.identity().set( StringIdentity.fromString( identity ) );
+        setSomeValueState( module, uow, proto );
+        proto.extraProperty().set( "extra property" );
+        proto.extraAssociation().set( buildBarEntity( uow, "extra association" ) );
+        proto.extraManyAssociation().add( buildBarEntity( uow, "extra many association" ) );
+        proto.extraNamedAssociation().put( "extra", buildBarEntity( uow, "extra named association" ) );
+        return builder.newInstance();
+    }
+
     /**
      * @return a Some EntityComposite whose state is populated with test data.
      */
@@ -407,6 +473,42 @@ public abstract class AbstractValueCompositeSerializationTest
         NamedAssociation<BarEntity> barEntityNamedAssociation();
     }
 
+    interface SomeExtended extends Some
+    {
+        @Optional
+        Property<String> extraProperty();
+
+        @Optional
+        Association<Bar> extraAssociation();
+
+        ManyAssociation<Bar> extraManyAssociation();
+
+        NamedAssociation<Bar> extraNamedAssociation();
+    }
+
+    interface SomeShuffled extends SomeExtended
+    {
+        NamedAssociation<Bar> extraNamedAssociation();
+
+        @Override
+        NamedAssociation<Bar> barNamedAssociation();
+
+        ManyAssociation<Bar> extraManyAssociation();
+
+        @Override
+        ManyAssociation<Bar> barManyAssociation();
+
+        Association<Bar> extraAssociation();
+
+        @Override
+        Association<Bar> barAssociation();
+
+        Property<String> extraProperty();
+
+        @Override
+        Property<String> string();
+    }
+
     public interface SpecificCollection
         extends GenericCollection<String>
     {

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/1d8f6fb6/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
index caba249..56f32e6 100644
--- a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
+++ b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
@@ -94,7 +94,7 @@ public interface MessagePackDeserializer extends Deserializer
         {
             try
             {
-                if( value.isNilValue() )
+                if( value == null || value.isNilValue() )
                 {
                     return null;
                 }