Add rolling upgrade test.

Change-Id: Id1b09361aa69f1665f19c312933798b5206d46ac
diff --git a/core/api/src/main/java/org/onosproject/core/Version.java b/core/api/src/main/java/org/onosproject/core/Version.java
index ec0ea6d..379eda2 100644
--- a/core/api/src/main/java/org/onosproject/core/Version.java
+++ b/core/api/src/main/java/org/onosproject/core/Version.java
@@ -100,8 +100,9 @@
     public static Version fromInt(int version) {
         int major = (version >> 24) & 0xff;
         int minor = (version >> 16) & 0xff;
-        int patch = (version) & 0xffff;
-        return new Version(major, minor, String.valueOf(patch), null);
+        int patch = (version >> 8) & 0xff;
+        int build = version & 0xff;
+        return new Version(major, minor, String.valueOf(patch), String.valueOf(build));
     }
 
     /**
@@ -157,13 +158,30 @@
     public int toInt() {
         byte major = (byte) this.major;
         byte minor = (byte) this.minor;
-        short patch;
-        try {
-            patch = (short) Integer.parseInt(this.patch);
-        } catch (NumberFormatException e) {
+
+        byte patch;
+        if (this.patch != null) {
+            try {
+                patch = (byte) Integer.parseInt(this.patch.replaceAll("[^0-9]", ""));
+            } catch (NumberFormatException e) {
+                patch = 0;
+            }
+        } else {
             patch = 0;
         }
-        return major << 24 | (minor & 0xff) << 16 | (patch & 0xffff);
+
+        byte build;
+        if (this.build != null) {
+            try {
+                build = (byte) Integer.parseInt(this.build.replaceAll("[^0-9]", ""));
+            } catch (NumberFormatException e) {
+                build = 0;
+            }
+        } else {
+            build = 0;
+        }
+
+        return major << 24 | (minor & 0xff) << 16 | (patch & 0xff) << 8 | (build & 0xff);
     }
 
     @Override
diff --git a/core/api/src/test/java/org/onosproject/VersionTest.java b/core/api/src/test/java/org/onosproject/VersionTest.java
index 1c972ee..482d798 100644
--- a/core/api/src/test/java/org/onosproject/VersionTest.java
+++ b/core/api/src/test/java/org/onosproject/VersionTest.java
@@ -83,25 +83,30 @@
 
         version1 = version("1.2");
         version2 = Version.fromInt(version1.toInt());
-        assertEquals(version2, version(1, 2, "0", null));
+        assertEquals(version2, version(1, 2, "0", "0"));
 
         version1 = version("1.2.foo.bar");
         version2 = Version.fromInt(version1.toInt());
-        assertEquals(version2, version(1, 2, "0", null));
+        assertEquals(version2, version(1, 2, "0", "0"));
 
         version1 = version("1.2.3");
         version2 = Version.fromInt(version1.toInt());
-        assertEquals(version2, version(1, 2, "3", null));
+        assertEquals(version2, version(1, 2, "3", "0"));
 
-        version1 = version("255.254.65535.252");
+        version1 = version("1.2.3-SNAPSHOT");
         version2 = Version.fromInt(version1.toInt());
-        assertEquals(version2, version(255, 254, "65535", null));
+        assertEquals(version2, version(1, 2, "3", "0"));
+
+        version1 = version("255.254.253.252");
+        version2 = Version.fromInt(version1.toInt());
+        assertEquals(version2, version(255, 254, "253", "252"));
 
         assertTrue(version("0.0.2").toInt() > version("0.0.1").toInt());
         assertTrue(version("0.1.0").toInt() > version("0.0.1").toInt());
         assertTrue(version("1.0.0").toInt() > version("0.1.0").toInt());
         assertTrue(version("1.1.0").toInt() > version("1.0.1").toInt());
         assertTrue(version("2.1.1").toInt() > version("1.10.10").toInt());
+        assertTrue(version("0.1.0-rc2").toInt() > version("0.1.0-rc1").toInt());
     }
 
     @Test