[ONOS-5295] JUNIT Test cases for volt-onus, volt-setonu and volt-onustats as FUJITSU NETCONF commands

Change-Id: I8f80bc651adf2bfbfa7ce8587e03b1373222f37a
diff --git a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltOnuConfig.java b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltOnuConfig.java
index c38c46d..be16f55 100644
--- a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltOnuConfig.java
+++ b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuVoltOnuConfig.java
@@ -40,9 +40,14 @@
         implements VoltOnuConfig {
 
     private final Logger log = getLogger(FujitsuVoltOnuConfig.class);
-    private final Set<String> onuConfigParams = ImmutableSet.of(
-            "admin-state", "pm-enable", "fec-enable",
-            "security-enable", "password");
+    private static final String ADMIN_STATE = "admin-state";
+    private static final String PASSWORD = "password";
+    private static final Set<String> ONUCONFIGPARAMS =
+            ImmutableSet.of(ADMIN_STATE, "pm-enable", "fec-enable", "security-enable", PASSWORD);
+    private static final Set<String> ADMINSTATES =
+            ImmutableSet.of("enable", "disable");
+    private static final Set<String> ENABLES =
+            ImmutableSet.of("true", "false");
     private static final String VOLT_ONUS = "volt-onus";
     private static final String ONUS_PERLINK = "onus-perlink";
     private static final String ONUS_LIST = "onus-list";
@@ -55,9 +60,7 @@
     private static final String ETH_STATS = "eth-stats";
     private static final String ONU_GEM_STATS = "onu-gem-stats";
     private static final String GEM_STATS = "gem-stats";
-    private int pon;
-    private int onu;
-
+    private static final String PASSWORD_PATTERN = "^[a-zA-Z0-9]+$";
 
     @Override
     public String getOnus(String target) {
@@ -73,23 +76,14 @@
             log.warn("Not master for {} Use {} to execute command",
                      ncDeviceId,
                      mastershipService.getMasterFor(ncDeviceId));
-            return reply;
+            return null;
         }
 
         if (target != null) {
-            onuId = target.split(HYPHEN);
-            if (onuId.length > 2) {
-                log.error("Invalid number of arguments");
-                return reply;
-            }
-            try {
-                pon = Integer.parseInt(onuId[0]);
-                if (onuId.length > 1) {
-                    onu = Integer.parseInt(onuId[1]);
-                }
-            } catch (NumberFormatException e) {
-                log.error("Non-number input");
-                return reply;
+            onuId = checkIdString(target);
+            if (onuId == null) {
+                log.error("Invalid ONU identifier {}", target);
+                return null;
             }
         }
 
@@ -101,13 +95,13 @@
                 request.append(buildStartTag(VOLT_ONUS));
                 request.append(buildStartTag(ONUS_PERLINK));
                 request.append(buildStartTag(PONLINK_ID, false));
-                request.append(onuId[0]);
+                request.append(onuId[FIRST_PART]);
                 request.append(buildEndTag(PONLINK_ID));
-                if (onuId.length > 1) {
+                if (onuId.length > ONE) {
                     request.append(buildStartTag(ONUS_LIST));
                     request.append(buildStartTag(ONU_INFO));
                     request.append(buildStartTag(ONU_ID, false));
-                    request.append(onuId[1]);
+                    request.append(onuId[SECOND_PART]);
                     request.append(buildEndTag(ONU_ID));
                     request.append(buildEndTag(ONU_INFO));
                     request.append(buildEndTag(ONUS_LIST));
@@ -119,11 +113,13 @@
             }
             request.append(VOLT_NE_CLOSE);
 
-            reply = controller.
-                    getDevicesMap().get(ncDeviceId).getSession().
-                    get(request.toString(), REPORT_ALL);
+            reply = controller
+                        .getDevicesMap()
+                        .get(ncDeviceId)
+                        .getSession()
+                        .get(request.toString(), REPORT_ALL);
         } catch (IOException e) {
-            log.error("Cannot communicate to device {} exception ", ncDeviceId, e);
+            log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
         }
         return reply;
     }
@@ -141,32 +137,25 @@
             log.warn("Not master for {} Use {} to execute command",
                      ncDeviceId,
                      mastershipService.getMasterFor(ncDeviceId));
-            return reply;
+            return null;
         }
 
         String[] data = target.split(COLON);
-        if (data.length != 3) {
+        if (data.length != THREE) {
             log.error("Invalid number of arguments");
-            return reply;
+            return null;
         }
 
-        String[] onuId = data[0].split(HYPHEN);
-        if (onuId.length != 2) {
-            log.error("Invalid ONU identifier");
-            return reply;
+        String[] onuId = checkIdString(data[FIRST_PART]);
+        if ((onuId == null) || (onuId.length != TWO)) {
+            log.error("Invalid ONU identifier {}", target);
+            return null;
         }
 
-        try {
-            pon = Integer.parseInt(onuId[0]);
-            onu = Integer.parseInt(onuId[1]);
-        } catch (NumberFormatException e) {
-            log.error("Non-number input");
-            return reply;
-        }
-
-        if (!onuConfigParams.contains(data[1])) {
-            log.error("Unsupported parameter: " + data[1]);
-            return reply;
+        if (!checkSetParam(data[SECOND_PART],
+                            data[THIRD_PART])) {
+            log.error("Failed to check input {}", target);
+            return null;
         }
 
         try {
@@ -174,23 +163,25 @@
             request.append(ANGLE_LEFT).append(ONU_SET_CONFIG).append(SPACE);
             request.append(VOLT_NE_NAMESPACE).append(ANGLE_RIGHT).append(NEW_LINE);
             request.append(buildStartTag(PONLINK_ID, false));
-            request.append(onuId[0]);
+            request.append(onuId[FIRST_PART]);
             request.append(buildEndTag(PONLINK_ID));
             request.append(buildStartTag(ONU_ID, false));
-            request.append(onuId[1]);
+            request.append(onuId[SECOND_PART]);
             request.append(buildEndTag(ONU_ID));
             request.append(buildStartTag(CONFIG_INFO));
-            request.append(buildStartTag(data[1], false));
-            request.append(data[2]);
-            request.append(buildEndTag(data[1]));
+            request.append(buildStartTag(data[SECOND_PART], false));
+            request.append(data[THIRD_PART]);
+            request.append(buildEndTag(data[SECOND_PART]));
             request.append(buildEndTag(CONFIG_INFO));
             request.append(buildEndTag(ONU_SET_CONFIG));
 
-            reply = controller.
-                    getDevicesMap().get(ncDeviceId).getSession().
-                    doWrappedRpc(request.toString());
+            reply = controller
+                        .getDevicesMap()
+                        .get(ncDeviceId)
+                        .getSession()
+                        .doWrappedRpc(request.toString());
         } catch (IOException e) {
-            log.error("Cannot communicate to device {} exception ", ncDeviceId, e);
+            log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
         }
         return reply;
     }
@@ -209,23 +200,14 @@
             log.warn("Not master for {} Use {} to execute command",
                      ncDeviceId,
                      mastershipService.getMasterFor(ncDeviceId));
-            return reply;
+            return null;
         }
 
         if (target != null) {
-            onuId = target.split(HYPHEN);
-            if (onuId.length > 2) {
-                log.error("Invalid number of arguments:" + onuId.length);
-                return reply;
-            }
-            try {
-                pon = Integer.parseInt(onuId[0]);
-                if (onuId.length > 1) {
-                    onu = Integer.parseInt(onuId[1]);
-                }
-            } catch (NumberFormatException e) {
-                log.error("Non-number input");
-                return reply;
+            onuId = checkIdString(target);
+            if (onuId == null) {
+                log.error("Failed to check ID: {}", target);
+                return null;
             }
         }
 
@@ -239,11 +221,11 @@
                 request.append(buildStartTag(ONU_GEM_STATS));
                 request.append(buildStartTag(GEM_STATS));
                 request.append(buildStartTag(PONLINK_ID, false));
-                request.append(onuId[0]);
+                request.append(onuId[FIRST_PART]);
                 request.append(buildEndTag(PONLINK_ID));
-                if (onuId.length > 1) {
+                if (onuId.length > ONE) {
                     request.append(buildStartTag(ONU_ID, false));
-                    request.append(onuId[1]);
+                    request.append(onuId[SECOND_PART]);
                     request.append(buildEndTag(ONU_ID));
                 }
                 request.append(buildEndTag(GEM_STATS));
@@ -252,30 +234,119 @@
                 request.append(buildStartTag(ONU_ETH_STATS));
                 request.append(buildStartTag(ETH_STATS));
                 request.append(buildStartTag(PONLINK_ID, false));
-                request.append(onuId[0]);
+                request.append(onuId[FIRST_PART]);
                 request.append(buildEndTag(PONLINK_ID));
-                if (onuId.length > 1) {
+                if (onuId.length > ONE) {
                     request.append(buildStartTag(ONU_ID, false));
-                    request.append(onuId[1]);
+                    request.append(onuId[SECOND_PART]);
                     request.append(buildEndTag(ONU_ID));
                 }
                 request.append(buildEndTag(ETH_STATS));
                 request.append(buildEndTag(ONU_ETH_STATS));
-
                 request.append(buildEndTag(ONU_STATISTICS));
-            } else {
+            } else  {
                 request.append(buildEmptyTag(ONU_STATISTICS));
             }
             request.append(buildEndTag(VOLT_STATISTICS));
             request.append(VOLT_NE_CLOSE);
 
-            reply = controller.
-                    getDevicesMap().get(ncDeviceId).getSession().
-                    get(request.toString(), REPORT_ALL);
+            reply = controller
+                        .getDevicesMap()
+                        .get(ncDeviceId)
+                        .getSession()
+                        .get(request.toString(), REPORT_ALL);
         } catch (IOException e) {
-            log.error("Cannot communicate to device {} exception ", ncDeviceId, e);
+            log.error("Cannot communicate to device {} exception {}", ncDeviceId, e);
         }
         return reply;
     }
 
+    /**
+     * Verifies input string for ponlink-id{-onu-id}.
+     *
+     * @param target input data in string
+     * @return String array
+     * @return null if an error condition is detected
+     */
+    private String[] checkIdString(String target) {
+        String[] onuId = target.split(HYPHEN);
+        int pon;
+        int onu;
+
+        if (onuId.length > TWO) {
+            log.error("Invalid number of arguments for id:{}", onuId.length);
+            return null;
+        }
+        try {
+            pon = Integer.parseInt(onuId[FIRST_PART]);
+            if (pon <= ZERO) {
+                log.error("Invalid integer for ponlink-id:{}", onuId[FIRST_PART]);
+                return null;
+            }
+            if (onuId.length > ONE) {
+                onu = Integer.parseInt(onuId[SECOND_PART]);
+                if (onu <= ZERO) {
+                    log.error("Invalid integer for onu-id:{}", onuId[SECOND_PART]);
+                    return null;
+                }
+            }
+        } catch (NumberFormatException e) {
+            log.error("Non-number input for id:{}", target);
+            return null;
+        }
+        return onuId;
+    }
+
+    /**
+     * Verifies input string for valid options.
+     *
+     * @param name input data in string
+     * @param value input data in string
+     * @return true if the parameter is valid
+     * @return false if the parameter is invalid
+     */
+    private boolean checkSetParam(String name, String value) {
+        if (!ONUCONFIGPARAMS.contains(name)) {
+            log.error("Unsupported parameter: {}", name);
+            return false;
+        }
+
+        switch (name) {
+            case ADMIN_STATE:
+                if (!validState(ADMINSTATES, name, value)) {
+                    return false;
+                }
+                break;
+            case PASSWORD:
+                if (!value.matches(PASSWORD_PATTERN)) {
+                    log.error("Invalid value for Name {} : Value {}.", name, value);
+                    return false;
+                }
+                break;
+            default:
+                if (!validState(ENABLES, name, value)) {
+                    return false;
+                }
+                break;
+        }
+        return true;
+    }
+
+    /**
+     * Verifies input string for valid options.
+     *
+     * @param states input data in string for parameter state
+     * @param name input data in string for parameter name
+     * @param value input data in string for parameter value
+     * @return true if the param is valid
+     * @return false if the param is invalid
+     */
+    private boolean validState(Set<String> states, String name, String value) {
+        if (!states.contains(value)) {
+            log.error("Invalid value for Name {} : Value {}.", name, value);
+            return false;
+        }
+        return true;
+    }
+
 }