package org.ovirt.engine.core.utils.serialization.json; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.junit.Test; import org.ovirt.engine.core.common.action.ManageNetworkClustersParameters; import org.ovirt.engine.core.common.action.MoveOrCopyParameters; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; import org.ovirt.engine.core.compat.Guid; /** * Tests for {@link JsonObjectSerializer} and {@link JsonObjectDeserializer} with unmodifiable and immutable collections. */ public class JsonImmutableSerializeDeserializeTest { @Test public void serializeCollectionsSingleton() { ManageNetworkClustersParameters params = new ManageNetworkClustersParameters( Collections.singleton(new NetworkCluster( Guid.createGuidFromString("f455686a-79cc-11e6-8c65-54ee755c6cc7"), Guid.createGuidFromString("f970c5f6-79cc-11e6-bc8f-54ee755c6cc7"), NetworkStatus.NON_OPERATIONAL, false, false, false, false, false, false))); JsonObjectSerializer serializer = new JsonObjectSerializer(); String json = serializer.serialize(params); assertTrue(json.length() > 0); ManageNetworkClustersParameters deserializedParams = new JsonObjectDeserializer().deserialize( json, ManageNetworkClustersParameters.class); assertEquals(params.getExecutionReason(), deserializedParams.getExecutionReason()); } @Test public void serializeCollectionsSingletonList() { ManageNetworkClustersParameters params = new ManageNetworkClustersParameters( Collections.singletonList(new NetworkCluster( Guid.newGuid(), Guid.newGuid(), NetworkStatus.NON_OPERATIONAL, false, false, false, false, false, false))); JsonObjectSerializer serializer = new JsonObjectSerializer(); String json = serializer.serialize(params); assertTrue(json.length() > 0); ManageNetworkClustersParameters deserializedParams = new JsonObjectDeserializer().deserialize( json, ManageNetworkClustersParameters.class); assertEquals(params.getExecutionReason(), deserializedParams.getExecutionReason()); } @Test public void serializeCollectionsSingletonMap() { MoveOrCopyParameters params = new MoveOrCopyParameters(Guid.newGuid(), Guid.newGuid()); params.setImageToDestinationDomainMap( Collections.singletonMap(Guid.createGuidFromString("9edb6526-7ab5-11e6-b829-54ee755c6cc7"), Guid.createGuidFromString("c097a788-7ab5-11e6-849b-54ee755c6cc7"))); JsonObjectSerializer serializer = new JsonObjectSerializer(); String json = serializer.serialize(params); assertTrue(json.length() > 0); MoveOrCopyParameters deserializedParams = new JsonObjectDeserializer().deserialize( json, MoveOrCopyParameters.class); assertEquals(params.getContainerId(), deserializedParams.getContainerId()); assertEquals(params.getExecutionReason(), deserializedParams.getExecutionReason()); } @Test public void serializeCollections() { TestCollectionsParams params = new TestCollectionsParams(); HashSet<String> concreteSet = new HashSet<>(); concreteSet.add("value1"); params.setConcreteSet(concreteSet); Set<String> nonConcreteSet = new HashSet<>(); nonConcreteSet.add("value2"); params.setNonConcreteSet(nonConcreteSet); HashMap<String, String> concreteMap = new HashMap<>(); concreteMap.put("key1", "value1"); params.setConcreteMap(concreteMap); Map<String, String> nonConcreteMap = new HashMap<>(); nonConcreteMap.put("key2", "value2"); params.setNonConcreteMap(nonConcreteMap); params.setSingletonSet(Collections.singleton("singletonSetValue")); params.setSingletonList(Collections.singletonList("singletonListValue")); params.setSingletonMap(Collections.singletonMap("singletonMapKey", "singletonMapValue")); params.setArraysAsList(Arrays.asList("arraysAsList1", "arraysAsList2")); params.setUnmodifiableSet(Collections.unmodifiableSet(Collections.singleton("unmodifiableSetValue"))); params.setUnmodifiableList(Collections.unmodifiableList(Collections.singletonList("unmodifiableListValue"))); params.setUnmodifiableMap(Collections.unmodifiableMap(Collections.singletonMap("unmodifiableMapKey", "unmodifiableMapValue"))); JsonObjectSerializer serializer = new JsonObjectSerializer(); String json = serializer.serialize(params); TestCollectionsParams deserializedParams = new JsonObjectDeserializer().deserialize( json, TestCollectionsParams.class); assertNotNull(deserializedParams.getConcreteSet()); assertEquals(params.getConcreteSet(), deserializedParams.getConcreteSet()); assertNotNull(deserializedParams.getNonConcreteSet()); assertEquals(params.getNonConcreteSet(), deserializedParams.getNonConcreteSet()); assertNotNull(deserializedParams.getConcreteMap()); assertEquals(params.getConcreteMap().get("key1"), deserializedParams.getConcreteMap().get("key1")); assertNotNull(deserializedParams.getSingletonList()); assertEquals(params.getSingletonList().get(0), deserializedParams.getSingletonList().get(0)); String jsonFromDeserializedParams = serializer.serialize(deserializedParams); assertEquals(json, jsonFromDeserializedParams); } }