* Moved all l2 forwarding services based on OF to a separate OSGi
[affinity.git] / affinity / implementation / src / test / java / org / opendaylight / affinity / affinity / internal / AffinityManagerImplTest.java
1 /*
2  * Copyright (c) 2013 Plexxi, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.affinity.affinity.internal;
10
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.Set;
14 import java.util.List;
15 import java.util.Map.Entry;
16
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;
29
30 public class AffinityManagerImplTest {
31
32     @Test
33     public void testAffinityManagerAddRemoveConfig() {
34         AffinityManagerImpl affinitymgr = new AffinityManagerImpl();
35         affinitymgr.startUp();
36
37         AffinityGroup ag1 = new AffinityGroup("group1");
38
39         // Add a valid IP and confirm. 
40         Status ret1 = ag1.add("10.0.0.10");
41         Assert.assertTrue(ret1.isSuccess());
42
43         Status ret2 = ag1.add("10.0.0.20");
44         Assert.assertTrue(ret2.isSuccess());
45
46         ag1.print();
47
48         // Add an invalid element. 
49         Status ret3 = ag1.add("10");
50         System.out.println(ret3);
51         Assert.assertTrue(!ret3.isSuccess());
52
53         // Second affinity group.
54         AffinityGroup ag2 = new AffinityGroup("group2");
55         ag2.add("20.0.0.10");
56         ag2.add("20.0.0.20");
57
58         // Add an affinity link from ag1 to ag2. 
59         AffinityLink al1 = new AffinityLink();
60         al1.setFromGroup(ag1);
61         al1.setToGroup(ag2);
62         al1.setName("link1");
63         al1.setAttribute("isolate");
64
65         // Add a self loop for ag2.
66         AffinityLink al2 = new AffinityLink("link2", ag2, ag2);
67         al2.setFromGroup(ag2);
68         al2.setToGroup(ag2);
69         al2.setName("link2");
70         al2.setAttribute("hopcount");
71
72         System.out.println("Affinity group size is " + ag1.size());
73         Assert.assertTrue(ag1.size() == 2);
74         ag1.print();
75
76         Status result;
77         result = affinitymgr.addAffinityGroup(ag1);
78         Assert.assertTrue(result.isSuccess());
79
80         result = affinitymgr.addAffinityGroup(ag2);
81         Assert.assertTrue(result.isSuccess());
82         
83         result = affinitymgr.addAffinityLink(al1);
84         Assert.assertTrue(result.isSuccess());
85
86         result = affinitymgr.addAffinityLink(al2);
87         Assert.assertTrue(result.isSuccess());
88         
89         AffinityGroup ag3 = new AffinityGroup("any");
90         ag3.addInetMask("0.0.0.0/0");
91         
92         AffinityGroup ag4 = new AffinityGroup("servers");
93         ag4.addInetMask("20.0.0.0/8");
94
95         // Add an affinity link from ag1 to ag2. 
96         AffinityLink al3 = new AffinityLink();
97         al3.setFromGroup(ag3);
98         al3.setToGroup(ag4);
99         al3.setName("link3");
100         al3.setAttribute("redirect");
101         al3.setWaypoint("20.0.0.11");
102         
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());
109
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());
116         }
117
118         /* Test the get methods. */
119
120         /* Get all members as hosts */
121         //      System.out.println("Affinity group (as Hosts) = " + ag1.getName());
122         //      List<Host> hostlist = affinitymgr.getAllElementsByHost(ag1);
123         
124         //      for (Host h : hostlist) {
125         //          System.out.println("host = " + h.getNetworkAddressAsString());
126         //}
127         
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);
131         
132         for (AffinityIdentifier i : affylist) {
133             i.print();
134         }
135
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);
139         
140         for (Entry<AffinityIdentifier, AffinityIdentifier> flow : flowlist) {
141             System.out.println("flow " + "from: " + flow.getKey().toString() + "to: " + flow.getValue().toString());
142         }
143
144         affinitymgr.saveConfiguration();
145         /* Constraint checking? */
146         result = (affinitymgr.removeAffinityGroup(ag1.getName()));
147         Assert.assertTrue(result.isSuccess());
148     }
149 }