xueliang
Committed by Gerrit Code Review

[ONOS-5418] JUNIT Test cases for volt-ondemandfwdl as FUJITSU NETCONF

Change-Id: I515d48a664ad2edc18be801977e4bff7713f1052
...@@ -43,9 +43,8 @@ public class FujitsuVoltFwdlConfig extends AbstractHandlerBehaviour ...@@ -43,9 +43,8 @@ public class FujitsuVoltFwdlConfig extends AbstractHandlerBehaviour
43 private static final String MEMBER = "member"; 43 private static final String MEMBER = "member";
44 private static final String IMAGE_NAME = "image-name"; 44 private static final String IMAGE_NAME = "image-name";
45 private static final String REBOOT_MODE = "reboot-mode"; 45 private static final String REBOOT_MODE = "reboot-mode";
46 - private int pon; 46 + private static final String AUTO = "auto";
47 - private int onu; 47 + private static final String COMMA = ",";
48 -
49 48
50 @Override 49 @Override
51 public String upgradeFirmwareOndemand(String target) { 50 public String upgradeFirmwareOndemand(String target) {
...@@ -61,67 +60,84 @@ public class FujitsuVoltFwdlConfig extends AbstractHandlerBehaviour ...@@ -61,67 +60,84 @@ public class FujitsuVoltFwdlConfig extends AbstractHandlerBehaviour
61 log.warn("Not master for {} Use {} to execute command", 60 log.warn("Not master for {} Use {} to execute command",
62 ncDeviceId, 61 ncDeviceId,
63 mastershipService.getMasterFor(ncDeviceId)); 62 mastershipService.getMasterFor(ncDeviceId));
64 - return reply; 63 + return null;
65 } 64 }
66 65
67 - String[] data = target.split(":"); 66 + String[] data = target.split(COLON);
68 - if ((data.length < 2) || (data.length > 3)) { 67 + if ((data.length < TWO) || (data.length > THREE)) {
69 log.error("Invalid number of arguments"); 68 log.error("Invalid number of arguments");
70 - return reply; 69 + return null;
71 } 70 }
72 71
73 - String[] onuList = data[1].split(","); 72 + String[] onuList = data[SECOND_PART].split(COMMA);
74 - if (onuList.length == 0) { 73 + if (onuList.length == ZERO) {
75 log.error("No ONU listed"); 74 log.error("No ONU listed");
76 - return reply; 75 + return null;
76 + }
77 +
78 + if ((data.length > TWO) && (!AUTO.equals(data[THIRD_PART]))) {
79 + log.error("Invalid reboot-mode {}", data[THIRD_PART]);
80 + return null;
77 } 81 }
78 82
79 try { 83 try {
80 StringBuilder request = new StringBuilder(); 84 StringBuilder request = new StringBuilder();
81 - request.append(ANGLE_LEFT).append(ONDEMAND_FIRMWARE_UPGRADE).append(SPACE); 85 + request.append(ANGLE_LEFT + ONDEMAND_FIRMWARE_UPGRADE + SPACE);
82 - request.append(VOLT_NE_NAMESPACE).append(ANGLE_RIGHT).append(NEW_LINE); 86 + request.append(VOLT_NE_NAMESPACE + ANGLE_RIGHT + NEW_LINE);
83 request.append(buildStartTag(PARTICIPANT_LIST)); 87 request.append(buildStartTag(PARTICIPANT_LIST));
84 88
85 - for (count = 0; count < onuList.length; count++) { 89 + for (count = ZERO; count < onuList.length; count++) {
86 - String[] onuId = onuList[count].split("-"); 90 + String[] onuId = onuList[count].split(HYPHEN);
87 - if (onuId.length != 2) { 91 + if (onuId.length != TWO) {
88 log.error("Invalid ONU identifier"); 92 log.error("Invalid ONU identifier");
89 - return reply; 93 + return null;
90 } 94 }
91 95
92 try { 96 try {
93 - pon = Integer.parseInt(onuId[0]); 97 + int pon;
94 - onu = Integer.parseInt(onuId[1]); 98 + pon = Integer.parseInt(onuId[FIRST_PART]);
99 + if (pon <= ZERO) {
100 + log.error("Invalid integer for ponlink-id:{}", onuId[FIRST_PART]);
101 + return null;
102 + }
103 + int onu;
104 + onu = Integer.parseInt(onuId[SECOND_PART]);
105 + if (onu <= ZERO) {
106 + log.error("Invalid integer for onu-id:{}", onuId[SECOND_PART]);
107 + return null;
108 + }
95 } catch (NumberFormatException e) { 109 } catch (NumberFormatException e) {
96 log.error("Non-number input"); 110 log.error("Non-number input");
97 - return reply; 111 + return null;
98 } 112 }
99 113
100 - request.append(buildStartTag(MEMBER)); 114 + request.append(buildStartTag(MEMBER))
101 - request.append(buildStartTag(PONLINK_ID)); 115 + .append(buildStartTag(PONLINK_ID))
102 - request.append(onuId[0]); 116 + .append(onuId[FIRST_PART])
103 - request.append(buildEndTag(PONLINK_ID)); 117 + .append(buildEndTag(PONLINK_ID))
104 - request.append(buildStartTag(ONU_ID)); 118 + .append(buildStartTag(ONU_ID))
105 - request.append(onuId[1]); 119 + .append(onuId[SECOND_PART])
106 - request.append(buildEndTag(ONU_ID)); 120 + .append(buildEndTag(ONU_ID))
107 - request.append(buildEndTag(MEMBER)); 121 + .append(buildEndTag(MEMBER));
108 } 122 }
109 - request.append(buildEndTag(PARTICIPANT_LIST)); 123 + request.append(buildEndTag(PARTICIPANT_LIST))
110 - request.append(buildStartTag(IMAGE_NAME)); 124 + .append(buildStartTag(IMAGE_NAME))
111 - request.append(data[0]); 125 + .append(data[FIRST_PART])
112 - request.append(buildEndTag(IMAGE_NAME)); 126 + .append(buildEndTag(IMAGE_NAME));
113 - if (data.length == 3) { 127 + if (data.length == THREE) {
114 - request.append(buildStartTag(REBOOT_MODE)); 128 + request.append(buildStartTag(REBOOT_MODE))
115 - request.append(data[2]); 129 + .append(data[THIRD_PART])
116 - request.append(buildEndTag(REBOOT_MODE)); 130 + .append(buildEndTag(REBOOT_MODE));
117 } 131 }
118 request.append(buildEndTag(ONDEMAND_FIRMWARE_UPGRADE)); 132 request.append(buildEndTag(ONDEMAND_FIRMWARE_UPGRADE));
119 133
120 - reply = controller. 134 + reply = controller
121 - getDevicesMap().get(ncDeviceId).getSession(). 135 + .getDevicesMap()
122 - doWrappedRpc(request.toString()); 136 + .get(ncDeviceId)
137 + .getSession()
138 + .doWrappedRpc(request.toString());
123 } catch (IOException e) { 139 } catch (IOException e) {
124 - log.error("Cannot communicate to device {} exception ", ncDeviceId, e); 140 + log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
125 } 141 }
126 return reply; 142 return reply;
127 } 143 }
......
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 static org.junit.Assert.assertTrue;
23 +import static org.junit.Assert.assertNull;
24 +import static org.junit.Assert.assertNotNull;
25 +import static org.onosproject.drivers.fujitsu.FujitsuVoltXmlUtilityMock.*;
26 +
27 +
28 +/**
29 + * Unit tests for methods of FujitsuVoltFwdlConfig.
30 + */
31 +public class FujitsuVoltFwdlConfigTest {
32 +
33 + private final FujitsuNetconfSessionListenerTest listener = new InternalSessionListener();
34 +
35 + private static final String TEST_ONDEMAND_FIRMWARE_UPGRADE = "ondemand-firmware-upgrade";
36 + private static final String TEST_PARTICIPANT_LIST = "participant-list";
37 + private static final String TEST_MEMBER = "member";
38 + private static final String TEST_IMAGE_NAME = "image-name";
39 + private static final String TEST_REBOOT_MODE = "reboot-mode";
40 + private static final String TEST_COMMA = ",";
41 +
42 + private static final String TEST_ONDEMAND_FWDL_WITH_NAMESPACE =
43 + TEST_ANGLE_LEFT + TEST_ONDEMAND_FIRMWARE_UPGRADE +
44 + TEST_SPACE + TEST_VOLT_NE_NAMESPACE;
45 +
46 + private static final String[] INVALID_ONDEMAND_FWDL_TCS = {
47 + "xy1-b:a1-1",
48 + "AAA:1-2,--1",
49 + "CcC:s-1,2-2,3-2:auto",
50 + "xYZam:1-1,2-2,3-3:false",
51 + "JKml901:16-1-1,2-16:a-2",
52 + "abc:&AA-1,11-2:auto",
53 + "abc:xyz:-1-1",
54 + "@bcf11:xyz:auto",
55 + "FJ123:1-1&5-2:auto",
56 + };
57 + private static final String[] VALID_ONDEMAND_FWDL_TCS = {
58 + "Fujitsu123:1-2",
59 + "abcDE90f:16-11,1-1,17-3:auto",
60 + "fujitsuONU12:1-1,2-2,3-3,4-4,5-5,6-6,7-7",
61 + };
62 + private Integer currentKey;
63 + private FujitsuNetconfControllerMock controller;
64 + private FujitsuDriverHandlerAdapter driverHandler;
65 + private FujitsuVoltFwdlConfig voltConfig;
66 +
67 + @Before
68 + public void setUp() throws Exception {
69 + controller = new FujitsuNetconfControllerMock();
70 + driverHandler = controller.setUp(listener);
71 + voltConfig = new FujitsuVoltFwdlConfig();
72 + voltConfig.setHandler(driverHandler);
73 + }
74 +
75 + /**
76 + * Run to verify handling of invalid input for rpc operation.
77 + */
78 + @Test
79 + public void testInvalidOndemandFirmwareUpgradeInput() throws Exception {
80 + String reply;
81 + String target;
82 +
83 + for (int i = ZERO; i < INVALID_ONDEMAND_FWDL_TCS.length; i++) {
84 + target = INVALID_ONDEMAND_FWDL_TCS[i];
85 + reply = voltConfig.upgradeFirmwareOndemand(target);
86 + assertNull("Incorrect response for INVALID_ONDEMAND_FWDL_TCS", reply);
87 + }
88 + }
89 +
90 + /**
91 + * Run to verify handling of valid input for rpc operation.
92 + */
93 + @Test
94 + public void testValidOndemandFirmwareUpgrade() throws Exception {
95 + String reply;
96 + String target;
97 +
98 + for (int i = ZERO; i < VALID_ONDEMAND_FWDL_TCS.length; i++) {
99 + target = VALID_ONDEMAND_FWDL_TCS[i];
100 + currentKey = i;
101 + reply = voltConfig.upgradeFirmwareOndemand(target);
102 + assertNotNull("Incorrect response for VALID_ONDEMAND_FWDL_TCS", reply);
103 + }
104 + }
105 +
106 + /**
107 + * Verifies XML request string by comparing with generated string.
108 + *
109 + * @param request XML string for rpc operation
110 + * @return true or false
111 + */
112 + private boolean verifyWrappedRpcRequest(String request) {
113 + StringBuilder rpc = new StringBuilder();
114 + String target = VALID_ONDEMAND_FWDL_TCS[currentKey];
115 + String[] data = target.split(TEST_COLON);
116 + String[] onuList = data[SECOND_PART].split(TEST_COMMA);
117 + int count;
118 +
119 + rpc.append(TEST_ANGLE_LEFT + TEST_ONDEMAND_FIRMWARE_UPGRADE + TEST_SPACE);
120 + rpc.append(TEST_VOLT_NE_NAMESPACE + TEST_ANGLE_RIGHT + TEST_NEW_LINE);
121 +
122 + rpc.append(startTag(TEST_PARTICIPANT_LIST));
123 + for (count = ZERO; count < onuList.length; count++) {
124 + String[] onuId = onuList[count].split(TEST_HYPHEN);
125 + rpc.append(startTag(TEST_MEMBER))
126 + .append(startTag(TEST_PONLINK_ID))
127 + .append(onuId[FIRST_PART])
128 + .append(endTag(TEST_PONLINK_ID))
129 + .append(startTag(TEST_ONU_ID))
130 + .append(onuId[SECOND_PART])
131 + .append(endTag(TEST_ONU_ID))
132 + .append(endTag(TEST_MEMBER));
133 + }
134 + rpc.append(endTag(TEST_PARTICIPANT_LIST))
135 + .append(startTag(TEST_IMAGE_NAME))
136 + .append(data[FIRST_PART])
137 + .append(endTag(TEST_IMAGE_NAME));
138 + if (data.length == THREE) {
139 + rpc.append(startTag(TEST_REBOOT_MODE))
140 + .append(data[THIRD_PART])
141 + .append(endTag(TEST_REBOOT_MODE));
142 + }
143 + rpc.append(endTag(TEST_ONDEMAND_FIRMWARE_UPGRADE));
144 +
145 + String testRequest = rpc.toString();
146 + String regex = TEST_WHITESPACES_REGEX;
147 + int index = rpc.indexOf(regex);
148 + while (index >= ZERO) {
149 + testRequest = rpc.replace(index, index + regex.length(), TEST_EMPTY_STRING).toString();
150 + request = request.replaceAll(regex, TEST_EMPTY_STRING);
151 + }
152 + boolean result = request.equals(testRequest);
153 + assertTrue("Does not match with generated string", result);
154 + return result;
155 + }
156 +
157 + /**
158 + * Internal listener for device service events.
159 + */
160 + private class InternalSessionListener implements FujitsuNetconfSessionListenerTest {
161 + @Override
162 + public boolean verifyEditConfig(String request) {
163 + return false;
164 + }
165 +
166 + @Override
167 + public boolean verifyEditConfig(String target, String mode, String request) {
168 + return false;
169 + }
170 +
171 + @Override
172 + public boolean verifyGet(String filterSchema, String withDefaultsMode) {
173 + return false;
174 + }
175 +
176 + @Override
177 + public String buildGetReply() {
178 + return null;
179 + }
180 +
181 + @Override
182 + public boolean verifyWrappedRpc(String request) {
183 + boolean result;
184 +
185 + request = request.replaceAll(TEST_DUPLICATE_SPACES_REGEX, TEST_SPACE);
186 + assertTrue("Does not contain:" + TEST_ONDEMAND_FWDL_WITH_NAMESPACE,
187 + request.contains(TEST_ONDEMAND_FWDL_WITH_NAMESPACE));
188 +
189 + result = verifyWrappedRpcRequest(request);
190 + assertTrue("XML verification failure", result);
191 + return result;
192 + }
193 +
194 + @Override
195 + public void verifyStartSubscription(String filterSchema) {
196 + }
197 + }
198 +
199 +}
...@@ -60,6 +60,7 @@ final class FujitsuVoltXmlUtilityMock { ...@@ -60,6 +60,7 @@ final class FujitsuVoltXmlUtilityMock {
60 public static final int THIRD_PART = 2; 60 public static final int THIRD_PART = 2;
61 public static final int ZERO = 0; 61 public static final int ZERO = 0;
62 public static final int ONE = 1; 62 public static final int ONE = 1;
63 + public static final int THREE = 3;
63 64
64 private FujitsuVoltXmlUtilityMock() { 65 private FujitsuVoltXmlUtilityMock() {
65 } 66 }
......