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.setStringsInStringFields;
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),
101 verifySerializationAndDeserialization(serviceInstantiation);
105 public void serializeAndDeserializeVnf() throws Exception {
108 newModelInfo(), "productFamilyId",
116 "lineOfBusinessName",
126 verifySerializationAndDeserialization(vnf);
130 public void serializeAndDeserializeVfModule() throws Exception {
132 List<UserParamNameAndValue> supplementaryParams = ImmutableList.of(
133 new UserParamNameAndValue("uno", "1"),
134 new UserParamNameAndValue("dos", "2"),
135 new UserParamNameAndValue("tres", "3")
138 VfModule vfModule = new VfModule(
141 "volumeGroupInstanceName",
159 verifySerializationAndDeserialization(vfModule);
163 public void VfModule_sdncPreLoad_shouldBeSerializedWithCorrectName() {
165 final boolean USE_PRELOAD = true;
167 VfModule vfModule = new VfModule(newModelInfo(), null, null, null,
168 null, null, null, null, null, false,
169 /* HERE ====> */ USE_PRELOAD,
170 null, null, null, null, null, null, null, null);
172 assertThat(vfModule, jsonPartEquals("sdncPreLoad", USE_PRELOAD));
173 assertThat(vfModule, jsonNodeAbsent("usePreload"));
177 public void VfModule_volumeGroupName_shouldBeSerializedWithCorrectName() {
179 final String VOLUME_GROUP_INSTANCE_NAME = "my volume group name";
181 VfModule vfModule = new VfModule(newModelInfo(), null,
182 /* HERE ====> */ VOLUME_GROUP_INSTANCE_NAME,
183 null, null, null, null, null, null,
184 false, null, null, null, null, null,
185 null, null, null, null);
187 assertThat(vfModule, jsonPartEquals("volumeGroupName", VOLUME_GROUP_INSTANCE_NAME));
188 assertThat(vfModule, jsonNodeAbsent("volumeGroupInstanceName"));
191 private ModelInfo newModelInfo() {
192 ModelInfo modelInfo = new ModelInfo();
193 setStringsInStringFields(modelInfo);
197 private void verifySerializationAndDeserialization(Object object) throws Exception {
199 assertThatAllValuesAreNotDefaultValues(object);
201 String valueAsString = JACKSON_OBJECT_MAPPER.writeValueAsString(object);
202 Object objectReconstructed = JACKSON_OBJECT_MAPPER.readValue(valueAsString, object.getClass());
204 // verify that all fields' values were reconstructed
205 assertThat(objectReconstructed, samePropertyValuesAs(object));
208 private void assertThatAllValuesAreNotDefaultValues(Object object)
209 throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
210 assertThat("setup is expected to have no field with a default Java value",
211 PropertyUtils.describe(object).entrySet(),
212 not(hasItem(hasProperty("value",
217 .or(equalTo(Create))))));