2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2019 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2019 European Software Marketing Ltd.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.aai.babel.xml.generator.model;
24 import static org.hamcrest.CoreMatchers.is;
25 import static org.hamcrest.CoreMatchers.notNullValue;
26 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
27 import static org.junit.Assert.assertThat;
29 import java.io.IOException;
30 import java.util.Collections;
31 import java.util.HashMap;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.aai.babel.util.ArtifactTestUtils;
36 import org.onap.aai.babel.xml.generator.model.Widget.Type;
39 * Direct tests of the VfModule Model class to improve code coverage.
41 public class TestVfModule {
44 System.setProperty("APP_HOME", ".");
48 public static void setup() throws IOException {
49 new ArtifactTestUtils().loadWidgetToUuidMappings();
53 * Call hashCode() method for code coverage.
56 public void testHashCode() {
57 Resource vfModule = createNewVfModule();
58 populateIdentInfo(vfModule);
59 assertThat(vfModule.hashCode(), is(notNullValue()));
63 * Call equals() method for code coverage.
66 public void testEquals() {
67 Resource vfModuleA = createNewVfModule();
68 populateIdentInfo(vfModuleA);
70 // equals() is reflexive
71 assertThat(vfModuleA.equals(vfModuleA), is(true));
73 // equals() is symmetric
74 Resource vfModuleB = createNewVfModule();
75 populateIdentInfo(vfModuleB);
76 assertThat(vfModuleA.equals(vfModuleB), is(true));
77 assertThat(vfModuleB.equals(vfModuleA), is(true));
79 assertThat(vfModuleA.equals(null), is(false));
83 public void testAddVServerWidgetToVf() {
84 assertAddWidget(createNewVfModule(), Type.VSERVER);
88 public void testAddServiceWidgetToVf() {
89 assertAddWidget(createNewVfModule(), Type.SERVICE);
93 * Add a new Widget to a VF Module, where the Widget is NOT set as a member. N.B. For the current VF Module
94 * implementation the actual Widget type is not important.
97 public void testNonMemberWidgetToVf() {
98 Resource vfModule = createNewVfModule();
99 assertThat(vfModule.addWidget(createNewWidget(Type.SERVICE)), is(false));
100 assertNumberOfWidgets(vfModule, 0);
104 * OAM Network is specifically excluded from a VF Module.
107 public void testAddOamNetworkWidgetToVf() {
108 Resource vfModule = createNewVfModule();
109 assertThat(createNewWidgetForModule(vfModule, Type.OAM_NETWORK), is(false));
110 assertNumberOfWidgets(vfModule, 0);
114 * Add a Volume Widget to a VF Module via a vserver Widget.
116 * <li>Create a VF Module</li>
117 * <li>Add a Volume Widget</li>
118 * <li>Add a vserver Widget</li>
119 * <li>Check that the Volume Widget appears under the vserver</li>
122 public void testAddVolumeWidgetToVf() {
123 Resource vfModule = createNewVfModule();
125 // Adding a Volume widget has no effect until a vserver widget is added.
126 assertAddWidget(vfModule, Type.VOLUME);
127 assertNumberOfWidgets(vfModule, 0);
129 final int vserverBaseWidgetCount = createVserverForVf(vfModule);
131 // The vserver now has Volume as well.
132 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 1);
134 // Adding another instance of a vserver widget fails.
135 assertFailToAddWidget(vfModule, Type.VSERVER);
136 assertNumberOfWidgets(vfModule, 1);
138 // Adding another Volume widget is always treated as successful.
139 assertAddWidget(vfModule, Type.VOLUME);
140 // Assert that no additional Widgets are actually present.
141 assertNumberOfWidgets(vfModule, 1);
142 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 1);
146 * Add an L-Interface Widget to a VF Module via a vserver Widget.
148 * <li>Create a VF Module</li>
149 * <li>Add an L-Interface Widget</li>
150 * <li>Add a vserver Widget</li>
151 * <li>Check that the L-Interface Widget appears under the vserver</li>
154 public void testAddLinterfaceWidgetToVf() {
155 Resource vfModule = createNewVfModule();
157 // Adding an L-Interface widget has no effect until a vserver widget is added.
158 assertFailToAddWidget(vfModule, Type.LINT);
159 assertNumberOfWidgets(vfModule, 0);
161 final int vserverBaseWidgetCount = createVserverForVf(vfModule);
163 // The vserver now has an L-Interface as well.
164 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 1);
166 // Adding another instance of a vserver widget fails.
167 assertFailToAddWidget(vfModule, Type.VSERVER);
168 assertNumberOfWidgets(vfModule, 1);
170 // Adding an L-Interface widget is always treated as successful when a vserver exists.
171 assertAddWidget(vfModule, Type.LINT);
172 // Assert that no additional Widgets are actually present.
173 assertNumberOfWidgets(vfModule, 1);
174 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 1);
178 * Add a Volume and an L-Interface Widget to a VF Module via a vserver Widget.
180 * <li>Create a VF Module</li>
181 * <li>Add a Volume Widget</li>
182 * <li>Add an L-Interface Widget</li>
183 * <li>Add a vserver Widget</li>
184 * <li>Check that both Widgets appear under the vserver</li>
187 public void testAddVolumeAndLinterfaceWidgetToVf() {
188 Resource vfModule = createNewVfModule();
190 // Adding a Volume widget has no effect until a vserver widget is added.
191 assertAddWidget(vfModule, Type.VOLUME);
192 assertNumberOfWidgets(vfModule, 0);
194 // Adding an L-Interface widget has no effect until a vserver widget is added.
195 assertFailToAddWidget(vfModule, Type.LINT);
196 assertNumberOfWidgets(vfModule, 0);
198 final int vserverBaseWidgetCount = createVserverForVf(vfModule);
200 // The vserver now has both Volume and L-Interface.
201 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 2);
203 // Adding another instance of a vserver widget fails.
204 assertFailToAddWidget(vfModule, Type.VSERVER);
205 assertNumberOfWidgets(vfModule, 1);
207 // Add new instances (with no effect).
208 assertAddWidget(vfModule, Type.VOLUME);
209 assertAddWidget(vfModule, Type.LINT);
210 // Assert that no additional Widgets are in fact present.
211 assertNumberOfWidgets(vfModule, 1);
212 assertNumberOfWidgets(vfModule.vserver, vserverBaseWidgetCount + 2);
215 private void assertNumberOfWidgets(Model model, int numberOfWidgets) {
216 assertThat(model.getWidgets(), hasSize(numberOfWidgets));
220 * Use the static Factory method to create a new Widget.
223 * type of Widget to create
224 * @return a new Widget
226 private Widget createNewWidget(Type widgetType) {
227 return Widget.getWidget(widgetType);
231 * Create a new VF Module that contains zero widgets and has no members.
233 * @return new VF Module resource
235 private Resource createNewVfModule() {
236 Resource vfModule = new Resource(Type.VFMODULE, true);
237 assertNumberOfWidgets(vfModule, 0);
242 * Set up some dummy Model Identification properties.
247 private void populateIdentInfo(Resource vfModule) {
248 Map<String, String> modelIdentInfo = new HashMap<>();
249 modelIdentInfo.put("UUID", "dummy_uuid");
250 vfModule.populateModelIdentificationInformation(modelIdentInfo);
254 * Create a new Widget and assert that it is successfully added to the VF Module.
257 * the VF Module to update
259 * the type of Widget to create and add
261 private void assertAddWidget(Resource vfModule, Type widgetType) {
262 assertThat(createNewWidgetForModule(vfModule, widgetType), is(true));
266 * Create a new Widget and assert that it cannot be added to the VF Module.
271 * the type of Widget to create and attempt to add
273 private void assertFailToAddWidget(Resource vfModule, Type widgetType) {
274 assertThat(createNewWidgetForModule(vfModule, widgetType), is(false));
278 * Create a new widget, make it a member of the VF Module, then try to add it.
281 * the VF Module to update
283 * the type of Widget to create and attempt to add
284 * @return whether or not the Widget was added to the module
286 private boolean createNewWidgetForModule(Resource vfModule, Type widgetType) {
287 Widget widget = createNewWidget(widgetType);
288 setWidgetAsMember(vfModule, widget);
289 return vfModule.addWidget(widget);
293 * Make the specified Widget the sole member of the VF Module. This is achieved by first adding the Widget's own ID
294 * to its set of keys, and by then setting the VF Module's members to a Singleton List comprised of this ID. These
295 * updates allow the Widget to be successfully added to the VF Module. (Non-member Widgets cannot be added.)
298 * the module for which members are overwritten
300 * the widget to be set as the member
302 private void setWidgetAsMember(Resource vfModule, Widget widget) {
303 String id = widget.getId();
305 vfModule.setMembers(Collections.singletonList(id));
309 * Create a vserver widget and add it to the specified VF Module.
312 * the VF Module to update
313 * @return the number of Widgets present in the vserver on creation
315 private int createVserverForVf(Resource vfModule) {
316 VServerWidget vserverWidget = (VServerWidget) createNewWidget(Type.VSERVER);
317 assertNumberOfWidgets(vfModule, 0);
318 final int initialWidgetCount = addVserverToVf(vfModule, vserverWidget);
319 assertNumberOfWidgets(vfModule, 1);
320 return initialWidgetCount;
324 * Add the specified vserver to the specified VF Module.
327 * the VF Module to update
328 * @param vserverWidget
330 * @return initial widget count for the vserver Widget
332 private int addVserverToVf(Resource vfModule, VServerWidget vserverWidget) {
333 // A vserver (initially) has Flavor, Image, Tenant and Vfc.
334 final int initialWidgetCount = 4;
335 assertNumberOfWidgets(vserverWidget, initialWidgetCount);
337 // Add the vserver to the VF Module.
338 setWidgetAsMember(vfModule, vserverWidget);
339 assertThat(vfModule.addWidget(vserverWidget), is(true));
341 return initialWidgetCount;