2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Amdocs
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=========================================================
20 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23 package org.openecomp.appc.dg.flowbuilder;
25 import org.junit.Assert;
26 import org.junit.Test;
27 import org.openecomp.appc.dg.flowbuilder.FlowBuilder;
28 import org.openecomp.appc.dg.flowbuilder.exception.InvalidDependencyModel;
29 import org.openecomp.appc.dg.flowbuilder.impl.FlowBuilderFactory;
30 import org.openecomp.appc.dg.objects.*;
31 import org.openecomp.appc.domainmodel.Vnf;
32 import org.openecomp.appc.domainmodel.Vnfc;
33 import org.openecomp.appc.domainmodel.Vserver;
35 import java.util.HashSet;
36 import java.util.Iterator;
37 import java.util.List;
41 public class TestFlowBuilder {
44 public void testForwardFlowBuilder(){
45 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
46 VnfcDependencyModel dependencyModel = readDependencyModel();
47 InventoryModel inventoryModel = readInventoryModel();
48 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
49 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
51 List<Vnfc> list = itr.next();
52 Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name")));
55 Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name")));
58 Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name")));
62 public void testReverseFlowBuilder(){
63 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
64 VnfcDependencyModel dependencyModel = readDependencyModel();
65 InventoryModel inventoryModel = readInventoryModel();
66 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
67 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
69 List<Vnfc> list = itr.next();
70 Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name")));
73 Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name")));
76 Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name")));
80 public void testComplexFlowBuilderForward(){
81 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
82 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
83 InventoryModel inventoryModel = readComplexInventoryModel();
84 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
85 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
87 List<Vnfc> list = itr.next();
88 Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name")));
89 Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name")));
92 Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name")));
93 Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name")));
96 Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name")));
97 Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name")));
100 Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name")));
105 public void testComplexFlowBuilderReverse(){
106 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
107 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
108 InventoryModel inventoryModel = readComplexInventoryModel();
109 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
110 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
112 List<Vnfc> list = itr.next();
113 Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name")));
115 Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name")));
118 Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name")));
119 Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name")));
122 Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name")));
125 Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name")));
126 Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name")));
130 @Test(expected = InvalidDependencyModel.class)
131 public void testCyclicBuilder(){
132 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
133 VnfcDependencyModel dependencyModel = readCyclicDependencyModel();
134 InventoryModel inventoryModel = readInventoryModel();
135 builder.buildFlowModel(dependencyModel,inventoryModel);
138 @Test(expected = InvalidDependencyModel.class)
139 public void testCyclicBuilderWithRootNode(){
140 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
141 VnfcDependencyModel dependencyModel = readCyclicDependencyModelWithRootNode();
142 InventoryModel inventoryModel = readInventoryModel();
143 builder.buildFlowModel(dependencyModel,inventoryModel);
146 private VnfcDependencyModel readCyclicDependencyModelWithRootNode() {
147 Vnfc a = new Vnfc("A","Active-Passive",null);
148 Vnfc b = new Vnfc("B","Active-Active",null);
149 Vnfc c = new Vnfc("C","Active-Active",null);
152 Node aNode = new Node(a);
153 Node bNode = new Node(b);
154 Node cNode = new Node(c);
160 Set<Node<Vnfc>> dependencies = new HashSet<>();
161 dependencies.add(aNode);
162 dependencies.add(bNode);
163 dependencies.add(cNode);
165 return new VnfcDependencyModel(dependencies);
168 private InventoryModel readComplexInventoryModel() {
169 Vnf vnf = new Vnf("vnf_1","vABCD","1");
171 Vnfc vnfcA = new Vnfc("A","Active-Active","A_Name");
172 Vnfc vnfcB = new Vnfc("B","Active-Active","B_Name");
173 Vnfc vnfcC = new Vnfc("C","Active-Active","C_Name");
174 Vnfc vnfcD = new Vnfc("D","Active-Active","D_Name");
175 Vnfc vnfcE = new Vnfc("E","Active-Active","E_Name");
176 Vnfc vnfcF = new Vnfc("F","Active-Active","F_Name");
177 Vnfc vnfcG = new Vnfc("G","Active-Active","G_Name");
179 vnfcA.addVm(new Vserver("VM_URL_A1"));
180 vnfcB.addVm(new Vserver("VM_URL_B1"));
181 vnfcC.addVm(new Vserver("VM_URL_C1"));
182 vnfcD.addVm(new Vserver("VM_URL_D1"));
183 vnfcE.addVm(new Vserver("VM_URL_E1"));
184 vnfcF.addVm(new Vserver("VM_URL_F1"));
185 vnfcG.addVm(new Vserver("VM_URL_G1"));
195 return new InventoryModel(vnf);
198 private VnfcDependencyModel readComplexDependencyModel() {
199 Vnfc a = new Vnfc("A","Active-Active",null);
200 Vnfc b = new Vnfc("B","Active-Active",null);
201 Vnfc c = new Vnfc("C","Active-Active",null);
202 Vnfc d = new Vnfc("D","Active-Active",null);
203 Vnfc e = new Vnfc("E","Active-Active",null);
204 Vnfc f = new Vnfc("F","Active-Active",null);
205 Vnfc g = new Vnfc("G","Active-Active",null);
208 Node aNode = new Node(a);
209 Node bNode = new Node(b);
210 Node cNode = new Node(c);
211 Node dNode = new Node(d);
212 Node eNode = new Node(e);
213 Node fNode = new Node(f);
214 Node gNode = new Node(g);
229 Set<Node<Vnfc>> dependencies = new HashSet<>();
230 dependencies.add(aNode);
231 dependencies.add(bNode);
232 dependencies.add(cNode);
233 dependencies.add(dNode);
234 dependencies.add(eNode);
235 dependencies.add(fNode);
236 dependencies.add(gNode);
238 return new VnfcDependencyModel(dependencies);
241 private VnfcDependencyModel readCyclicDependencyModel() {
243 Vnfc a = new Vnfc("A","Active-Passive",null);
244 Vnfc b = new Vnfc("B","Active-Active",null);
245 Vnfc c = new Vnfc("C","Active-Active",null);
246 Vnfc d = new Vnfc("D","Active-Active",null);
249 Node aNode = new Node(a);
250 Node bNode = new Node(b);
251 Node cNode = new Node(c);
252 Node dNode = new Node(d);
261 Set<Node<Vnfc>> dependencies = new HashSet<>();
262 dependencies.add(aNode);
263 dependencies.add(bNode);
264 dependencies.add(cNode);
265 dependencies.add(dNode);
267 return new VnfcDependencyModel(dependencies);
271 private InventoryModel readInventoryModel() {
272 Vnf vnf = new Vnf("vnf_1","vSCP","1");
274 Vnfc smp = new Vnfc("SMP",null,"SMP_Name");
275 Vserver smpVm1 = new Vserver("SMP_URL1");
276 Vserver smpVm2 = new Vserver("SMP_URL2");
281 Vnfc be = new Vnfc("BE",null,"BE_Name");
283 Vserver beVm1 = new Vserver("BE_URL1");
284 Vserver beVm2 = new Vserver("BE_URL2");
285 Vserver beVm3 = new Vserver("BE_URL3");
286 Vserver beVm4 = new Vserver("BE_URL4");
287 Vserver beVm5 = new Vserver("BE_URL5");
295 Vnfc fe = new Vnfc("FE",null,"FE_Name");
297 Vserver feVm1 = new Vserver("FE_URL1");
298 Vserver feVm2 = new Vserver("FE_URL2");
307 return new InventoryModel(vnf);
310 private VnfcDependencyModel readDependencyModel() {
311 Vnfc smp = new Vnfc("SMP","Active-Passive",null);
312 Vnfc be = new Vnfc("BE","Active-Active",null);
313 Vnfc fe = new Vnfc("FE","Active-Active",null);
316 Node smpNode = new Node(smp);
317 Node beNode = new Node(be);
318 Node feNode = new Node(fe);
320 beNode.addParent(smp);
321 feNode.addParent(be);
323 Set<Node<Vnfc>> dependencies = new HashSet<>();
324 dependencies.add(smpNode);
325 dependencies.add(feNode);
326 dependencies.add(beNode);
328 return new VnfcDependencyModel(dependencies);