2 * Copyright (c) 2013 Plexxi, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.affinity.affinity.internal;
11 import java.util.ArrayList;
12 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Map.Entry;
17 import org.junit.Assert;
18 import org.junit.Test;
19 import org.opendaylight.controller.sal.core.Bandwidth;
20 import org.opendaylight.controller.sal.core.Latency;
21 import org.opendaylight.controller.sal.core.Property;
22 import org.opendaylight.controller.sal.core.State;
23 import org.opendaylight.controller.sal.core.UpdateType;
24 import org.opendaylight.controller.sal.utils.Status;
25 import org.opendaylight.affinity.affinity.AffinityIdentifier;
26 import org.opendaylight.affinity.affinity.AffinityGroup;
27 import org.opendaylight.affinity.affinity.AffinityLink;
28 import org.opendaylight.controller.sal.core.Host;
30 public class AffinityManagerImplTest {
33 public void testAffinityManagerAddRemoveConfig() {
34 AffinityManagerImpl affinitymgr = new AffinityManagerImpl();
35 affinitymgr.startUp();
37 AffinityGroup ag1 = new AffinityGroup("group1");
39 // Add a valid IP and confirm.
40 Status ret1 = ag1.add("10.0.0.10");
41 Assert.assertTrue(ret1.isSuccess());
43 Status ret2 = ag1.add("10.0.0.20");
44 Assert.assertTrue(ret2.isSuccess());
48 // Add an invalid element.
49 Status ret3 = ag1.add("10");
50 System.out.println(ret3);
51 Assert.assertTrue(!ret3.isSuccess());
53 // Second affinity group.
54 AffinityGroup ag2 = new AffinityGroup("group2");
58 // Add an affinity link from ag1 to ag2.
59 AffinityLink al1 = new AffinityLink();
60 al1.setFromGroup(ag1);
63 al1.setAttribute("isolate");
65 // Add a self loop for ag2.
66 AffinityLink al2 = new AffinityLink("link2", ag2, ag2);
67 al2.setFromGroup(ag2);
70 al2.setAttribute("hopcount");
72 System.out.println("Affinity group size is " + ag1.size());
73 Assert.assertTrue(ag1.size() == 2);
77 result = affinitymgr.addAffinityGroup(ag1);
78 Assert.assertTrue(result.isSuccess());
80 result = affinitymgr.addAffinityGroup(ag2);
81 Assert.assertTrue(result.isSuccess());
83 result = affinitymgr.addAffinityLink(al1);
84 Assert.assertTrue(result.isSuccess());
86 result = affinitymgr.addAffinityLink(al2);
87 Assert.assertTrue(result.isSuccess());
89 AffinityGroup ag3 = new AffinityGroup("any");
90 ag3.addInetMask("0.0.0.0/0");
92 AffinityGroup ag4 = new AffinityGroup("servers");
93 ag4.addInetMask("20.0.0.0/8");
95 // Add an affinity link from ag1 to ag2.
96 AffinityLink al3 = new AffinityLink();
97 al3.setFromGroup(ag3);
100 al3.setAttribute("redirect");
101 al3.setWaypoint("20.0.0.11");
103 result = affinitymgr.addAffinityGroup(ag3);
104 Assert.assertTrue(result.isSuccess());
105 result = affinitymgr.addAffinityGroup(ag4);
106 Assert.assertTrue(result.isSuccess());
107 result = affinitymgr.addAffinityLink(al3);
108 Assert.assertTrue(result.isSuccess());
110 // Print all pairs/flows from the affinity link al3.
111 System.out.println("affinity link " + al3.getName());
112 List<Entry<AffinityIdentifier, AffinityIdentifier>> flowlist1;
113 flowlist1 = affinitymgr.getAllFlowsByAffinityIdentifier(al3);
114 for (Entry<AffinityIdentifier, AffinityIdentifier> flow : flowlist1) {
115 System.out.println("flow with from=" + flow.getKey() + " to=" + flow.getValue());
118 /* Test the get methods. */
120 /* Get all members as hosts */
121 // System.out.println("Affinity group (as Hosts) = " + ag1.getName());
122 // List<Host> hostlist = affinitymgr.getAllElementsByHost(ag1);
124 // for (Host h : hostlist) {
125 // System.out.println("host = " + h.getNetworkAddressAsString());
128 /* Get all members as affinity identifiers */
129 System.out.println("Affinity group (as Affinity Identifiers) = " + ag1.getName());
130 ArrayList<AffinityIdentifier> affylist = affinitymgr.getAllElementsByAffinityIdentifier(ag1);
132 for (AffinityIdentifier i : affylist) {
136 /* Get all id pairs for an affinity link */
137 System.out.println("Affinity link = " + al1.getName());
138 List<Entry<AffinityIdentifier, AffinityIdentifier>> flowlist = affinitymgr.getAllFlowsByAffinityIdentifier(al1);
140 for (Entry<AffinityIdentifier, AffinityIdentifier> flow : flowlist) {
141 System.out.println("flow " + "from: " + flow.getKey().toString() + "to: " + flow.getValue().toString());
144 affinitymgr.saveConfiguration();
145 /* Constraint checking? */
146 result = (affinitymgr.removeAffinityGroup(ag1.getName()));
147 Assert.assertTrue(result.isSuccess());