xueliang
Committed by Gerrit Code Review

[ONOS-5269] JUNIT Test cases for volt-ponlinks and volt-setponlink for FUJITSU NETCONF

Change-Id: Iaff73d2eb1a617a97ebb1dcd8ccad7c0b809ea41
...@@ -25,6 +25,10 @@ import org.onosproject.netconf.NetconfController; ...@@ -25,6 +25,10 @@ import org.onosproject.netconf.NetconfController;
25 import org.slf4j.Logger; 25 import org.slf4j.Logger;
26 26
27 import java.io.IOException; 27 import java.io.IOException;
28 +import java.util.Arrays;
29 +import java.util.List;
30 +import java.util.HashMap;
31 +import java.util.Map;
28 import java.util.Set; 32 import java.util.Set;
29 33
30 import com.google.common.collect.ImmutableSet; 34 import com.google.common.collect.ImmutableSet;
...@@ -40,14 +44,48 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -40,14 +44,48 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
40 implements VoltPonLinkConfig { 44 implements VoltPonLinkConfig {
41 45
42 private final Logger log = getLogger(FujitsuVoltPonLinkConfig.class); 46 private final Logger log = getLogger(FujitsuVoltPonLinkConfig.class);
43 - private final Set<String> ponLinkParams = ImmutableSet.of( 47 + private static final Map<String, List<Integer>> PON_LINK_PARAMS = new HashMap<String, List<Integer>>() {
44 - "admin-state", "onu-discovery-mode", "onu-discovery-interval", 48 + {
45 - "dba-cycle-time", "mac-age-time", "lof-threshold", 49 + put("onu-discovery-interval", Arrays.asList(ONU_DISCOVERY_INTERVAL_MIN, ONU_DISCOVERY_INTERVAL_MAX));
46 - "los-threshold", "pm-enable"); 50 + put("dba-cycle-time", Arrays.asList(DBA_CYCLE_TIME_MIN, DBA_CYCLE_TIME_MAX));
51 + put("mac-age-time", Arrays.asList(MAC_AGE_TIME_MIN, MAC_AGE_TIME_MAX));
52 + put("lof-threshold", Arrays.asList(LOF_THRESHOLD_MIN, LOF_THRESHOLD_MAX));
53 + put("los-threshold", Arrays.asList(LOS_THRESHOLD_MIN, LOS_THRESHOLD_MAX));
54 + put(ONU_DISCOVERY_MODE, null);
55 + put(PM_ENABLE, null);
56 + put(ADMIN_STATE, null);
57 + }
58 + };
47 private static final String VOLT_PORTS = "volt-ports"; 59 private static final String VOLT_PORTS = "volt-ports";
48 private static final String GPON_PONLINK_PORTS = "gpon-ponlink-ports"; 60 private static final String GPON_PONLINK_PORTS = "gpon-ponlink-ports";
49 private static final String GPON_PONLINK_PORT = "gpon-ponlink-port"; 61 private static final String GPON_PONLINK_PORT = "gpon-ponlink-port";
50 - private int pon; 62 + private static final String ADMIN_STATE = "admin-state";
63 + private static final String ONU_DISCOVERY_MODE = "onu-discovery-mode";
64 + private static final String PM_ENABLE = "pm-enable";
65 + private static final Set<String> ADMINSTATES =
66 + ImmutableSet.of("enable", "disable");
67 + private static final Set<String> ONUDISCOVERYMODES =
68 + ImmutableSet.of("auto", "manual", "disabled");
69 + private static final Set<String> PMENABLES =
70 + ImmutableSet.of("true", "false");
71 +
72 + private static final int ONU_DISCOVERY_INTERVAL_MIN = 1;
73 + private static final int ONU_DISCOVERY_INTERVAL_MAX = 3600;
74 + private static final int DBA_CYCLE_TIME_MIN = 2;
75 + private static final int DBA_CYCLE_TIME_MAX = 40;
76 + private static final int MAC_AGE_TIME_MIN = 1000;
77 + private static final int MAC_AGE_TIME_MAX = 3600000;
78 + private static final int LOF_THRESHOLD_MIN = 1;
79 + private static final int LOF_THRESHOLD_MAX = 10;
80 + private static final int LOS_THRESHOLD_MIN = 1;
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;
86 + private static final int RANGE_MAX = 1;
87 + private static final int ZERO = 0;
88 + private static final int THREE = 3;
51 89
52 @Override 90 @Override
53 public String getPonLinks(String target) { 91 public String getPonLinks(String target) {
...@@ -71,10 +109,15 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -71,10 +109,15 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
71 request.append(ANGLE_RIGHT).append(NEW_LINE); 109 request.append(ANGLE_RIGHT).append(NEW_LINE);
72 request.append(buildStartTag(VOLT_PORTS)); 110 request.append(buildStartTag(VOLT_PORTS));
73 if (target != null) { 111 if (target != null) {
112 + int pon;
74 try { 113 try {
75 pon = Integer.parseInt(target); 114 pon = Integer.parseInt(target);
115 + if (pon <= ZERO) {
116 + log.error("Invalid integer for ponlink-id:{}", target);
117 + return reply;
118 + }
76 } catch (NumberFormatException e) { 119 } catch (NumberFormatException e) {
77 - log.error("Non-number input"); 120 + log.error("Non-number input for ponlink-id:{}", target);
78 return reply; 121 return reply;
79 } 122 }
80 request.append(buildStartTag(GPON_PONLINK_PORTS)); 123 request.append(buildStartTag(GPON_PONLINK_PORTS));
...@@ -91,17 +134,19 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -91,17 +134,19 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
91 request.append(buildEndTag(VOLT_PORTS)); 134 request.append(buildEndTag(VOLT_PORTS));
92 request.append(VOLT_NE_CLOSE); 135 request.append(VOLT_NE_CLOSE);
93 136
94 - reply = controller. 137 + reply = controller
95 - getDevicesMap().get(ncDeviceId).getSession(). 138 + .getDevicesMap()
96 - get(request.toString(), REPORT_ALL); 139 + .get(ncDeviceId)
140 + .getSession()
141 + .get(request.toString(), REPORT_ALL);
97 } catch (IOException e) { 142 } catch (IOException e) {
98 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 143 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
99 } 144 }
100 return reply; 145 return reply;
101 } 146 }
102 147
103 @Override 148 @Override
104 - public void setPonLink(String target) { 149 + public boolean setPonLink(String target) {
105 DriverHandler handler = handler(); 150 DriverHandler handler = handler();
106 NetconfController controller = handler.get(NetconfController.class); 151 NetconfController controller = handler.get(NetconfController.class);
107 MastershipService mastershipService = handler.get(MastershipService.class); 152 MastershipService mastershipService = handler.get(MastershipService.class);
...@@ -112,27 +157,16 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -112,27 +157,16 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
112 log.warn("Not master for {} Use {} to execute command", 157 log.warn("Not master for {} Use {} to execute command",
113 ncDeviceId, 158 ncDeviceId,
114 mastershipService.getMasterFor(ncDeviceId)); 159 mastershipService.getMasterFor(ncDeviceId));
115 - return; 160 + return false;
116 - }
117 -
118 - String[] data = target.split(COLON);
119 - if (data.length != 3) {
120 - log.error("Invalid number of arguments");
121 - return;
122 - }
123 -
124 - try {
125 - pon = Integer.parseInt(data[0]);
126 - } catch (NumberFormatException e) {
127 - log.error("Non-number input");
128 - return;
129 } 161 }
130 162
131 - if (!ponLinkParams.contains(data[1])) { 163 + String[] data = checkSetInput(target);
132 - log.error("Unsupported parameter: {} ", data[1]); 164 + if (data == null) {
133 - return; 165 + log.error("Failed to check input: {}", target);
166 + return false;
134 } 167 }
135 168
169 + boolean result = false;
136 try { 170 try {
137 StringBuilder request = new StringBuilder(); 171 StringBuilder request = new StringBuilder();
138 request.append(VOLT_NE_OPEN).append(VOLT_NE_NAMESPACE); 172 request.append(VOLT_NE_OPEN).append(VOLT_NE_NAMESPACE);
...@@ -141,23 +175,117 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour ...@@ -141,23 +175,117 @@ public class FujitsuVoltPonLinkConfig extends AbstractHandlerBehaviour
141 request.append(buildStartTag(GPON_PONLINK_PORTS)); 175 request.append(buildStartTag(GPON_PONLINK_PORTS));
142 request.append(buildStartTag(GPON_PONLINK_PORT)); 176 request.append(buildStartTag(GPON_PONLINK_PORT));
143 request.append(buildStartTag(PONLINK_ID, false)); 177 request.append(buildStartTag(PONLINK_ID, false));
144 - request.append(data[0]); 178 + request.append(data[FIRST_PART]);
145 request.append(buildEndTag(PONLINK_ID)); 179 request.append(buildEndTag(PONLINK_ID));
146 180
147 - request.append(buildStartTag(data[1], false)); 181 + request.append(buildStartTag(data[SECOND_PART], false));
148 - request.append(data[2]); 182 + request.append(data[THIRD_PART]);
149 - request.append(buildEndTag(data[1])); 183 + request.append(buildEndTag(data[SECOND_PART]));
150 184
151 request.append(buildEndTag(GPON_PONLINK_PORT)); 185 request.append(buildEndTag(GPON_PONLINK_PORT));
152 request.append(buildEndTag(GPON_PONLINK_PORTS)); 186 request.append(buildEndTag(GPON_PONLINK_PORTS));
153 request.append(buildEndTag(VOLT_PORTS)); 187 request.append(buildEndTag(VOLT_PORTS));
154 request.append(VOLT_NE_CLOSE); 188 request.append(VOLT_NE_CLOSE);
155 189
156 - controller.getDevicesMap().get(ncDeviceId).getSession(). 190 + result = controller.getDevicesMap().get(ncDeviceId).getSession().
157 editConfig(RUNNING, null, request.toString()); 191 editConfig(RUNNING, null, request.toString());
158 } catch (IOException e) { 192 } catch (IOException e) {
159 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 193 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
160 } 194 }
195 + return result;
161 } 196 }
162 197
198 + /**
199 + * Verifies input string for valid options.
200 + *
201 + * @param target input data in string
202 + * @return String array
203 + * @return null if an error condition is detected
204 + */
205 + private String[] checkSetInput(String target) {
206 + String[] data = target.split(COLON);
207 + String paramName = data[SECOND_PART];
208 + String paramValue = data[THIRD_PART];
209 + int pon;
210 +
211 + if (data.length != THREE) {
212 + log.error("Invalid number of arguments {}", data.length);
213 + return null;
214 + }
215 +
216 + try {
217 + pon = Integer.parseInt(data[FIRST_PART]);
218 + if (pon <= ZERO) {
219 + log.error("Invalid integer for ponlink-id: {}",
220 + data[FIRST_PART]);
221 + return null;
222 + }
223 + } catch (NumberFormatException e) {
224 + log.error("Non-number input for ponlink-id: {}",
225 + data[FIRST_PART]);
226 + return null;
227 + }
228 +
229 + if (!PON_LINK_PARAMS.containsKey(paramName)) {
230 + log.error("Unsupported parameter: {}", paramName);
231 + return null;
232 + }
233 +
234 + List<Integer> range = PON_LINK_PARAMS.get(paramName);
235 + if (range == null) {
236 + switch (paramName) {
237 + case ADMIN_STATE:
238 + if (!validState(ADMINSTATES, paramName, paramValue)) {
239 + return null;
240 + }
241 + break;
242 + case ONU_DISCOVERY_MODE:
243 + if (!validState(ONUDISCOVERYMODES, paramName, paramValue)) {
244 + return null;
245 + }
246 + break;
247 + default:
248 + if (!validState(PMENABLES, paramName, paramValue)) {
249 + return null;
250 + }
251 + break;
252 + }
253 + } else {
254 + int value;
255 +
256 + try {
257 + value = Integer.parseInt(paramValue);
258 + } catch (NumberFormatException e) {
259 + log.error("Non-number input for Name {} : Value {}.",
260 + paramName, paramValue);
261 + return null;
262 + }
263 +
264 + if ((value < range.get(RANGE_MIN)) ||
265 + (value > range.get(RANGE_MAX))) {
266 + log.error("Out of value range for Name {} : Value {}.",
267 + paramName, paramValue);
268 + return null;
269 + }
270 + }
271 +
272 + return data;
273 + }
274 +
275 + /**
276 + * Verifies input string for valid options.
277 + *
278 + * @param states input data in string for parameter state
279 + * @param name input data in string for parameter name
280 + * @param value input data in string for parameter value
281 + * @return true if the param is valid
282 + * @return false if the param is invalid
283 + */
284 + private boolean validState(Set<String> states, String name, String value) {
285 + if (!states.contains(value)) {
286 + log.error("Invalid value for Name {} : Value {}.", name, value);
287 + return false;
288 + }
289 + return true;
290 + }
163 } 291 }
......
...@@ -36,8 +36,8 @@ public interface VoltPonLinkConfig extends HandlerBehaviour { ...@@ -36,8 +36,8 @@ public interface VoltPonLinkConfig extends HandlerBehaviour {
36 * Set a parameter value of PON link in the device. 36 * Set a parameter value of PON link in the device.
37 * 37 *
38 * @param target input data in string 38 * @param target input data in string
39 - * 39 + * @return true if the operation is successful
40 */ 40 */
41 - void setPonLink(String target); 41 + boolean setPonLink(String target);
42 42
43 } 43 }
......