Limit string field lengths for network/configuration objects

Change-Id: Ic375854bb697ee21a8fd7b15fccd0b0878212869
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
index 6fa169e..d193c72 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
@@ -19,6 +19,8 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.key.DeviceKeyId;
 
+import static com.google.common.base.Preconditions.checkArgument;
+
 /**
  * Basic configuration for network infrastructure devices.
  */
@@ -33,12 +35,30 @@
     private static final String SERIAL = "serial";
     private static final String DEVICE_KEY_ID = "deviceKeyId";
 
+    private static final int DRIVER_MAX_LENGTH = 256;
+    private static final int MANUFACTURER_MAX_LENGTH = 256;
+    private static final int HW_VERSION_MAX_LENGTH = 256;
+    private static final int SW_VERSION_MAX_LENGTH = 256;
+    private static final int SERIAL_MAX_LENGTH = 256;
+    private static final int MANAGEMENT_ADDRESS_MAX_LENGTH = 1024;
+
     @Override
     public boolean isValid() {
-        return hasOnlyFields(ALLOWED, NAME, LOC_TYPE, LATITUDE, LONGITUDE,
+        // Validate type/DeviceKeyId
+        type();
+        deviceKeyId();
+
+        return super.isValid()
+                && hasOnlyFields(ALLOWED, NAME, LOC_TYPE, LATITUDE, LONGITUDE,
                 GRID_Y, GRID_X, UI_TYPE, RACK_ADDRESS, OWNER, TYPE, DRIVER,
                 MANUFACTURER, HW_VERSION, SW_VERSION, SERIAL,
-                MANAGEMENT_ADDRESS, DEVICE_KEY_ID);
+                MANAGEMENT_ADDRESS, DEVICE_KEY_ID)
+                && isValidLength(DRIVER, DRIVER_MAX_LENGTH)
+                && isValidLength(MANUFACTURER, MANUFACTURER_MAX_LENGTH)
+                && isValidLength(HW_VERSION, MANUFACTURER_MAX_LENGTH)
+                && isValidLength(SW_VERSION, MANUFACTURER_MAX_LENGTH)
+                && isValidLength(SERIAL, MANUFACTURER_MAX_LENGTH)
+                && isValidLength(MANAGEMENT_ADDRESS, MANAGEMENT_ADDRESS_MAX_LENGTH);
     }
 
     /**
@@ -76,6 +96,8 @@
      * @return self
      */
     public BasicDeviceConfig driver(String driverName) {
+        checkArgument(driverName.length() <= DRIVER_MAX_LENGTH,
+                "driver exceeds maximum length " + DRIVER_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(DRIVER, driverName);
     }
 
@@ -95,6 +117,8 @@
      * @return self
      */
     public BasicDeviceConfig manufacturer(String manufacturerName) {
+        checkArgument(manufacturerName.length() <= MANUFACTURER_MAX_LENGTH,
+                "manufacturer exceeds maximum length " + MANUFACTURER_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(MANUFACTURER, manufacturerName);
     }
 
@@ -114,6 +138,8 @@
      * @return self
      */
     public BasicDeviceConfig hwVersion(String hwVersion) {
+        checkArgument(hwVersion.length() <= HW_VERSION_MAX_LENGTH,
+                "hwVersion exceeds maximum length " + HW_VERSION_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(HW_VERSION, hwVersion);
     }
 
@@ -133,6 +159,8 @@
      * @return self
      */
     public BasicDeviceConfig swVersion(String swVersion) {
+        checkArgument(swVersion.length() <= SW_VERSION_MAX_LENGTH,
+                "swVersion exceeds maximum length " + SW_VERSION_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(SW_VERSION, swVersion);
     }
 
@@ -152,6 +180,8 @@
      * @return self
      */
     public BasicDeviceConfig serial(String serial) {
+        checkArgument(serial.length() <= SERIAL_MAX_LENGTH,
+                "serial exceeds maximum length " + SERIAL_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(SERIAL, serial);
     }
 
@@ -171,6 +201,8 @@
      * @return self
      */
     public BasicDeviceConfig managementAddress(String managementAddress) {
+        checkArgument(managementAddress.length() <= MANAGEMENT_ADDRESS_MAX_LENGTH,
+                "serialNumber exceeds maximum length " + MANAGEMENT_ADDRESS_MAX_LENGTH);
         return (BasicDeviceConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress);
     }