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;
42 import org.apache.commons.beanutils.PropertyUtils;
43 import org.onap.vid.model.VidNotions;
44 import org.onap.vid.model.VidNotions.InstantiationType;
45 import org.onap.vid.model.VidNotions.InstantiationUI;
46 import org.onap.vid.model.VidNotions.ModelCategory;
47 import org.onap.vid.mso.model.ModelInfo;
48 import org.testng.annotations.Test;
50 public class InstantiationModelSerializationTest {
52 final ImmutableList<Map<String, String>> instanceParams =
54 ImmutableMap.of("one", "1"),
55 ImmutableMap.of("two", "2")
59 public void serializeAndDeserializeServiceInstantiation() throws Exception {
61 ServiceInstantiation serviceInstantiation = new ServiceInstantiation(
70 "subscriptionServiceType",
92 new VidNotions(InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED,
93 ModelCategory.INFRASTRUCTURE_VPN,
94 InstantiationUI.INFRASTRUCTURE_VPN,
95 InstantiationType.Macro)
98 verifySerializationAndDeserialization(serviceInstantiation);
102 public void serializeAndDeserializeVnf() throws Exception {
105 newModelInfo(), "productFamilyId",
113 "lineOfBusinessName",
122 verifySerializationAndDeserialization(vnf);
126 public void serializeAndDeserializeVfModule() throws Exception {
128 ImmutableMap<String, String> supplementaryParams = ImmutableMap.of(
134 VfModule vfModule = new VfModule(
137 "volumeGroupInstanceName",
154 verifySerializationAndDeserialization(vfModule);
158 public void VfModule_sdncPreLoad_shouldBeSerializedWithCorrectName() {
160 final boolean USE_PRELOAD = true;
162 VfModule vfModule = new VfModule(newModelInfo(), null, null, null,
163 null, null, null, null, null, false,
164 /* HERE ====> */ USE_PRELOAD,
165 null, null, null, null, null, null, null);
167 assertThat(vfModule, jsonPartEquals("sdncPreLoad", USE_PRELOAD));
168 assertThat(vfModule, jsonNodeAbsent("usePreload"));
172 public void VfModule_volumeGroupName_shouldBeSerializedWithCorrectName() {
174 final String VOLUME_GROUP_INSTANCE_NAME = "my volume group name";
176 VfModule vfModule = new VfModule(newModelInfo(), null,
177 /* HERE ====> */ VOLUME_GROUP_INSTANCE_NAME,
178 null, null, null, null, null, null,
179 false, null, null, null, null, null,
182 assertThat(vfModule, jsonPartEquals("volumeGroupName", VOLUME_GROUP_INSTANCE_NAME));
183 assertThat(vfModule, jsonNodeAbsent("volumeGroupInstanceName"));
186 private ModelInfo newModelInfo() {
187 ModelInfo modelInfo = new ModelInfo();
188 setStringsInStringProperties(modelInfo);
192 private void verifySerializationAndDeserialization(Object object) throws Exception {
194 assertThatAllValuesAreNotDefaultValues(object);
196 String valueAsString = JACKSON_OBJECT_MAPPER.writeValueAsString(object);
197 Object objectReconstructed = JACKSON_OBJECT_MAPPER.readValue(valueAsString, object.getClass());
199 // verify that all fields' values were reconstructed
200 assertThat(objectReconstructed, samePropertyValuesAs(object));
203 private void assertThatAllValuesAreNotDefaultValues(Object object)
204 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
205 assertThat("setup is expected to have no field with a default Java value",
206 PropertyUtils.describe(object).entrySet(),
207 not(hasItem(hasProperty("value",
212 .or(equalTo(Create))))));