2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Copyright (C) 2017 Amdocs
8 * =============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 * ============LICENSE_END=========================================================
25 package org.onap.appc.dg.flowbuilder;
27 import org.junit.Assert;
28 import org.junit.Test;
29 import org.onap.appc.dg.flowbuilder.FlowBuilder;
30 import org.onap.appc.dg.flowbuilder.exception.InvalidDependencyModel;
31 import org.onap.appc.dg.flowbuilder.impl.FlowBuilderFactory;
32 import org.onap.appc.dg.objects.*;
33 import org.onap.appc.domainmodel.Vnf;
34 import org.onap.appc.domainmodel.Vnfc;
35 import org.onap.appc.domainmodel.Vserver;
37 import java.util.HashSet;
38 import java.util.Iterator;
39 import java.util.List;
43 public class TestFlowBuilder {
46 public void testForwardFlowBuilder(){
47 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
48 VnfcDependencyModel dependencyModel = readDependencyModel();
49 InventoryModel inventoryModel = readInventoryModel();
50 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
51 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
53 List<Vnfc> list = itr.next();
54 Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name")));
57 Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name")));
60 Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name")));
64 public void testReverseFlowBuilder(){
65 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
66 VnfcDependencyModel dependencyModel = readDependencyModel();
67 InventoryModel inventoryModel = readInventoryModel();
68 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
69 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
71 List<Vnfc> list = itr.next();
72 Assert.assertTrue(list.contains(new Vnfc("FE","Active-Active","FE_Name")));
75 Assert.assertTrue(list.contains(new Vnfc("BE","Active-Active","BE_Name")));
78 Assert.assertTrue(list.contains(new Vnfc("SMP","Active-Passive","SMP_Name")));
82 public void testComplexFlowBuilderForward(){
83 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
84 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
85 InventoryModel inventoryModel = readComplexInventoryModel();
86 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
87 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
89 List<Vnfc> list = itr.next();
90 Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name")));
91 Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name")));
94 Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name")));
95 Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name")));
98 Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name")));
99 Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name")));
102 Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name")));
107 public void testComplexFlowBuilderReverse(){
108 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.REVERSE);
109 VnfcDependencyModel dependencyModel = readComplexDependencyModel();
110 InventoryModel inventoryModel = readComplexInventoryModel();
111 VnfcFlowModel flowModel = builder.buildFlowModel(dependencyModel,inventoryModel);
112 Iterator<List<Vnfc>> itr = flowModel.getModelIterator();
114 List<Vnfc> list = itr.next();
115 Assert.assertTrue(list.contains(new Vnfc("D","Active-Active","D_Name")));
117 Assert.assertTrue(list.contains(new Vnfc("G","Active-Active","G_Name")));
120 Assert.assertTrue(list.contains(new Vnfc("B","Active-Active","B_Name")));
121 Assert.assertTrue(list.contains(new Vnfc("F","Active-Active","F_Name")));
124 Assert.assertTrue(list.contains(new Vnfc("C","Active-Active","C_Name")));
127 Assert.assertTrue(list.contains(new Vnfc("E","Active-Active","E_Name")));
128 Assert.assertTrue(list.contains(new Vnfc("A","Active-Active","A_Name")));
132 @Test(expected = InvalidDependencyModel.class)
133 public void testCyclicBuilder(){
134 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
135 VnfcDependencyModel dependencyModel = readCyclicDependencyModel();
136 InventoryModel inventoryModel = readInventoryModel();
137 builder.buildFlowModel(dependencyModel,inventoryModel);
140 @Test(expected = InvalidDependencyModel.class)
141 public void testCyclicBuilderWithRootNode(){
142 FlowBuilder builder = FlowBuilderFactory.getInstance().getFlowBuilder(FlowStrategies.FORWARD);
143 VnfcDependencyModel dependencyModel = readCyclicDependencyModelWithRootNode();
144 InventoryModel inventoryModel = readInventoryModel();
145 builder.buildFlowModel(dependencyModel,inventoryModel);
148 private VnfcDependencyModel readCyclicDependencyModelWithRootNode() {
149 Vnfc a = new Vnfc("A","Active-Passive",null);
150 Vnfc b = new Vnfc("B","Active-Active",null);
151 Vnfc c = new Vnfc("C","Active-Active",null);
154 Node aNode = new Node(a);
155 Node bNode = new Node(b);
156 Node cNode = new Node(c);
162 Set<Node<Vnfc>> dependencies = new HashSet<>();
163 dependencies.add(aNode);
164 dependencies.add(bNode);
165 dependencies.add(cNode);
167 return new VnfcDependencyModel(dependencies);
170 private InventoryModel readComplexInventoryModel() {
171 Vnf vnf = new Vnf("vnf_1","vABCD","1");
173 Vnfc vnfcA = new Vnfc("A","Active-Active","A_Name");
174 Vnfc vnfcB = new Vnfc("B","Active-Active","B_Name");
175 Vnfc vnfcC = new Vnfc("C","Active-Active","C_Name");
176 Vnfc vnfcD = new Vnfc("D","Active-Active","D_Name");
177 Vnfc vnfcE = new Vnfc("E","Active-Active","E_Name");
178 Vnfc vnfcF = new Vnfc("F","Active-Active","F_Name");
179 Vnfc vnfcG = new Vnfc("G","Active-Active","G_Name");
181 vnfcA.addVm(new Vserver("VM_URL_A1"));
182 vnfcB.addVm(new Vserver("VM_URL_B1"));
183 vnfcC.addVm(new Vserver("VM_URL_C1"));
184 vnfcD.addVm(new Vserver("VM_URL_D1"));
185 vnfcE.addVm(new Vserver("VM_URL_E1"));
186 vnfcF.addVm(new Vserver("VM_URL_F1"));
187 vnfcG.addVm(new Vserver("VM_URL_G1"));
197 return new InventoryModel(vnf);
200 private VnfcDependencyModel readComplexDependencyModel() {
201 Vnfc a = new Vnfc("A","Active-Active",null);
202 Vnfc b = new Vnfc("B","Active-Active",null);
203 Vnfc c = new Vnfc("C","Active-Active",null);
204 Vnfc d = new Vnfc("D","Active-Active",null);
205 Vnfc e = new Vnfc("E","Active-Active",null);
206 Vnfc f = new Vnfc("F","Active-Active",null);
207 Vnfc g = new Vnfc("G","Active-Active",null);
210 Node aNode = new Node(a);
211 Node bNode = new Node(b);
212 Node cNode = new Node(c);
213 Node dNode = new Node(d);
214 Node eNode = new Node(e);
215 Node fNode = new Node(f);
216 Node gNode = new Node(g);
231 Set<Node<Vnfc>> dependencies = new HashSet<>();
232 dependencies.add(aNode);
233 dependencies.add(bNode);
234 dependencies.add(cNode);
235 dependencies.add(dNode);
236 dependencies.add(eNode);
237 dependencies.add(fNode);
238 dependencies.add(gNode);
240 return new VnfcDependencyModel(dependencies);
243 private VnfcDependencyModel readCyclicDependencyModel() {
245 Vnfc a = new Vnfc("A","Active-Passive",null);
246 Vnfc b = new Vnfc("B","Active-Active",null);
247 Vnfc c = new Vnfc("C","Active-Active",null);
248 Vnfc d = new Vnfc("D","Active-Active",null);
251 Node aNode = new Node(a);
252 Node bNode = new Node(b);
253 Node cNode = new Node(c);
254 Node dNode = new Node(d);
263 Set<Node<Vnfc>> dependencies = new HashSet<>();
264 dependencies.add(aNode);
265 dependencies.add(bNode);
266 dependencies.add(cNode);
267 dependencies.add(dNode);
269 return new VnfcDependencyModel(dependencies);
273 private InventoryModel readInventoryModel() {
274 Vnf vnf = new Vnf("vnf_1","vSCP","1");
276 Vnfc smp = new Vnfc("SMP",null,"SMP_Name");
277 Vserver smpVm1 = new Vserver("SMP_URL1");
278 Vserver smpVm2 = new Vserver("SMP_URL2");
283 Vnfc be = new Vnfc("BE",null,"BE_Name");
285 Vserver beVm1 = new Vserver("BE_URL1");
286 Vserver beVm2 = new Vserver("BE_URL2");
287 Vserver beVm3 = new Vserver("BE_URL3");
288 Vserver beVm4 = new Vserver("BE_URL4");
289 Vserver beVm5 = new Vserver("BE_URL5");
297 Vnfc fe = new Vnfc("FE",null,"FE_Name");
299 Vserver feVm1 = new Vserver("FE_URL1");
300 Vserver feVm2 = new Vserver("FE_URL2");
309 return new InventoryModel(vnf);
312 private VnfcDependencyModel readDependencyModel() {
313 Vnfc smp = new Vnfc("SMP","Active-Passive",null);
314 Vnfc be = new Vnfc("BE","Active-Active",null);
315 Vnfc fe = new Vnfc("FE","Active-Active",null);
318 Node smpNode = new Node(smp);
319 Node beNode = new Node(be);
320 Node feNode = new Node(fe);
322 beNode.addParent(smp);
323 feNode.addParent(be);
325 Set<Node<Vnfc>> dependencies = new HashSet<>();
326 dependencies.add(smpNode);
327 dependencies.add(feNode);
328 dependencies.add(beNode);
330 return new VnfcDependencyModel(dependencies);