Bug 4998: Intermittent VNMappingException in NIC BoD flow
[nemo.git] / nemo-tools / sandbox / src / test / java / org / opendaylight / nemo / tool / sandbox / SandBoxManagerTest.java
1 /*
2  * Copyright (c) 2016 Huawei, 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 package org.opendaylight.nemo.tool.sandbox;
9
10 import junit.framework.Assert;
11 import junit.framework.TestCase;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import static org.junit.Assert.*;
16 import org.json.JSONObject;
17 import org.junit.runner.RunWith;
18 import org.opendaylight.nemo.tool.sandbox.models.*;
19 import org.opendaylight.nemo.tool.sandbox.utils.PropertyLoader;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 import java.lang.reflect.Field;
24 import java.lang.reflect.Method;
25 import java.util.ArrayList;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29 import org.powermock.api.mockito.PowerMockito;
30 import org.powermock.api.support.membermodification.MemberMatcher;
31 import org.powermock.api.support.membermodification.MemberModifier;
32 import org.powermock.core.classloader.annotations.PrepareForTest;
33 import org.powermock.modules.junit4.PowerMockRunner;
34
35 import static org.junit.Assert.assertTrue;
36 import static org.mockito.Mockito.*;
37 /**
38  * Created by zhangmeng on 2016/1/14.
39  */
40 @RunWith(PowerMockRunner.class)
41 @PrepareForTest(CmdExecutor.class)
42 public class SandBoxManagerTest extends TestCase {
43     private SandBoxManager sandBoxManager;
44     private Method method;
45     @Before
46     public void setUp() throws Exception {
47         sandBoxManager = SandBoxManager.getInstance();
48     }
49
50     @Test
51     public void testGetInstance() throws Exception {
52         sandBoxManager = SandBoxManager.getInstance();
53     }
54
55     @Test
56     public void testGets() throws Exception {
57         Field field = SandBoxManager.class.getDeclaredField("network");
58         field.setAccessible(true);
59
60         Network network = mock(Network.class);
61         JSONObject jsonObject = mock(JSONObject.class);
62
63         //no powermock and network=null
64         field.set(sandBoxManager, null);
65         org.junit.Assert.assertTrue(!sandBoxManager.createNetwork(null));
66         org.junit.Assert.assertTrue(!sandBoxManager.createNetwork());
67         org.junit.Assert.assertTrue(sandBoxManager.getHosts() == null);
68         org.junit.Assert.assertTrue(sandBoxManager.getExternals() == null);
69         org.junit.Assert.assertTrue(sandBoxManager.getSwitches() == null);
70         org.junit.Assert.assertTrue(sandBoxManager.getLinks() == null);
71         org.junit.Assert.assertTrue(sandBoxManager.destroyNetwork());
72
73         field.set(sandBoxManager, network);
74         PowerMockito.mockStatic(CmdExecutor.class);
75         PowerMockito.when(CmdExecutor.open()).thenReturn(true);
76         when(network.hostJsonNode()).thenReturn(jsonObject);
77         when(network.externalJsonNode()).thenReturn(jsonObject);
78         when(network.nodeJsonNode()).thenReturn(jsonObject);
79         when(network.innerLinkJsonNode()).thenReturn(jsonObject);
80         when(network.execute(any(String.class), any(String.class))).thenReturn("test");
81         org.junit.Assert.assertTrue(sandBoxManager.execute("1","1").equals("test"));
82         org.junit.Assert.assertTrue(sandBoxManager.getHosts() != null);
83         org.junit.Assert.assertTrue(sandBoxManager.getExternals() != null);
84         org.junit.Assert.assertTrue(sandBoxManager.getSwitches() != null);
85         org.junit.Assert.assertTrue(sandBoxManager.getLinks() != null);
86
87         org.junit.Assert.assertTrue(sandBoxManager.createNetwork(PropertyLoader.readLines("/Network", "Network file does not exist.")));
88         org.junit.Assert.assertTrue(sandBoxManager.createNetwork());
89         org.junit.Assert.assertTrue(sandBoxManager.destroyNetwork());
90     }
91     @Test
92     public void testGetNodeType() throws Exception {
93         method = SandBoxManager.class.getDeclaredMethod("getNodeType",new Class[]{String.class});
94         method.setAccessible(true);
95
96         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "Switch") == NodeType.SWITCH);
97         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "Router") == NodeType.ROUTER);
98         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "Cache") == NodeType.CACHE);
99         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "Firewall") == NodeType.FIREWALL);
100         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "Vm") == NodeType.VM);
101         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,"1") == NodeType.UNKNOWN);
102
103     }
104
105     @Test
106     public void testHandleLink() throws Exception {
107         method = SandBoxManager.class.getDeclaredMethod("handleLink",new Class[]{String.class});
108         method.setAccessible(true);
109
110         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, "12") == null);
111         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,"1,2,3,4,5") != null);
112     }
113
114     @Test
115     public void testSaveConnector() throws Exception {
116         method = SandBoxManager.class.getDeclaredMethod("saveConnector",new Class[]{
117                 Connector.class,
118                 Map.class
119         });
120         method.setAccessible(true);
121
122         Connector connector = mock(Connector.class);
123         Map<String, List<Connector>> connectorMap = mock(Map.class);
124
125         when(connector.getNodeName()).thenReturn("test");
126         when(connectorMap.containsKey(any(String.class)))
127                 .thenReturn(true)
128                 .thenReturn(false);
129         when(connectorMap.get(any(String.class))).thenReturn(mock(List.class));
130         method.invoke(sandBoxManager, connector, connectorMap);
131         method.invoke(sandBoxManager, connector, connectorMap);
132         verify(connectorMap,times(2)).containsKey(any(String.class));
133     }
134
135     @Test
136     public void testParserHost() throws Exception {
137         method = SandBoxManager.class.getDeclaredMethod("parserHost",new Class[]{
138                 String[].class,
139                 Map.class,
140                 Host.class
141         });
142         method.setAccessible(true);
143
144         String[] args = {"1","2","3","1:2"};
145         Map<String, List<Connector>> connectorMap = mock(Map.class);
146         Host host = mock(Host.class);
147         Connector connector = mock(Connector.class);
148         List<Connector> connectors = new ArrayList<Connector>();
149
150         connectors.add(connector);
151
152         when(host.getName()).thenReturn("test");
153         when(connectorMap.get(host.getName())).thenReturn(connectors);
154
155         method.invoke(sandBoxManager, args, connectorMap, host);
156         verify(host,times(2)).getName();
157     }
158
159     @Test
160     public void testHandleFirewall() throws Exception {
161         method = SandBoxManager.class.getDeclaredMethod("handleFirewall",new Class[]{
162                 String.class,
163                 Map.class
164         });
165         method.setAccessible(true);
166
167         String line = "test";
168         Map<String, List<Connector>> connectorMap = mock(Map.class);
169
170         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) == null);
171         line = "1,2,3,1:2";
172         when(connectorMap.get(any(String.class))).thenReturn(null);
173         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) != null);
174     }
175
176     @Test
177     public void testHandleCache() throws Exception {
178         method = SandBoxManager.class.getDeclaredMethod("handleCache",new Class[]{
179                 String.class,
180                 Map.class
181         });
182         method.setAccessible(true);
183
184         String line = "test";
185         Map<String, List<Connector>> connectorMap = mock(Map.class);
186
187         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) == null);
188         line = "1,2,3,1:2";
189         when(connectorMap.get(any(String.class))).thenReturn(null);
190         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) != null);
191
192     }
193
194     @Test
195     public void testHandleVirtualMachine() throws Exception {
196         method = SandBoxManager.class.getDeclaredMethod("handleVirtualMachine",new Class[]{
197                 String.class,
198                 Map.class
199         });
200         method.setAccessible(true);
201
202         String line = "test";
203         Map<String, List<Connector>> connectorMap = mock(Map.class);
204
205         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) == null);
206         line = "1,2,3,1:2";
207         when(connectorMap.get(any(String.class))).thenReturn(null);
208         org.junit.Assert.assertTrue(method.invoke(sandBoxManager,line,connectorMap) != null);
209     }
210
211     @Test
212     public void testHandleSwitch() throws Exception {
213         method = SandBoxManager.class.getDeclaredMethod("handleSwitch",new Class[]{
214                 String.class,
215                 Map.class
216         });
217         method.setAccessible(true);
218
219         List<Connector> connectorList = new ArrayList<Connector>();
220         Connector connector = mock(Connector.class);
221         String line = "test";
222         Map<String, List<Connector>> connectorMap = mock(Map.class);
223
224         connectorList.add(connector);
225
226         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, line, connectorMap) == null);
227         line = "Router,2,3";
228         when(connectorMap.get(any(String.class))).thenReturn(connectorList);
229         org.junit.Assert.assertTrue(method.invoke(sandBoxManager, line, connectorMap) != null);
230
231     }
232
233     @Test
234     public void testGenerateNetwork() throws Exception {
235         method = SandBoxManager.class.getDeclaredMethod("generateNetwork",new Class[]{List.class});
236         method.setAccessible(true);
237
238         List<String> list = new ArrayList<String>();
239         list.add("Switch");
240         method.invoke(sandBoxManager, list);
241         list.clear();
242         list.add("Vm");
243         method.invoke(sandBoxManager, list);
244         list.clear();
245         list.add("Cache");
246         method.invoke(sandBoxManager, list);
247         list.clear();
248         list.add("Firewall");
249         method.invoke(sandBoxManager, list);
250
251     }
252 }