2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Copyright (C) 2017 Amdocs
8 * ================================================================================
9 * Modifications (C) 2019 Ericsson
10 * =============================================================================
11 * Licensed under the Apache License, Version 2.0 (the "License");
12 * you may not use this file except in compliance with the License.
13 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS,
19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
23 * ============LICENSE_END=========================================================
26 package org.onap.appc.dg.flowbuilder;
28 import org.hamcrest.CoreMatchers;
29 import org.junit.Assert;
30 import org.junit.Test;
31 import org.onap.appc.dg.flowbuilder.FlowBuilder;
32 import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModelException;
33 import org.onap.appc.dg.flowbuilder.impl.FlowBuilderFactory;
34 import org.onap.appc.dg.objects.*;
35 import org.onap.appc.domainmodel.Vnf;
36 import org.onap.appc.domainmodel.Vnfc;
37 import org.onap.appc.domainmodel.Vserver;
39 import java.util.HashSet;
40 import java.util.Iterator;
41 import java.util.List;
45 public class TestFlowBuilder {
47 public void testForwardFlowBuilder() throws InvalidDependencyModelException {
48 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
49 VnfcDependencyModel dependencyModel = readDependencyModel();
50 InventoryModel inventoryModel = readInventoryModel();
51 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
52 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
54 List<Vnfc> list = itr.next();
55 Assert.assertTrue(list.contains(createVnfc("SMP","Active-Passive","SMP_Name")));
58 Assert.assertTrue(list.contains(createVnfc("BE","Active-Active","BE_Name")));
61 Assert.assertTrue(list.contains(createVnfc("FE","Active-Active","FE_Name")));
64 private Vnfc createVnfc(String vnfcType,String resilienceType,String vnfcName) {
65 Vnfc vnfc = new Vnfc();
66 vnfc.setVnfcType(vnfcType);
67 vnfc.setVnfcName(vnfcName);
68 vnfc.setResilienceType(resilienceType);
73 public void testReverseFlowBuilder() throws InvalidDependencyModelException {
74 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
75 VnfcDependencyModel dependencyModel = readDependencyModel();
76 InventoryModel inventoryModel = readInventoryModel();
77 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
78 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
80 List<Vnfc> list = itr.next();
81 Assert.assertTrue(list.contains(createVnfc("FE","Active-Active","FE_Name")));
84 Assert.assertTrue(list.contains(createVnfc("BE","Active-Active","BE_Name")));
87 Assert.assertTrue(list.contains(createVnfc("SMP","Active-Passive","SMP_Name")));
89 Assert.assertThat(flowModel.toString(), CoreMatchers.containsString("Flow Model : Vnfc : vnfcType = FE"));
93 public void testComplexFlowBuilderForward() throws InvalidDependencyModelException {
94 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
95 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
96 InventoryModel inventoryModel = readComplexInventoryModel();
97 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
98 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
100 List<Vnfc> list = itr.next();
101 Assert.assertTrue(list.contains(createVnfc("A","Active-Active","A_Name")));
102 Assert.assertTrue(list.contains(createVnfc("E","Active-Active","E_Name")));
105 Assert.assertTrue(list.contains(createVnfc("B","Active-Active","B_Name")));
106 Assert.assertTrue(list.contains(createVnfc("C","Active-Active","C_Name")));
109 Assert.assertTrue(list.contains(createVnfc("D","Active-Active","D_Name")));
110 Assert.assertTrue(list.contains(createVnfc("F","Active-Active","F_Name")));
113 Assert.assertTrue(list.contains(createVnfc("G","Active-Active","G_Name")));
121 public void testComplexFlowBuilderReverse() throws InvalidDependencyModelException {
122 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
123 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
124 InventoryModel inventoryModel = readComplexInventoryModel();
125 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
126 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
128 List<Vnfc> list = itr.next();
129 Assert.assertTrue(list.contains(createVnfc("D","Active-Active","D_Name")));
131 Assert.assertTrue(list.contains(createVnfc("G","Active-Active","G_Name")));
134 Assert.assertTrue(list.contains(createVnfc("B","Active-Active","B_Name")));
135 Assert.assertTrue(list.contains(createVnfc("F","Active-Active","F_Name")));
138 Assert.assertTrue(list.contains(createVnfc("C","Active-Active","C_Name")));
141 Assert.assertTrue(list.contains(createVnfc("E","Active-Active","E_Name")));
142 Assert.assertTrue(list.contains(createVnfc("A","Active-Active","A_Name")));
146 @Test(expected = InvalidDependencyModelException.class)
147 public void testCyclicBuilder() throws InvalidDependencyModelException {
148 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.findByString("FORWARD"));
149 VnfcDependencyModel dependencyModel = readCyclicDependencyModel();
150 InventoryModel inventoryModel = readInventoryModel();
151 builder.buildFlowModel(dependencyModel,inventoryModel);
154 @Test(expected = InvalidDependencyModelException.class)
155 public void testCyclicBuilderWithRootNode() throws InvalidDependencyModelException {
156 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
157 VnfcDependencyModel dependencyModel = readCyclicDependencyModelWithRootNode();
158 InventoryModel inventoryModel = readInventoryModel();
159 builder.buildFlowModel(dependencyModel,inventoryModel);
162 private VnfcDependencyModel readCyclicDependencyModelWithRootNode() {
163 Vnfc a = createVnfc("A","Active-Passive",null);
164 Vnfc b = createVnfc("B","Active-Active",null);
165 Vnfc c = createVnfc("C","Active-Active",null);
168 Node aNode = new Node(a);
169 Node bNode = new Node(b);
170 Node cNode = new Node(c);
172 Assert.assertTrue(aNode.equals(aNode));
173 Assert.assertFalse(aNode.equals(bNode));
179 Set<Node<Vnfc>> dependencies = new HashSet<>();
180 dependencies.add(aNode);
181 dependencies.add(bNode);
182 dependencies.add(cNode);
184 return new VnfcDependencyModel(dependencies);
187 private InventoryModel readComplexInventoryModel() {
188 Vnf vnf = createVnf("vnf_1","vABCD","1");
190 Vnfc vnfcA = createVnfc("A","Active-Active","A_Name");
191 Vnfc vnfcB = createVnfc("B","Active-Active","B_Name");
192 Vnfc vnfcC = createVnfc("C","Active-Active","C_Name");
193 Vnfc vnfcD = createVnfc("D","Active-Active","D_Name");
194 Vnfc vnfcE = createVnfc("E","Active-Active","E_Name");
195 Vnfc vnfcF = createVnfc("F","Active-Active","F_Name");
196 Vnfc vnfcG = createVnfc("G","Active-Active","G_Name");
198 vnf.addVserver(createVserver("VM_URL_A1",vnfcA));
199 vnf.addVserver(createVserver("VM_URL_B1",vnfcB));
200 vnf.addVserver(createVserver("VM_URL_C1",vnfcC));
201 vnf.addVserver(createVserver("VM_URL_D1",vnfcD));
202 vnf.addVserver(createVserver("VM_URL_E1",vnfcE));
203 vnf.addVserver(createVserver("VM_URL_F1",vnfcF));
204 vnf.addVserver(createVserver("VM_URL_G1",vnfcG));
206 return new InventoryModel(vnf);
209 private Vnf createVnf(String vnfId,String vnfType,String vnfVersion) {
212 vnf.setVnfType(vnfType);
213 vnf.setVnfVersion(vnfVersion);
217 private VnfcDependencyModel readComplexDependencyModel() {
218 Vnfc a = createVnfc("A","Active-Active",null);
219 Vnfc b = createVnfc("B","Active-Active",null);
220 Vnfc c = createVnfc("C","Active-Active",null);
221 Vnfc d = createVnfc("D","Active-Active",null);
222 Vnfc e = createVnfc("E","Active-Active",null);
223 Vnfc f = createVnfc("F","Active-Active",null);
224 Vnfc g = createVnfc("G","Active-Active",null);
227 Node aNode = new Node(a);
228 Node bNode = new Node(b);
229 Node cNode = new Node(c);
230 Node dNode = new Node(d);
231 Node eNode = new Node(e);
232 Node fNode = new Node(f);
233 Node gNode = new Node(g);
248 Set<Node<Vnfc>> dependencies = new HashSet<>();
249 dependencies.add(aNode);
250 dependencies.add(bNode);
251 dependencies.add(cNode);
252 dependencies.add(dNode);
253 dependencies.add(eNode);
254 dependencies.add(fNode);
255 dependencies.add(gNode);
257 return new VnfcDependencyModel(dependencies);
260 private VnfcDependencyModel readCyclicDependencyModel() {
262 Vnfc a = createVnfc("A","Active-Passive",null);
263 Vnfc b = createVnfc("B","Active-Active",null);
264 Vnfc c = createVnfc("C","Active-Active",null);
265 Vnfc d = createVnfc("D","Active-Active",null);
268 Node aNode = new Node(a);
269 Node bNode = new Node(b);
270 Node cNode = new Node(c);
271 Node dNode = new Node(d);
280 Set<Node<Vnfc>> dependencies = new HashSet<>();
281 dependencies.add(aNode);
282 dependencies.add(bNode);
283 dependencies.add(cNode);
284 dependencies.add(dNode);
286 return new VnfcDependencyModel(dependencies);
290 private InventoryModel readInventoryModel() {
291 Vnf vnf = createVnf("vnf_1","vSCP","1");
293 Vnfc smp = createVnfc("SMP",null,"SMP_Name");
294 Vserver smpVm1 = createVserver("SMP_URL1",smp);
295 Vserver smpVm2 = createVserver("SMP_URL2",smp);
297 vnf.addVserver(smpVm1);
298 vnf.addVserver(smpVm2);
300 Vnfc be = createVnfc("BE",null,"BE_Name");
302 Vserver beVm1 = createVserver("BE_URL1",be);
303 Vserver beVm2 = createVserver("BE_URL2",be);
304 Vserver beVm3 = createVserver("BE_URL3",be);
305 Vserver beVm4 = createVserver("BE_URL4",be);
306 Vserver beVm5 = createVserver("BE_URL5",be);
308 vnf.addVserver(beVm1);
309 vnf.addVserver(beVm2);
310 vnf.addVserver(beVm3);
311 vnf.addVserver(beVm4);
312 vnf.addVserver(beVm5);
314 Vnfc fe = createVnfc("FE",null,"FE_Name");
316 Vserver feVm1 = createVserver("FE_URL1",fe);
317 Vserver feVm2 = createVserver("FE_URL2",fe);
319 vnf.addVserver(feVm1);
320 vnf.addVserver(feVm2);
322 return new InventoryModel(vnf);
325 private Vserver createVserver(String url,Vnfc vnfc) {
326 Vserver vserver = new Vserver();
328 vserver.setVnfc(vnfc);
329 vnfc.addVserver(vserver);
333 private VnfcDependencyModel readDependencyModel() {
334 Vnfc smp = createVnfc("SMP","Active-Passive",null);
335 Vnfc be = createVnfc("BE","Active-Active",null);
336 Vnfc fe = createVnfc("FE","Active-Active",null);
339 Node smpNode = new Node(smp);
340 Node beNode = new Node(be);
341 Node feNode = new Node(fe);
343 beNode.addParent(smp);
344 feNode.addParent(be);
346 Set<Node<Vnfc>> dependencies = new HashSet<>();
347 dependencies.add(smpNode);
348 dependencies.add(feNode);
349 dependencies.add(beNode);
351 return new VnfcDependencyModel(dependencies);