2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.vid.model.serviceInstantiation;
23 import static java.util.Collections.emptyMap;
24 import static net.javacrumbs.jsonunit.JsonMatchers.jsonNodeAbsent;
25 import static net.javacrumbs.jsonunit.JsonMatchers.jsonPartEquals;
26 import static org.hamcrest.CoreMatchers.either;
27 import static org.hamcrest.CoreMatchers.equalTo;
28 import static org.hamcrest.CoreMatchers.not;
29 import static org.hamcrest.MatcherAssert.assertThat;
30 import static org.hamcrest.Matchers.hasItem;
31 import static org.hamcrest.Matchers.hasProperty;
32 import static org.hamcrest.Matchers.nullValue;
33 import static org.hamcrest.Matchers.samePropertyValuesAs;
34 import static org.onap.vid.model.Action.Create;
35 import static org.onap.vid.testUtils.TestUtils.setStringsInStringProperties;
36 import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER;
38 import com.google.common.collect.ImmutableList;
39 import com.google.common.collect.ImmutableMap;
40 import java.lang.reflect.InvocationTargetException;
41 import java.util.List;
43 import org.apache.commons.beanutils.PropertyUtils;
44 import org.onap.vid.model.VidNotions;
45 import org.onap.vid.model.VidNotions.InstantiationType;
46 import org.onap.vid.model.VidNotions.InstantiationUI;
47 import org.onap.vid.model.VidNotions.ModelCategory;
48 import org.onap.vid.mso.model.ModelInfo;
49 import org.onap.vid.mso.model.ServiceInstantiationRequestDetails.UserParamNameAndValue;
50 import org.testng.annotations.Test;
52 public class InstantiationModelSerializationTest {
54 final ImmutableList<Map<String, String>> instanceParams =
56 ImmutableMap.of("one", "1"),
57 ImmutableMap.of("two", "2")
61 public void serializeAndDeserializeServiceInstantiation() throws Exception {
63 ServiceInstantiation serviceInstantiation = new ServiceInstantiation(
72 "subscriptionServiceType",
94 new VidNotions(InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED,
95 ModelCategory.INFRASTRUCTURE_VPN,
96 InstantiationUI.INFRASTRUCTURE_VPN,
97 InstantiationType.Macro)
100 verifySerializationAndDeserialization(serviceInstantiation);
104 public void serializeAndDeserializeVnf() throws Exception {
107 newModelInfo(), "productFamilyId",
115 "lineOfBusinessName",
124 verifySerializationAndDeserialization(vnf);
128 public void serializeAndDeserializeVfModule() throws Exception {
130 List<UserParamNameAndValue> supplementaryParams = ImmutableList.of(
131 new UserParamNameAndValue("uno", "1"),
132 new UserParamNameAndValue("dos", "2"),
133 new UserParamNameAndValue("tres", "3")
136 VfModule vfModule = new VfModule(
139 "volumeGroupInstanceName",
156 verifySerializationAndDeserialization(vfModule);
160 public void VfModule_sdncPreLoad_shouldBeSerializedWithCorrectName() {
162 final boolean USE_PRELOAD = true;
164 VfModule vfModule = new VfModule(newModelInfo(), null, null, null,
165 null, null, null, null, null, false,
166 /* HERE ====> */ USE_PRELOAD,
167 null, null, null, null, null, null, null);
169 assertThat(vfModule, jsonPartEquals("sdncPreLoad", USE_PRELOAD));
170 assertThat(vfModule, jsonNodeAbsent("usePreload"));
174 public void VfModule_volumeGroupName_shouldBeSerializedWithCorrectName() {
176 final String VOLUME_GROUP_INSTANCE_NAME = "my volume group name";
178 VfModule vfModule = new VfModule(newModelInfo(), null,
179 /* HERE ====> */ VOLUME_GROUP_INSTANCE_NAME,
180 null, null, null, null, null, null,
181 false, null, null, null, null, null,
184 assertThat(vfModule, jsonPartEquals("volumeGroupName", VOLUME_GROUP_INSTANCE_NAME));
185 assertThat(vfModule, jsonNodeAbsent("volumeGroupInstanceName"));
188 private ModelInfo newModelInfo() {
189 ModelInfo modelInfo = new ModelInfo();
190 setStringsInStringProperties(modelInfo);
194 private void verifySerializationAndDeserialization(Object object) throws Exception {
196 assertThatAllValuesAreNotDefaultValues(object);
198 String valueAsString = JACKSON_OBJECT_MAPPER.writeValueAsString(object);
199 Object objectReconstructed = JACKSON_OBJECT_MAPPER.readValue(valueAsString, object.getClass());
201 // verify that all fields' values were reconstructed
202 assertThat(objectReconstructed, samePropertyValuesAs(object));
205 private void assertThatAllValuesAreNotDefaultValues(Object object)
206 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
207 assertThat("setup is expected to have no field with a default Java value",
208 PropertyUtils.describe(object).entrySet(),
209 not(hasItem(hasProperty("value",
214 .or(equalTo(Create))))));