blob: e25aae0d24fa907bd2e6c0d863d4e8ba5a99dee4 [file] [log] [blame]
xueliangf83fbc62016-09-16 10:55:28 +09001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.drivers.fujitsu;
18
19import org.apache.commons.io.IOUtils;
20import org.onlab.packet.IpAddress;
21import org.onosproject.net.Annotations;
22import org.onosproject.net.DefaultAnnotations;
23import org.onosproject.net.behaviour.ControllerInfo;
24import org.junit.Before;
25import org.junit.Test;
26
27import java.io.IOException;
28import java.util.ArrayList;
29import java.util.List;
30import java.util.HashMap;
31import java.util.Map;
32
33import java.nio.charset.StandardCharsets;
34import java.io.InputStream;
35
36import static org.junit.Assert.assertTrue;
37import static org.junit.Assert.fail;
38import static org.onosproject.drivers.fujitsu.FujitsuVoltXmlUtilityMock.*;
39
40
41/**
42 * Unit tests for methods of FujitsuVoltControllerConfig.
43 */
44public class FujitsuVoltControllerConfigTest {
45
46 private FujitsuNetconfControllerMock controller;
47 private FujitsuDriverHandlerAdapter driverHandler;
48 private FujitsuVoltControllerConfig voltConfig;
49
50 private final FujitsuNetconfSessionListenerTest listener = new InternalSessionListenerTest();
51
52 private static final String TEST_VOLT_OFCONFIG = "volt-ofconfig";
53 private static final String TEST_OFCONFIG_ID = "ofconfig-id";
54 private static final String TEST_END_LICENSE_HEADER = "-->";
55 private static final int FIRST_PART = 0;
56 private static final int SECOND_PART = 1;
57 private static final int THIRD_PART = 2;
58
59 private static final Map<Integer, String> GET_CONTROLLERS = new HashMap<Integer, String>() {
60 {
61 put(1, "tcp:172.10.10.45:6633");
62 put(2, "tcp:100.0.0.22:5555");
63 }
64 };
65 private static final Map<Integer, String> SET_CONTROLLERS = new HashMap<Integer, String>() {
66 {
67 put(1, "tcp:172.10.10.55:2222");
68 put(3, "tcp:172.20.33.11:6633");
69 }
70 };
71 private static final String GET_CONTROLLERS_RSP_FILE = "/getcontrollers.xml";
72 private static final String SET_CONTROLLERS_REQ_FILE = "/setcontrollers.xml";
73
74
75 @Before
76 public void setUp() throws Exception {
77 controller = new FujitsuNetconfControllerMock();
78 driverHandler = controller.setUp(listener);
79 voltConfig = new FujitsuVoltControllerConfig();
80 voltConfig.setHandler(driverHandler);
81 }
82
83 /**
84 * Run to verify handling of valid get operation.
85 */
86 @Test
87 public void testGetControllers() throws Exception {
88 List<ControllerInfo> controllers;
89 List<ControllerInfo> expectedControllers = new ArrayList<>();
90
91 for (Integer key : GET_CONTROLLERS.keySet()) {
92 String target = GET_CONTROLLERS.get(key);
93 String[] data = target.split(TEST_COLON);
94
95 Annotations annotations = DefaultAnnotations
96 .builder()
97 .set(TEST_OFCONFIG_ID, key.toString())
98 .build();
99 ControllerInfo controller = new ControllerInfo(
100 IpAddress.valueOf(data[SECOND_PART]),
101 Integer.parseInt(data[THIRD_PART]),
102 data[FIRST_PART], annotations);
103 expectedControllers.add(controller);
104 }
105
106 controllers = voltConfig.getControllers();
107 assertTrue("Incorrect response", controllers.equals(expectedControllers));
108 }
109
110 /**
111 * Run to verify handling of valid set operation.
112 */
113 @Test
114 public void testSetControllers() throws Exception {
115 List<ControllerInfo> controllers = new ArrayList<>();
116
117 for (Integer key : SET_CONTROLLERS.keySet()) {
118 String target = SET_CONTROLLERS.get(key);
119 String[] data = target.split(TEST_COLON);
120
121 Annotations annotations = DefaultAnnotations
122 .builder()
123 .set(TEST_OFCONFIG_ID, key.toString())
124 .build();
125 ControllerInfo controller = new ControllerInfo(
126 IpAddress.valueOf(data[SECOND_PART]),
127 Integer.parseInt(data[THIRD_PART]),
128 data[FIRST_PART], annotations);
129 controllers.add(controller);
130 }
131
132 voltConfig.setControllers(controllers);
133 }
134
135 /**
136 * Verifies XML request string by comparing with generated string.
137 *
138 * @param request XML string for set operation
139 * @return true if XML string matches with generated
140 */
141 private boolean verifyGetRequest(String request) {
142 StringBuilder rpc = new StringBuilder();
143 rpc.append(TEST_VOLT_NE_OPEN).append(TEST_VOLT_NE_NAMESPACE);
144 rpc.append(TEST_ANGLE_RIGHT).append(TEST_NEW_LINE);
145 rpc.append(emptyTag(TEST_VOLT_OFCONFIG));
146 rpc.append(endTag(TEST_VOLT_NE));
147
148 String testRequest = rpc.toString();
149 testRequest = testRequest.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
150 request = request.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
151 boolean result = request.equals(testRequest);
152 assertTrue("Does not match with generated string", result);
153 return result;
154 }
155
156 /**
157 * Verifies XML request string by comparing with generated string.
158 *
159 * @param request XML string for set operation
160 * @return true if XML string matches with generated
161 */
162 private boolean verifyEditConfigRequest(String request) {
163 String testRequest;
164
165 try {
166 InputStream fileStream = getClass().getResourceAsStream(
167 SET_CONTROLLERS_REQ_FILE);
168 testRequest = IOUtils.toString(fileStream, StandardCharsets.UTF_8);
169 testRequest = testRequest.substring(testRequest.indexOf(
170 TEST_END_LICENSE_HEADER) + TEST_END_LICENSE_HEADER.length());
171 } catch (IOException e) {
172 fail("IOException while reading: " + SET_CONTROLLERS_REQ_FILE);
173 return false;
174 }
175
176 testRequest = testRequest.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
177 request = request.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
178 boolean result = request.equals(testRequest);
179 assertTrue("Does not match with string in " + SET_CONTROLLERS_REQ_FILE, result);
180
181 return result;
182 }
183
184 /**
185 * Internal listener for device service events.
186 */
187 private class InternalSessionListenerTest implements FujitsuNetconfSessionListenerTest {
188 @Override
189 public boolean verifyEditConfig(String request) {
190 boolean result;
191
192 request = request.replaceAll(TEST_DUPLICATE_SPACES_REGEX, TEST_SPACE);
193 assertTrue("Does not contain:" + TEST_VOLT_NAMESPACE,
194 request.contains(TEST_VOLT_NAMESPACE));
195
196 result = verifyEditConfigRequest(request);
197 assertTrue("XML verification failure", result);
198 return result;
199 }
200
201 @Override
202 public boolean verifyEditConfig(String target, String mode, String request) {
203 return false;
204 }
205
206 @Override
207 public boolean verifyGet(String filterSchema, String withDefaultsMode) {
208 boolean result;
209
210 assertTrue("Incorrect withDefaultsMode",
211 withDefaultsMode.equals(TEST_REPORT_ALL));
212 filterSchema = filterSchema.replaceAll(TEST_DUPLICATE_SPACES_REGEX, TEST_SPACE);
213 assertTrue("Does not contain:" + TEST_VOLT_NAMESPACE,
214 filterSchema.contains(TEST_VOLT_NAMESPACE));
215
216 result = verifyGetRequest(filterSchema);
217 assertTrue("XML verification failure", result);
218 return result;
219 }
220
221 @Override
222 public String buildGetReply() {
223 try {
224 InputStream fileStream = getClass().getResourceAsStream(
225 GET_CONTROLLERS_RSP_FILE);
226 String reply = IOUtils.toString(fileStream, StandardCharsets.UTF_8);
227 return (reply);
228 } catch (IOException e) {
229 return null;
230 }
231 }
232
233 @Override
234 public boolean verifyWrappedRpc(String request) {
235 return false;
236 }
237
238 @Override
239 public void verifyStartSubscription(String filterSchema) {
240 }
241 }
242
243}