xueliang
Committed by Gerrit Code Review

[ONOS-5295] JUNIT Test cases for volt-onus, volt-setonu and volt-onustats as FUJ…

…ITSU NETCONF commands

Change-Id: I8f80bc651adf2bfbfa7ce8587e03b1373222f37a
...@@ -40,9 +40,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -40,9 +40,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
40 implements VoltOnuConfig { 40 implements VoltOnuConfig {
41 41
42 private final Logger log = getLogger(FujitsuVoltOnuConfig.class); 42 private final Logger log = getLogger(FujitsuVoltOnuConfig.class);
43 - private final Set<String> onuConfigParams = ImmutableSet.of( 43 + private static final String ADMIN_STATE = "admin-state";
44 - "admin-state", "pm-enable", "fec-enable", 44 + private static final String PASSWORD = "password";
45 - "security-enable", "password"); 45 + private static final Set<String> ONUCONFIGPARAMS =
46 + ImmutableSet.of(ADMIN_STATE, "pm-enable", "fec-enable", "security-enable", PASSWORD);
47 + private static final Set<String> ADMINSTATES =
48 + ImmutableSet.of("enable", "disable");
49 + private static final Set<String> ENABLES =
50 + ImmutableSet.of("true", "false");
46 private static final String VOLT_ONUS = "volt-onus"; 51 private static final String VOLT_ONUS = "volt-onus";
47 private static final String ONUS_PERLINK = "onus-perlink"; 52 private static final String ONUS_PERLINK = "onus-perlink";
48 private static final String ONUS_LIST = "onus-list"; 53 private static final String ONUS_LIST = "onus-list";
...@@ -55,9 +60,7 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -55,9 +60,7 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
55 private static final String ETH_STATS = "eth-stats"; 60 private static final String ETH_STATS = "eth-stats";
56 private static final String ONU_GEM_STATS = "onu-gem-stats"; 61 private static final String ONU_GEM_STATS = "onu-gem-stats";
57 private static final String GEM_STATS = "gem-stats"; 62 private static final String GEM_STATS = "gem-stats";
58 - private int pon; 63 + private static final String PASSWORD_PATTERN = "^[a-zA-Z0-9]+$";
59 - private int onu;
60 -
61 64
62 @Override 65 @Override
63 public String getOnus(String target) { 66 public String getOnus(String target) {
...@@ -73,23 +76,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -73,23 +76,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
73 log.warn("Not master for {} Use {} to execute command", 76 log.warn("Not master for {} Use {} to execute command",
74 ncDeviceId, 77 ncDeviceId,
75 mastershipService.getMasterFor(ncDeviceId)); 78 mastershipService.getMasterFor(ncDeviceId));
76 - return reply; 79 + return null;
77 } 80 }
78 81
79 if (target != null) { 82 if (target != null) {
80 - onuId = target.split(HYPHEN); 83 + onuId = checkIdString(target);
81 - if (onuId.length > 2) { 84 + if (onuId == null) {
82 - log.error("Invalid number of arguments"); 85 + log.error("Invalid ONU identifier {}", target);
83 - return reply; 86 + return null;
84 - }
85 - try {
86 - pon = Integer.parseInt(onuId[0]);
87 - if (onuId.length > 1) {
88 - onu = Integer.parseInt(onuId[1]);
89 - }
90 - } catch (NumberFormatException e) {
91 - log.error("Non-number input");
92 - return reply;
93 } 87 }
94 } 88 }
95 89
...@@ -101,13 +95,13 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -101,13 +95,13 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
101 request.append(buildStartTag(VOLT_ONUS)); 95 request.append(buildStartTag(VOLT_ONUS));
102 request.append(buildStartTag(ONUS_PERLINK)); 96 request.append(buildStartTag(ONUS_PERLINK));
103 request.append(buildStartTag(PONLINK_ID, false)); 97 request.append(buildStartTag(PONLINK_ID, false));
104 - request.append(onuId[0]); 98 + request.append(onuId[FIRST_PART]);
105 request.append(buildEndTag(PONLINK_ID)); 99 request.append(buildEndTag(PONLINK_ID));
106 - if (onuId.length > 1) { 100 + if (onuId.length > ONE) {
107 request.append(buildStartTag(ONUS_LIST)); 101 request.append(buildStartTag(ONUS_LIST));
108 request.append(buildStartTag(ONU_INFO)); 102 request.append(buildStartTag(ONU_INFO));
109 request.append(buildStartTag(ONU_ID, false)); 103 request.append(buildStartTag(ONU_ID, false));
110 - request.append(onuId[1]); 104 + request.append(onuId[SECOND_PART]);
111 request.append(buildEndTag(ONU_ID)); 105 request.append(buildEndTag(ONU_ID));
112 request.append(buildEndTag(ONU_INFO)); 106 request.append(buildEndTag(ONU_INFO));
113 request.append(buildEndTag(ONUS_LIST)); 107 request.append(buildEndTag(ONUS_LIST));
...@@ -119,11 +113,13 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -119,11 +113,13 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
119 } 113 }
120 request.append(VOLT_NE_CLOSE); 114 request.append(VOLT_NE_CLOSE);
121 115
122 - reply = controller. 116 + reply = controller
123 - getDevicesMap().get(ncDeviceId).getSession(). 117 + .getDevicesMap()
124 - get(request.toString(), REPORT_ALL); 118 + .get(ncDeviceId)
119 + .getSession()
120 + .get(request.toString(), REPORT_ALL);
125 } catch (IOException e) { 121 } catch (IOException e) {
126 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 122 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
127 } 123 }
128 return reply; 124 return reply;
129 } 125 }
...@@ -141,32 +137,25 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -141,32 +137,25 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
141 log.warn("Not master for {} Use {} to execute command", 137 log.warn("Not master for {} Use {} to execute command",
142 ncDeviceId, 138 ncDeviceId,
143 mastershipService.getMasterFor(ncDeviceId)); 139 mastershipService.getMasterFor(ncDeviceId));
144 - return reply; 140 + return null;
145 } 141 }
146 142
147 String[] data = target.split(COLON); 143 String[] data = target.split(COLON);
148 - if (data.length != 3) { 144 + if (data.length != THREE) {
149 log.error("Invalid number of arguments"); 145 log.error("Invalid number of arguments");
150 - return reply; 146 + return null;
151 - }
152 -
153 - String[] onuId = data[0].split(HYPHEN);
154 - if (onuId.length != 2) {
155 - log.error("Invalid ONU identifier");
156 - return reply;
157 } 147 }
158 148
159 - try { 149 + String[] onuId = checkIdString(data[FIRST_PART]);
160 - pon = Integer.parseInt(onuId[0]); 150 + if ((onuId == null) || (onuId.length != TWO)) {
161 - onu = Integer.parseInt(onuId[1]); 151 + log.error("Invalid ONU identifier {}", target);
162 - } catch (NumberFormatException e) { 152 + return null;
163 - log.error("Non-number input");
164 - return reply;
165 } 153 }
166 154
167 - if (!onuConfigParams.contains(data[1])) { 155 + if (!checkSetParam(data[SECOND_PART],
168 - log.error("Unsupported parameter: " + data[1]); 156 + data[THIRD_PART])) {
169 - return reply; 157 + log.error("Failed to check input {}", target);
158 + return null;
170 } 159 }
171 160
172 try { 161 try {
...@@ -174,23 +163,25 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -174,23 +163,25 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
174 request.append(ANGLE_LEFT).append(ONU_SET_CONFIG).append(SPACE); 163 request.append(ANGLE_LEFT).append(ONU_SET_CONFIG).append(SPACE);
175 request.append(VOLT_NE_NAMESPACE).append(ANGLE_RIGHT).append(NEW_LINE); 164 request.append(VOLT_NE_NAMESPACE).append(ANGLE_RIGHT).append(NEW_LINE);
176 request.append(buildStartTag(PONLINK_ID, false)); 165 request.append(buildStartTag(PONLINK_ID, false));
177 - request.append(onuId[0]); 166 + request.append(onuId[FIRST_PART]);
178 request.append(buildEndTag(PONLINK_ID)); 167 request.append(buildEndTag(PONLINK_ID));
179 request.append(buildStartTag(ONU_ID, false)); 168 request.append(buildStartTag(ONU_ID, false));
180 - request.append(onuId[1]); 169 + request.append(onuId[SECOND_PART]);
181 request.append(buildEndTag(ONU_ID)); 170 request.append(buildEndTag(ONU_ID));
182 request.append(buildStartTag(CONFIG_INFO)); 171 request.append(buildStartTag(CONFIG_INFO));
183 - request.append(buildStartTag(data[1], false)); 172 + request.append(buildStartTag(data[SECOND_PART], false));
184 - request.append(data[2]); 173 + request.append(data[THIRD_PART]);
185 - request.append(buildEndTag(data[1])); 174 + request.append(buildEndTag(data[SECOND_PART]));
186 request.append(buildEndTag(CONFIG_INFO)); 175 request.append(buildEndTag(CONFIG_INFO));
187 request.append(buildEndTag(ONU_SET_CONFIG)); 176 request.append(buildEndTag(ONU_SET_CONFIG));
188 177
189 - reply = controller. 178 + reply = controller
190 - getDevicesMap().get(ncDeviceId).getSession(). 179 + .getDevicesMap()
191 - doWrappedRpc(request.toString()); 180 + .get(ncDeviceId)
181 + .getSession()
182 + .doWrappedRpc(request.toString());
192 } catch (IOException e) { 183 } catch (IOException e) {
193 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 184 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
194 } 185 }
195 return reply; 186 return reply;
196 } 187 }
...@@ -209,23 +200,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -209,23 +200,14 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
209 log.warn("Not master for {} Use {} to execute command", 200 log.warn("Not master for {} Use {} to execute command",
210 ncDeviceId, 201 ncDeviceId,
211 mastershipService.getMasterFor(ncDeviceId)); 202 mastershipService.getMasterFor(ncDeviceId));
212 - return reply; 203 + return null;
213 } 204 }
214 205
215 if (target != null) { 206 if (target != null) {
216 - onuId = target.split(HYPHEN); 207 + onuId = checkIdString(target);
217 - if (onuId.length > 2) { 208 + if (onuId == null) {
218 - log.error("Invalid number of arguments:" + onuId.length); 209 + log.error("Failed to check ID: {}", target);
219 - return reply; 210 + return null;
220 - }
221 - try {
222 - pon = Integer.parseInt(onuId[0]);
223 - if (onuId.length > 1) {
224 - onu = Integer.parseInt(onuId[1]);
225 - }
226 - } catch (NumberFormatException e) {
227 - log.error("Non-number input");
228 - return reply;
229 } 211 }
230 } 212 }
231 213
...@@ -239,11 +221,11 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -239,11 +221,11 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
239 request.append(buildStartTag(ONU_GEM_STATS)); 221 request.append(buildStartTag(ONU_GEM_STATS));
240 request.append(buildStartTag(GEM_STATS)); 222 request.append(buildStartTag(GEM_STATS));
241 request.append(buildStartTag(PONLINK_ID, false)); 223 request.append(buildStartTag(PONLINK_ID, false));
242 - request.append(onuId[0]); 224 + request.append(onuId[FIRST_PART]);
243 request.append(buildEndTag(PONLINK_ID)); 225 request.append(buildEndTag(PONLINK_ID));
244 - if (onuId.length > 1) { 226 + if (onuId.length > ONE) {
245 request.append(buildStartTag(ONU_ID, false)); 227 request.append(buildStartTag(ONU_ID, false));
246 - request.append(onuId[1]); 228 + request.append(onuId[SECOND_PART]);
247 request.append(buildEndTag(ONU_ID)); 229 request.append(buildEndTag(ONU_ID));
248 } 230 }
249 request.append(buildEndTag(GEM_STATS)); 231 request.append(buildEndTag(GEM_STATS));
...@@ -252,30 +234,119 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour ...@@ -252,30 +234,119 @@ public class FujitsuVoltOnuConfig extends AbstractHandlerBehaviour
252 request.append(buildStartTag(ONU_ETH_STATS)); 234 request.append(buildStartTag(ONU_ETH_STATS));
253 request.append(buildStartTag(ETH_STATS)); 235 request.append(buildStartTag(ETH_STATS));
254 request.append(buildStartTag(PONLINK_ID, false)); 236 request.append(buildStartTag(PONLINK_ID, false));
255 - request.append(onuId[0]); 237 + request.append(onuId[FIRST_PART]);
256 request.append(buildEndTag(PONLINK_ID)); 238 request.append(buildEndTag(PONLINK_ID));
257 - if (onuId.length > 1) { 239 + if (onuId.length > ONE) {
258 request.append(buildStartTag(ONU_ID, false)); 240 request.append(buildStartTag(ONU_ID, false));
259 - request.append(onuId[1]); 241 + request.append(onuId[SECOND_PART]);
260 request.append(buildEndTag(ONU_ID)); 242 request.append(buildEndTag(ONU_ID));
261 } 243 }
262 request.append(buildEndTag(ETH_STATS)); 244 request.append(buildEndTag(ETH_STATS));
263 request.append(buildEndTag(ONU_ETH_STATS)); 245 request.append(buildEndTag(ONU_ETH_STATS));
264 -
265 request.append(buildEndTag(ONU_STATISTICS)); 246 request.append(buildEndTag(ONU_STATISTICS));
266 - } else { 247 + } else {
267 request.append(buildEmptyTag(ONU_STATISTICS)); 248 request.append(buildEmptyTag(ONU_STATISTICS));
268 } 249 }
269 request.append(buildEndTag(VOLT_STATISTICS)); 250 request.append(buildEndTag(VOLT_STATISTICS));
270 request.append(VOLT_NE_CLOSE); 251 request.append(VOLT_NE_CLOSE);
271 252
272 - reply = controller. 253 + reply = controller
273 - getDevicesMap().get(ncDeviceId).getSession(). 254 + .getDevicesMap()
274 - get(request.toString(), REPORT_ALL); 255 + .get(ncDeviceId)
256 + .getSession()
257 + .get(request.toString(), REPORT_ALL);
275 } catch (IOException e) { 258 } catch (IOException e) {
276 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 259 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
277 } 260 }
278 return reply; 261 return reply;
279 } 262 }
280 263
264 + /**
265 + * Verifies input string for ponlink-id{-onu-id}.
266 + *
267 + * @param target input data in string
268 + * @return String array
269 + * @return null if an error condition is detected
270 + */
271 + private String[] checkIdString(String target) {
272 + String[] onuId = target.split(HYPHEN);
273 + int pon;
274 + int onu;
275 +
276 + if (onuId.length > TWO) {
277 + log.error("Invalid number of arguments for id:{}", onuId.length);
278 + return null;
279 + }
280 + try {
281 + pon = Integer.parseInt(onuId[FIRST_PART]);
282 + if (pon <= ZERO) {
283 + log.error("Invalid integer for ponlink-id:{}", onuId[FIRST_PART]);
284 + return null;
285 + }
286 + if (onuId.length > ONE) {
287 + onu = Integer.parseInt(onuId[SECOND_PART]);
288 + if (onu <= ZERO) {
289 + log.error("Invalid integer for onu-id:{}", onuId[SECOND_PART]);
290 + return null;
291 + }
292 + }
293 + } catch (NumberFormatException e) {
294 + log.error("Non-number input for id:{}", target);
295 + return null;
296 + }
297 + return onuId;
298 + }
299 +
300 + /**
301 + * Verifies input string for valid options.
302 + *
303 + * @param name input data in string
304 + * @param value input data in string
305 + * @return true if the parameter is valid
306 + * @return false if the parameter is invalid
307 + */
308 + private boolean checkSetParam(String name, String value) {
309 + if (!ONUCONFIGPARAMS.contains(name)) {
310 + log.error("Unsupported parameter: {}", name);
311 + return false;
312 + }
313 +
314 + switch (name) {
315 + case ADMIN_STATE:
316 + if (!validState(ADMINSTATES, name, value)) {
317 + return false;
318 + }
319 + break;
320 + case PASSWORD:
321 + if (!value.matches(PASSWORD_PATTERN)) {
322 + log.error("Invalid value for Name {} : Value {}.", name, value);
323 + return false;
324 + }
325 + break;
326 + default:
327 + if (!validState(ENABLES, name, value)) {
328 + return false;
329 + }
330 + break;
331 + }
332 + return true;
333 + }
334 +
335 + /**
336 + * Verifies input string for valid options.
337 + *
338 + * @param states input data in string for parameter state
339 + * @param name input data in string for parameter name
340 + * @param value input data in string for parameter value
341 + * @return true if the param is valid
342 + * @return false if the param is invalid
343 + */
344 + private boolean validState(Set<String> states, String name, String value) {
345 + if (!states.contains(value)) {
346 + log.error("Invalid value for Name {} : Value {}.", name, value);
347 + return false;
348 + }
349 + return true;
350 + }
351 +
281 } 352 }
......
...@@ -79,13 +79,8 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -79,13 +79,8 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
79 private static final int LOF_THRESHOLD_MAX = 10; 79 private static final int LOF_THRESHOLD_MAX = 10;
80 private static final int LOS_THRESHOLD_MIN = 1; 80 private static final int LOS_THRESHOLD_MIN = 1;
81 private static final int LOS_THRESHOLD_MAX = 10; 81 private static final int LOS_THRESHOLD_MAX = 10;
82 - private static final int FIRST_PART = 0;
83 - private static final int SECOND_PART = 1;
84 - private static final int THIRD_PART = 2;
85 private static final int RANGE_MIN = 0; 82 private static final int RANGE_MIN = 0;
86 private static final int RANGE_MAX = 1; 83 private static final int RANGE_MAX = 1;
87 - private static final int ZERO = 0;
88 - private static final int THREE = 3;
89 84
90 @Override 85 @Override
91 public String getPonLinks(String target) { 86 public String getPonLinks(String target) {
...@@ -100,7 +95,7 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -100,7 +95,7 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
100 log.warn("Not master for {} Use {} to execute command", 95 log.warn("Not master for {} Use {} to execute command",
101 ncDeviceId, 96 ncDeviceId,
102 mastershipService.getMasterFor(ncDeviceId)); 97 mastershipService.getMasterFor(ncDeviceId));
103 - return reply; 98 + return null;
104 } 99 }
105 100
106 try { 101 try {
...@@ -114,11 +109,11 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -114,11 +109,11 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
114 pon = Integer.parseInt(target); 109 pon = Integer.parseInt(target);
115 if (pon <= ZERO) { 110 if (pon <= ZERO) {
116 log.error("Invalid integer for ponlink-id:{}", target); 111 log.error("Invalid integer for ponlink-id:{}", target);
117 - return reply; 112 + return null;
118 } 113 }
119 } catch (NumberFormatException e) { 114 } catch (NumberFormatException e) {
120 log.error("Non-number input for ponlink-id:{}", target); 115 log.error("Non-number input for ponlink-id:{}", target);
121 - return reply; 116 + return null;
122 } 117 }
123 request.append(buildStartTag(GPON_PONLINK_PORTS)); 118 request.append(buildStartTag(GPON_PONLINK_PORTS));
124 request.append(buildStartTag(GPON_PONLINK_PORT)); 119 request.append(buildStartTag(GPON_PONLINK_PORT));
......
...@@ -42,6 +42,14 @@ public final class FujitsuVoltXmlUtility { ...@@ -42,6 +42,14 @@ public final class FujitsuVoltXmlUtility {
42 public static final String VOLT_NE_OPEN = ANGLE_LEFT + VOLT_NE + SPACE; 42 public static final String VOLT_NE_OPEN = ANGLE_LEFT + VOLT_NE + SPACE;
43 public static final String VOLT_NE_CLOSE = ANGLE_LEFT + SLASH + VOLT_NE + ANGLE_RIGHT; 43 public static final String VOLT_NE_CLOSE = ANGLE_LEFT + SLASH + VOLT_NE + ANGLE_RIGHT;
44 44
45 + public static final int FIRST_PART = 0;
46 + public static final int SECOND_PART = 1;
47 + public static final int THIRD_PART = 2;
48 + public static final int ZERO = 0;
49 + public static final int ONE = 1;
50 + public static final int TWO = 2;
51 + public static final int THREE = 3;
52 +
45 private FujitsuVoltXmlUtility() { 53 private FujitsuVoltXmlUtility() {
46 // Preventing any allocation 54 // Preventing any allocation
47 } 55 }
......
...@@ -52,9 +52,6 @@ public class FujitsuVoltControllerConfigTest { ...@@ -52,9 +52,6 @@ public class FujitsuVoltControllerConfigTest {
52 private static final String TEST_VOLT_OFCONFIG = "volt-ofconfig"; 52 private static final String TEST_VOLT_OFCONFIG = "volt-ofconfig";
53 private static final String TEST_OFCONFIG_ID = "ofconfig-id"; 53 private static final String TEST_OFCONFIG_ID = "ofconfig-id";
54 private static final String TEST_END_LICENSE_HEADER = "-->"; 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 55
59 private static final Map<Integer, String> GET_CONTROLLERS = new HashMap<Integer, String>() { 56 private static final Map<Integer, String> GET_CONTROLLERS = new HashMap<Integer, String>() {
60 { 57 {
......
1 +/*
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 +
17 +package org.onosproject.drivers.fujitsu;
18 +
19 +import org.junit.Before;
20 +import org.junit.Test;
21 +
22 +import java.util.HashMap;
23 +import java.util.Map;
24 +
25 +import static org.junit.Assert.assertTrue;
26 +import static org.junit.Assert.assertNull;
27 +import static org.junit.Assert.assertNotNull;
28 +import static org.onosproject.drivers.fujitsu.FujitsuVoltXmlUtilityMock.*;
29 +
30 +
31 +/**
32 + * Unit tests for methods of FujitsuVoltOnuConfig.
33 + */
34 +public class FujitsuVoltOnuConfigTest {
35 +
36 + private FujitsuNetconfControllerMock controller;
37 + private FujitsuDriverHandlerAdapter driverHandler;
38 + private FujitsuVoltOnuConfig voltConfig;
39 +
40 + private final FujitsuNetconfSessionListenerTest listener = new InternalSessionListenerTest();
41 +
42 + private static final String TEST_VOLT_ONUS = "volt-onus";
43 + private static final String TEST_ONUS_PERLINK = "onus-perlink";
44 + private static final String TEST_ONUS_LIST = "onus-list";
45 + private static final String TEST_ONU_INFO = "onu-info";
46 + private static final String TEST_ONU_SET_CONFIG = "onu-set-config";
47 + private static final String TEST_CONFIG_INFO = "config-info";
48 + private static final String TEST_VOLT_STATISTICS = "volt-statistics";
49 + private static final String TEST_ONU_STATISTICS = "onu-statistics";
50 + private static final String TEST_ONU_ETH_STATS = "onu-eth-stats";
51 + private static final String TEST_ETH_STATS = "eth-stats";
52 + private static final String TEST_ONU_GEM_STATS = "onu-gem-stats";
53 + private static final String TEST_GEM_STATS = "gem-stats";
54 +
55 + private static final String TEST_ONU_SET_CONFIG_WITH_NAMESPACE =
56 + TEST_ANGLE_LEFT + TEST_ONU_SET_CONFIG + TEST_SPACE +
57 + TEST_VOLT_NE_NAMESPACE;
58 +
59 + private static final Map<Integer, String> INVALID_GET_TCS = new HashMap<Integer, String>() {
60 + {
61 + put(1, "a-b");
62 + put(2, "--1-2");
63 + put(3, "s-1");
64 + put(4, "16-1-1");
65 + put(5, "1 A-1");
66 + put(6, "1*A-1");
67 + }
68 + };
69 + private static final Map<Integer, String> VALID_GET_TCS = new HashMap<Integer, String>() {
70 + {
71 + put(1, "1");
72 + put(2, "1-2");
73 + put(3, null);
74 + }
75 + };
76 + private static final Map<Integer, String> INVALID_SET_TCS = new HashMap<Integer, String>() {
77 + {
78 + put(1, "-11-3:admin-state:enable");
79 + put(2, "1-2:admin-state:false");
80 + put(3, "1-2:pm-enable:123");
81 + put(4, "^1-2:pm-enable:false");
82 + put(5, "1-2:fec-enable:xyz");
83 + put(6, "1-2:security-enable:123abc");
84 + put(7, "2-3:password:-1&");
85 + put(8, "2:admin-state:disable");
86 + }
87 + };
88 + private static final Map<Integer, String> VALID_SET_TCS = new HashMap<Integer, String>() {
89 + {
90 + put(1, "1-11:admin-state:disable");
91 + put(2, "8-1:pm-enable:true");
92 + put(3, "1-1:fec-enable:true");
93 + put(4, "1-21:security-enable:false");
94 + put(5, "3-2:password:abc123");
95 + }
96 + };
97 + private static final Map<Integer, String> INVALID_GET_STATS_TCS = new HashMap<Integer, String>() {
98 + {
99 + put(1, "1-a");
100 + put(2, "1:1");
101 + put(3, "a-1");
102 + put(4, "1-1-1");
103 + put(5, "2 A-1");
104 + put(6, "2/A-1");
105 + }
106 + };
107 + private static final Map<Integer, String> VALID_GET_STATS_TCS = new HashMap<Integer, String>() {
108 + {
109 + put(1, "1");
110 + put(2, "3-12");
111 + put(3, null);
112 + }
113 + };
114 + private Integer currentKey;
115 +
116 +
117 + @Before
118 + public void setUp() throws Exception {
119 + controller = new FujitsuNetconfControllerMock();
120 + driverHandler = controller.setUp(listener);
121 + voltConfig = new FujitsuVoltOnuConfig();
122 + voltConfig.setHandler(driverHandler);
123 + }
124 +
125 + /**
126 + * Run to verify handling of invalid input for get operation.
127 + */
128 + @Test
129 + public void testInvalidGetOnusInput() throws Exception {
130 + String reply;
131 + String target;
132 +
133 + for (Integer key : INVALID_GET_TCS.keySet()) {
134 + target = INVALID_GET_TCS.get(key);
135 + reply = voltConfig.getOnus(target);
136 + assertNull("Incorrect response for " + target, reply);
137 + }
138 + }
139 +
140 + /**
141 + * Run to verify handling of valid input for get operation.
142 + */
143 + @Test
144 + public void testValidGetOnus() throws Exception {
145 + String reply;
146 + String target;
147 +
148 + for (Integer key : VALID_GET_TCS.keySet()) {
149 + target = VALID_GET_TCS.get(key);
150 + currentKey = key;
151 + reply = voltConfig.getOnus(target);
152 + assertNotNull("Incorrect response for " + target, reply);
153 + }
154 + }
155 +
156 + /**
157 + * Run to verify handling of invalid input for set operation.
158 + */
159 + @Test
160 + public void testInvalidSetOnuInput() throws Exception {
161 + String target;
162 + String reply;
163 +
164 + for (Integer key : INVALID_SET_TCS.keySet()) {
165 + target = INVALID_SET_TCS.get(key);
166 + reply = voltConfig.setOnu(target);
167 + assertNull("Incorrect response for " + target, reply);
168 + }
169 + }
170 +
171 + /**
172 + * Run to verify handling of valid input for set operation.
173 + */
174 + @Test
175 + public void testValidSetOnu() throws Exception {
176 + String target;
177 + String reply;
178 +
179 + for (Integer key : VALID_SET_TCS.keySet()) {
180 + target = VALID_SET_TCS.get(key);
181 + currentKey = key;
182 + reply = voltConfig.setOnu(target);
183 + assertNotNull("Incorrect response for " + target, reply);
184 + }
185 + }
186 +
187 + /**
188 + * Run to verify handling of invalid input for get statistics operation.
189 + */
190 + @Test
191 + public void testInvalidGetOnuStatsInput() throws Exception {
192 + String reply;
193 + String target;
194 +
195 + for (Integer key : INVALID_GET_STATS_TCS.keySet()) {
196 + target = INVALID_GET_STATS_TCS.get(key);
197 + reply = voltConfig.getOnuStatistics(target);
198 + assertNull("Incorrect response for " + target, reply);
199 + }
200 + }
201 +
202 + /**
203 + * Run to verify handling of valid input for get statistics operation.
204 + */
205 + @Test
206 + public void testValidGetOnuStats() throws Exception {
207 + String reply;
208 + String target;
209 +
210 + for (Integer key : VALID_GET_STATS_TCS.keySet()) {
211 + target = VALID_GET_STATS_TCS.get(key);
212 + currentKey = key;
213 + reply = voltConfig.getOnuStatistics(target);
214 + assertNotNull("Incorrect response for " + target, reply);
215 + }
216 + }
217 +
218 + /**
219 + * Verifies XML request string by comparing with generated string.
220 + *
221 + * @param request XML string for get operation
222 + * @return true if XML string matches with generated
223 + */
224 + private boolean verifyGetRequest(String request) {
225 + StringBuilder rpc = new StringBuilder();
226 + String target = VALID_GET_TCS.get(currentKey);
227 + String[] onuId = null;
228 +
229 + if (target != null) {
230 + onuId = target.split(TEST_HYPHEN);
231 + }
232 +
233 + rpc.append(TEST_VOLT_NE_OPEN).append(TEST_VOLT_NE_NAMESPACE);
234 + rpc.append(TEST_ANGLE_RIGHT).append(TEST_NEW_LINE);
235 + if (onuId != null) {
236 + rpc.append(startTag(TEST_VOLT_ONUS));
237 + rpc.append(startTag(TEST_ONUS_PERLINK));
238 + rpc.append(startTag(TEST_PONLINK_ID, false));
239 + rpc.append(onuId[FIRST_PART]);
240 + rpc.append(endTag(TEST_PONLINK_ID));
241 + if (onuId.length > ONE) {
242 + rpc.append(startTag(TEST_ONUS_LIST));
243 + rpc.append(startTag(TEST_ONU_INFO));
244 + rpc.append(startTag(TEST_ONU_ID, false));
245 + rpc.append(onuId[SECOND_PART]);
246 + rpc.append(endTag(TEST_ONU_ID));
247 + rpc.append(endTag(TEST_ONU_INFO));
248 + rpc.append(endTag(TEST_ONUS_LIST));
249 + }
250 + rpc.append(endTag(TEST_ONUS_PERLINK));
251 + rpc.append(endTag(TEST_VOLT_ONUS));
252 + } else {
253 + rpc.append(emptyTag(TEST_VOLT_ONUS));
254 + }
255 + rpc.append(TEST_VOLT_NE_CLOSE);
256 +
257 + String testRequest = rpc.toString();
258 + testRequest = testRequest.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
259 + request = request.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
260 + boolean result = request.equals(testRequest);
261 + assertTrue("Does not match with generated string", result);
262 + return result;
263 + }
264 +
265 + /**
266 + * Verifies XML request string by comparing with generated string.
267 + *
268 + * @param request XML string for set operation
269 + * @return true or false
270 + */
271 + private boolean verifyWrappedRpcRequest(String request) {
272 + StringBuilder rpc = new StringBuilder();
273 + String target = VALID_SET_TCS.get(currentKey);
274 + String[] data = target.split(TEST_COLON);
275 + String[] onuId = data[FIRST_PART].split(TEST_HYPHEN);
276 +
277 + rpc.append(TEST_ANGLE_LEFT).append(TEST_ONU_SET_CONFIG).append(TEST_SPACE);
278 + rpc.append(TEST_VOLT_NE_NAMESPACE).append(TEST_ANGLE_RIGHT).append(TEST_NEW_LINE);
279 + rpc.append(startTag(TEST_PONLINK_ID, false));
280 + rpc.append(onuId[FIRST_PART]);
281 + rpc.append(endTag(TEST_PONLINK_ID));
282 + rpc.append(startTag(TEST_ONU_ID, false));
283 + rpc.append(onuId[SECOND_PART]);
284 + rpc.append(endTag(TEST_ONU_ID));
285 + rpc.append(startTag(TEST_CONFIG_INFO));
286 + rpc.append(startTag(data[SECOND_PART], false));
287 + rpc.append(data[THIRD_PART]);
288 + rpc.append(endTag(data[SECOND_PART]));
289 + rpc.append(endTag(TEST_CONFIG_INFO));
290 + rpc.append(endTag(TEST_ONU_SET_CONFIG));
291 +
292 + String testRequest = rpc.toString();
293 + testRequest = testRequest.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
294 + request = request.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
295 + boolean result = request.equals(testRequest);
296 + assertTrue("Does not match with generated string", result);
297 + return result;
298 + }
299 +
300 + /**
301 + * Verifies XML request string by comparing with generated string (statistics).
302 + *
303 + * @param request XML string for get operation
304 + * @return true if XML string matches with generated
305 + */
306 + private boolean verifyGetRequestForStats(String request) {
307 + StringBuilder rpc = new StringBuilder();
308 + String target = VALID_GET_STATS_TCS.get(currentKey);
309 + String[] onuId = null;
310 +
311 + if (target != null) {
312 + onuId = target.split(TEST_HYPHEN);
313 + }
314 +
315 + rpc.append(TEST_VOLT_NE_OPEN).append(TEST_VOLT_NE_NAMESPACE);
316 + rpc.append(TEST_ANGLE_RIGHT).append(TEST_NEW_LINE);
317 + rpc.append(startTag(TEST_VOLT_STATISTICS));
318 + if (onuId != null) {
319 + rpc.append(startTag(TEST_ONU_STATISTICS));
320 + rpc.append(startTag(TEST_ONU_GEM_STATS));
321 + rpc.append(startTag(TEST_GEM_STATS));
322 + rpc.append(startTag(TEST_PONLINK_ID, false));
323 + rpc.append(onuId[FIRST_PART]);
324 + rpc.append(endTag(TEST_PONLINK_ID));
325 + if (onuId.length > ONE) {
326 + rpc.append(startTag(TEST_ONU_ID, false));
327 + rpc.append(onuId[SECOND_PART]);
328 + rpc.append(endTag(TEST_ONU_ID));
329 + }
330 + rpc.append(endTag(TEST_GEM_STATS));
331 + rpc.append(endTag(TEST_ONU_GEM_STATS));
332 +
333 + rpc.append(startTag(TEST_ONU_ETH_STATS));
334 + rpc.append(startTag(TEST_ETH_STATS));
335 + rpc.append(startTag(TEST_PONLINK_ID, false));
336 + rpc.append(onuId[FIRST_PART]);
337 + rpc.append(endTag(TEST_PONLINK_ID));
338 + if (onuId.length > ONE) {
339 + rpc.append(startTag(TEST_ONU_ID, false));
340 + rpc.append(onuId[SECOND_PART]);
341 + rpc.append(endTag(TEST_ONU_ID));
342 + }
343 + rpc.append(endTag(TEST_ETH_STATS));
344 + rpc.append(endTag(TEST_ONU_ETH_STATS));
345 + rpc.append(endTag(TEST_ONU_STATISTICS));
346 + } else {
347 + rpc.append(emptyTag(TEST_ONU_STATISTICS));
348 + }
349 + rpc.append(endTag(TEST_VOLT_STATISTICS));
350 + rpc.append(TEST_VOLT_NE_CLOSE);
351 +
352 + String testRequest = rpc.toString();
353 + testRequest = testRequest.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
354 + request = request.replaceAll(TEST_WHITESPACES_REGEX, TEST_EMPTY_STRING);
355 + boolean result = request.equals(testRequest);
356 + assertTrue("Does not match with generated string", result);
357 + return result;
358 + }
359 +
360 + /**
361 + * Internal listener for device service events.
362 + */
363 + private class InternalSessionListenerTest implements FujitsuNetconfSessionListenerTest {
364 + @Override
365 + public boolean verifyEditConfig(String request) {
366 + return false;
367 + }
368 +
369 + @Override
370 + public boolean verifyEditConfig(String target, String mode, String request) {
371 + return false;
372 + }
373 +
374 + @Override
375 + public boolean verifyGet(String filterSchema, String withDefaultsMode) {
376 + boolean result;
377 + boolean forStats;
378 +
379 + assertTrue("Incorrect withDefaultsMode", withDefaultsMode.equals(TEST_REPORT_ALL));
380 + filterSchema = filterSchema.replaceAll(TEST_DUPLICATE_SPACES_REGEX, TEST_SPACE);
381 + assertTrue("Does not contain:" + TEST_VOLT_NAMESPACE,
382 + filterSchema.contains(TEST_VOLT_NAMESPACE));
383 +
384 + forStats = filterSchema.contains(TEST_VOLT_STATISTICS);
385 + if (forStats) {
386 + result = verifyGetRequestForStats(filterSchema);
387 + } else {
388 + result = verifyGetRequest(filterSchema);
389 + }
390 + assertTrue("XML verification failure", result);
391 + return result;
392 + }
393 +
394 + @Override
395 + public String buildGetReply() {
396 + return null;
397 + }
398 +
399 + @Override
400 + public boolean verifyWrappedRpc(String request) {
401 + boolean result;
402 +
403 + request = request.replaceAll(TEST_DUPLICATE_SPACES_REGEX, TEST_SPACE);
404 + assertTrue("Does not contain:" + TEST_ONU_SET_CONFIG_WITH_NAMESPACE,
405 + request.contains(TEST_ONU_SET_CONFIG_WITH_NAMESPACE));
406 +
407 + result = verifyWrappedRpcRequest(request);
408 + assertTrue("XML verification failure", result);
409 + return result;
410 + }
411 +
412 + @Override
413 + public void verifyStartSubscription(String filterSchema) {
414 + }
415 + }
416 +
417 +}
...@@ -42,9 +42,6 @@ public class FujitsuVoltPonLinkConfigTest { ...@@ -42,9 +42,6 @@ public class FujitsuVoltPonLinkConfigTest {
42 private static final String TEST_VOLT_PORTS = "volt-ports"; 42 private static final String TEST_VOLT_PORTS = "volt-ports";
43 private static final String TEST_GPON_PONLINK_PORTS = "gpon-ponlink-ports"; 43 private static final String TEST_GPON_PONLINK_PORTS = "gpon-ponlink-ports";
44 private static final String TEST_GPON_PONLINK_PORT = "gpon-ponlink-port"; 44 private static final String TEST_GPON_PONLINK_PORT = "gpon-ponlink-port";
45 - private static final int FIRST_PART = 0;
46 - private static final int SECOND_PART = 1;
47 - private static final int THIRD_PART = 2;
48 45
49 private static final Map<Integer, String> INVALID_GET_TCS = new HashMap<Integer, String>() { 46 private static final Map<Integer, String> INVALID_GET_TCS = new HashMap<Integer, String>() {
50 { 47 {
......
...@@ -55,6 +55,10 @@ final class FujitsuVoltXmlUtilityMock { ...@@ -55,6 +55,10 @@ final class FujitsuVoltXmlUtilityMock {
55 public static final String TEST_VOLT_NAMESPACE = TEST_VOLT_NE_OPEN + 55 public static final String TEST_VOLT_NAMESPACE = TEST_VOLT_NE_OPEN +
56 TEST_VOLT_NE_NAMESPACE; 56 TEST_VOLT_NE_NAMESPACE;
57 57
58 + public static final int FIRST_PART = 0;
59 + public static final int SECOND_PART = 1;
60 + public static final int THIRD_PART = 2;
61 + public static final int ONE = 1;
58 62
59 private FujitsuVoltXmlUtilityMock() { 63 private FujitsuVoltXmlUtilityMock() {
60 } 64 }
......