You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by GitBox <gi...@apache.org> on 2018/12/04 10:50:11 UTC

[GitHub] liubao68 closed pull request #1013: [SCB-1047]microservice.yaml service_description.version support form…

liubao68 closed pull request #1013: [SCB-1047]microservice.yaml  service_description.version support form…
URL: https://github.com/apache/servicecomb-java-chassis/pull/1013
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestConsumerProviderManager.java b/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestConsumerProviderManager.java
index 7cee5e3fb..56bfe3897 100644
--- a/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestConsumerProviderManager.java
+++ b/core/src/test/java/org/apache/servicecomb/core/provider/consumer/TestConsumerProviderManager.java
@@ -94,7 +94,7 @@ public void createReferenceConfig_default() {
 
     Assert.assertEquals("app", referenceConfig.getMicroserviceVersionRule().getAppId());
     Assert.assertEquals("app:ms", referenceConfig.getMicroserviceVersionRule().getMicroserviceName());
-    Assert.assertEquals("0.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
+    Assert.assertEquals("0.0.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
     Assert.assertEquals(Const.ANY_TRANSPORT, referenceConfig.getTransport());
   }
 
@@ -107,7 +107,7 @@ public void createReferenceConfig_config() {
 
     Assert.assertEquals("app", referenceConfig.getMicroserviceVersionRule().getAppId());
     Assert.assertEquals("app:ms", referenceConfig.getMicroserviceVersionRule().getMicroserviceName());
-    Assert.assertEquals("1.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
+    Assert.assertEquals("1.0.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
     Assert.assertEquals(Const.RESTFUL, referenceConfig.getTransport());
   }
 
diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestCompatiblePathVersionMapper.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestCompatiblePathVersionMapper.java
index 2cfb9fc98..871c25d41 100644
--- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestCompatiblePathVersionMapper.java
+++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestCompatiblePathVersionMapper.java
@@ -35,7 +35,7 @@
   public void getOrCreate() {
     VersionRule versionRule = mapper.getOrCreate("v1");
 
-    Assert.assertEquals("1.0.0-2.0.0", versionRule.getVersionRule());
+    Assert.assertEquals("1.0.0.0-2.0.0.0", versionRule.getVersionRule());
   }
 
   @Test
@@ -82,6 +82,6 @@ public void createVersionRule_tooBig() {
   public void createVersionRule_32767() {
     VersionRule versionRule = mapper.getOrCreate("v32767");
 
-    Assert.assertEquals("32767.0.0+", versionRule.getVersionRule());
+    Assert.assertEquals("32767.0.0.0+", versionRule.getVersionRule());
   }
 }
diff --git a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
index 518740a82..e74f13aed 100644
--- a/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
+++ b/edge/edge-core/src/test/java/org/apache/servicecomb/edge/core/TestDefaultEdgeDispatcher.java
@@ -71,7 +71,7 @@ public void testOnRequest(@Mocked Router router, @Mocked Route route
         result = requst;
         requst.path();
         result = "/api/testService/v1/hello";
-        invocation.setVersionRule("1.0.0-2.0.0");
+        invocation.setVersionRule("1.0.0.0-2.0.0.0");
         invocation.init("testService", context, "/testService/v1/hello",
             Deencapsulation.getField(dispatcher, "httpServerFilters"));
         invocation.edgeInvoke();
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/MicroserviceFactory.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/MicroserviceFactory.java
index 97b2df482..2ace55f91 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/MicroserviceFactory.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/MicroserviceFactory.java
@@ -34,6 +34,7 @@
 import org.apache.servicecomb.serviceregistry.config.ConfigurePropertyUtils;
 import org.apache.servicecomb.serviceregistry.config.MicroservicePropertiesLoader;
 import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition;
+import org.apache.servicecomb.serviceregistry.version.Version;
 
 public class MicroserviceFactory {
   public Microservice create(String appId, String microserviceName) {
@@ -53,8 +54,11 @@ private Microservice createMicroserviceFromDefinition(Configuration configuratio
     microservice.setServiceName(configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_NAME_KEY,
         DEFAULT_MICROSERVICE_NAME));
     microservice.setAppId(configuration.getString(CONFIG_APPLICATION_ID_KEY, DEFAULT_APPLICATION_ID));
-    microservice.setVersion(configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
-        DEFAULT_MICROSERVICE_VERSION));
+    String version = configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
+        DEFAULT_MICROSERVICE_VERSION);
+    // just check version format
+    new Version(version);
+    microservice.setVersion(version);
     setDescription(configuration, microservice);
     microservice.setLevel(configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_ROLE_KEY, "FRONT"));
     microservice.setPaths(ConfigurePropertyUtils.getMicroservicePaths(configuration));
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/version/Version.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/version/Version.java
index 6e5a9542e..3ec9753d4 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/version/Version.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/version/Version.java
@@ -23,7 +23,7 @@
 
 // short version is enough
 public class Version implements Comparable<Version> {
-  private static final String[] ZERO = new String[] {"0", "0", "0"};
+  private static final String[] ZERO = new String[] {"0", "0", "0", "0"};
 
   private final short major;
 
@@ -31,6 +31,8 @@
 
   private final short patch;
 
+  private final short build;
+
   private final String version;
 
   private final long numberVersion;
@@ -38,20 +40,22 @@
   // 1
   // 1.0
   // 1.0.0
+  // 1.0.0.0
   public Version(String version) {
     Objects.requireNonNull(version);
 
     String[] versions = version.split("\\.", -1);
-    if (versions.length > 3) {
+    if (versions.length > 4) {
       throw new IllegalStateException(String.format("Invalid version \"%s\".", version));
     }
 
-    if (versions.length < 3) {
+    if (versions.length < 4) {
       versions = (String[]) ArrayUtils.addAll(versions, ZERO);
     }
     this.major = parseNumber("major", version, versions[0]);
     this.minor = parseNumber("minor", version, versions[1]);
     this.patch = parseNumber("patch", version, versions[2]);
+    this.build = parseNumber("build", version, versions[3]);
 
     this.version = combineStringVersion();
     this.numberVersion = combineVersion();
@@ -62,8 +66,8 @@ private short parseNumber(String name, String allVersion, String version) {
     try {
       value = Short.parseShort(version);
     } catch (NumberFormatException e) {
-      throw new IllegalStateException(String.format("Invalid %s \"%s\", version \"%s\".", name, version, allVersion),
-          e);
+      throw new IllegalStateException(
+          String.format("Invalid %s \"%s\", version \"%s\".", name, version, allVersion), e);
     }
 
     if (value < 0) {
@@ -74,20 +78,22 @@ private short parseNumber(String name, String allVersion, String version) {
     return value;
   }
 
-  public Version(short major, short minor, short patch) {
+  public Version(short major, short minor, short patch, short build) {
     this.major = major;
     this.minor = minor;
     this.patch = patch;
+    this.build = build;
     this.version = combineStringVersion();
     this.numberVersion = combineVersion();
   }
 
   private String combineStringVersion() {
-    return major + "." + minor + "." + patch;
+    return major + "." + minor + "." + patch + "." + build;
   }
 
+  // 1.0.0 equals 1.0.0.0
   private long combineVersion() {
-    return (long) major << 32 | (long) minor << 16 | (long) patch;
+    return (long) major << 48 | (long) minor << 32 | (long) patch << 16 | (long) build;
   }
 
   public short getMajor() {
@@ -102,6 +108,10 @@ public short getPatch() {
     return patch;
   }
 
+  public short getBuild() {
+    return build;
+  }
+
   public String getVersion() {
     return version;
   }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
index d3f69b0ba..c735f9bf9 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestMicroserviceFactory.java
@@ -18,7 +18,9 @@
 package org.apache.servicecomb.serviceregistry.api.registry;
 
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_DESCRIPTION_KEY;
+import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY;
 import static org.apache.servicecomb.serviceregistry.definition.DefinitionConst.CONFIG_ALLOW_CROSS_APP_KEY;
+import static org.apache.servicecomb.serviceregistry.definition.DefinitionConst.DEFAULT_MICROSERVICE_VERSION;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -27,12 +29,19 @@
 import org.apache.servicecomb.config.archaius.sources.MicroserviceConfigLoader;
 import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition;
 import org.junit.Assert;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.mockito.Mockito;
 
 import mockit.Deencapsulation;
+import mockit.Expectations;
+import mockit.Mocked;
 
 public class TestMicroserviceFactory {
+  @Rule
+  public ExpectedException expectedException = ExpectedException.none();
+
   @Test
   public void testAllowCrossApp() {
     MicroserviceFactory factory = new MicroserviceFactory();
@@ -125,4 +134,23 @@ public void testSetDescriptionOnBlankDescription() {
 
     Assert.assertEquals(" , ", microservice.getDescription());
   }
+
+  @Test
+  public void testCreateMicroserviceFromDefinitionWithInvalidVersion(@Mocked Configuration configuration,
+      @Mocked MicroserviceDefinition microserviceDefinition) {
+
+    new Expectations() {
+      {
+        configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
+            DEFAULT_MICROSERVICE_VERSION);
+        result = "x.y.x.1";
+        microserviceDefinition.getConfiguration();
+        result = configuration;
+      }
+    };
+    expectedException.equals(IllegalStateException.class);
+    expectedException.expectMessage("Invalid major \"x\", version \"x.y.x.1\".");
+    MicroserviceFactory microserviceFactory = new MicroserviceFactory();
+    microserviceFactory.create(microserviceDefinition);
+  }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/StaticMicroserviceVersionsTest.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/StaticMicroserviceVersionsTest.java
index ca3c3b3a5..a3317490f 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/StaticMicroserviceVersionsTest.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/StaticMicroserviceVersionsTest.java
@@ -66,7 +66,7 @@ public void addInstanceBasic() {
     StaticMicroserviceVersions staticMicroserviceVersions = createStaticMicroserviceVersions();
 
     MicroserviceInstance instance = new MicroserviceInstance();
-    String serviceVersion = "1.2.1";
+    String serviceVersion = "1.2.1.0";
     staticMicroserviceVersions.addInstances(serviceVersion, Collections.singletonList(instance));
 
     MicroserviceVersionRule versionRule = staticMicroserviceVersions.getOrCreateMicroserviceVersionRule(serviceVersion);
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestAppManager.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestAppManager.java
index e76d23bbe..17b5da976 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestAppManager.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestAppManager.java
@@ -78,7 +78,7 @@ public void getOrCreateMicroserviceVersionRule() {
 
     MicroserviceVersionRule microserviceVersionRule =
         appManager.getOrCreateMicroserviceVersionRule(appId, serviceName, versionRule);
-    Assert.assertEquals("0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
+    Assert.assertEquals("0.0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
     Assert.assertNull(microserviceVersionRule.getLatestMicroserviceVersion());
   }
 
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestDefaultMicroserviceVersionFactory.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestDefaultMicroserviceVersionFactory.java
index 3d9056c55..5dfe428fc 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestDefaultMicroserviceVersionFactory.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestDefaultMicroserviceVersionFactory.java
@@ -43,6 +43,6 @@ public void create(@Mocked Microservice microservice, @Mocked ServiceRegistry se
 
     MicroserviceVersion microserviceVersion = new DefaultMicroserviceVersionFactory().create("", microserviceId);
     Assert.assertSame(microservice, microserviceVersion.getMicroservice());
-    Assert.assertEquals("1.0.0", microserviceVersion.getVersion().getVersion());
+    Assert.assertEquals("1.0.0.0", microserviceVersion.getVersion().getVersion());
   }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceManager.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceManager.java
index 681272166..9fbdf0f4d 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceManager.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceManager.java
@@ -87,7 +87,7 @@ public void getOrCreateMicroserviceVersionRule() {
 
     MicroserviceVersionRule microserviceVersionRule =
         microserviceManager.getOrCreateMicroserviceVersionRule(serviceName, versionRule);
-    Assert.assertEquals("0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
+    Assert.assertEquals("0.0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
     Assert.assertNull(microserviceVersionRule.getLatestMicroserviceVersion());
     Assert.assertEquals(1, cachedVersions.size());
   }
@@ -111,7 +111,7 @@ void onMicroserviceInstanceChanged(MicroserviceInstanceChangedEvent changedEvent
 
     MicroserviceVersionRule microserviceVersionRule =
         microserviceManager.getOrCreateMicroserviceVersionRule(serviceName, versionRule);
-    Assert.assertEquals("0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
+    Assert.assertEquals("0.0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
     Assert.assertNull(microserviceVersionRule.getLatestMicroserviceVersion());
     Assert.assertEquals(0, cachedVersions.size());
 
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersion.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersion.java
index b6b036da5..279743a9c 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersion.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersion.java
@@ -56,7 +56,7 @@ public void constructNormal(@Mocked ServiceRegistry serviceRegistry) {
     MicroserviceVersion microserviceVersion = MicroserviceVersionTestUtils
         .createMicroserviceVersion("1", "1.0.0", serviceRegistry);
     Assert.assertEquals("1", microserviceVersion.getMicroservice().getServiceId());
-    Assert.assertEquals("1.0.0", microserviceVersion.getVersion().getVersion());
+    Assert.assertEquals("1.0.0.0", microserviceVersion.getVersion().getVersion());
   }
 
   @Test
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
index d78bf1850..996a865a8 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/consumer/TestMicroserviceVersionRule.java
@@ -33,7 +33,7 @@
 
   @Test
   public void getVersionRule() {
-    Assert.assertEquals("1.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
+    Assert.assertEquals("1.0.0.0+", microserviceVersionRule.getVersionRule().getVersionRule());
   }
 
   @Test
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
index 73483fac1..718e64917 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestRemoteServiceRegistry.java
@@ -16,6 +16,9 @@
  */
 package org.apache.servicecomb.serviceregistry.registry;
 
+import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY;
+import static org.apache.servicecomb.serviceregistry.definition.DefinitionConst.DEFAULT_MICROSERVICE_VERSION;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.concurrent.CountDownLatch;
@@ -23,6 +26,7 @@
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.configuration.Configuration;
 import org.apache.servicecomb.config.ConfigUtil;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
@@ -128,7 +132,8 @@ public void run() {
 
   @Test
   public void onPullMicroserviceVersionsInstancesEvent(@Injectable ServiceRegistryConfig config,
-      @Injectable MicroserviceDefinition definition, @Mocked MicroserviceVersions microserviceVersions) {
+      @Injectable MicroserviceDefinition definition, @Mocked MicroserviceVersions microserviceVersions,
+      @Mocked Configuration configuration) {
     PullMicroserviceVersionsInstancesEvent event = new PullMicroserviceVersionsInstancesEvent(microserviceVersions, 1);
 
     ScheduledThreadPoolExecutor taskPool = new MockUp<ScheduledThreadPoolExecutor>() {
@@ -141,6 +146,16 @@ public void onPullMicroserviceVersionsInstancesEvent(@Injectable ServiceRegistry
       }
     }.getMockInstance();
 
+    new Expectations() {
+      {
+        definition.getConfiguration();
+        result = configuration;
+        configuration.getString(CONFIG_QUALIFIED_MICROSERVICE_VERSION_KEY,
+            DEFAULT_MICROSERVICE_VERSION);
+        result = "1.0.0";
+      }
+    };
+
     expectedException.expect(Error.class);
     expectedException.expectMessage(Matchers.is("ok"));
 
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersion.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersion.java
index 2952d3eed..63025de05 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersion.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersion.java
@@ -36,7 +36,7 @@
   @Test
   public void constructFromStringNormalOnlyMajor() {
     version = new Version("1");
-    Assert.assertEquals("1.0.0", version.getVersion());
+    Assert.assertEquals("1.0.0.0", version.getVersion());
     Assert.assertEquals(1, version.getMajor());
     Assert.assertEquals(0, version.getMinor());
     Assert.assertEquals(0, version.getPatch());
@@ -45,21 +45,33 @@ public void constructFromStringNormalOnlyMajor() {
   @Test
   public void constructFromStringNormalOnlyMajorMinor() {
     version = new Version("1.1");
-    Assert.assertEquals("1.1.0", version.getVersion());
+    Assert.assertEquals("1.1.0.0", version.getVersion());
     Assert.assertEquals(1, version.getMajor());
     Assert.assertEquals(1, version.getMinor());
     Assert.assertEquals(0, version.getPatch());
   }
 
   @Test
-  public void constructFromStringNormalAll() {
+  public void constructFromStringOnlyMajorMinorPatch() {
     version = new Version("1.1.1");
-    Assert.assertEquals("1.1.1", version.getVersion());
+    Assert.assertEquals("1.1.1.0", version.getVersion());
     Assert.assertEquals(1, version.getMajor());
     Assert.assertEquals(1, version.getMinor());
     Assert.assertEquals(1, version.getPatch());
+    Assert.assertEquals(0, version.getBuild());
   }
 
+  @Test
+  public void constructFromStringNormal() {
+    version = new Version("1.1.1.1");
+    Assert.assertEquals("1.1.1.1", version.getVersion());
+    Assert.assertEquals(1, version.getMajor());
+    Assert.assertEquals(1, version.getMinor());
+    Assert.assertEquals(1, version.getPatch());
+    Assert.assertEquals(1, version.getBuild());
+  }
+
+
   @Test
   public void constructFromStringInvalidNull() {
     expectedException.expect(NullPointerException.class);
@@ -119,54 +131,72 @@ public void constructFromStringInvalidPatchNegative() {
   }
 
   @Test
-  public void constructFromStringInvalidTooManyPart() {
+  public void constructFromStringInvalidPatchDot() {
     expectedException.expect(IllegalStateException.class);
-    expectedException.expectMessage(Matchers.is("Invalid version \"1.1.1.\"."));
+    expectedException.expectMessage(Matchers.is("Invalid build \"\", version \"1.1.1.\"."));
+    expectedException.expectCause(Matchers.instanceOf(NumberFormatException.class));
 
     version = new Version("1.1.1.");
   }
 
+  @Test
+  public void constructFromStringInvalidBuildNegative() {
+    expectedException.expect(IllegalStateException.class);
+    expectedException.expectMessage(Matchers.is("build \"-1\" can not be negative, version \"1.1.1.-1\"."));
+
+    version = new Version("1.1.1.-1");
+  }
+
+  @Test
+  public void constructFromStringInvalidTooManyPart() {
+    expectedException.expect(IllegalStateException.class);
+    expectedException.expectMessage(Matchers.is("Invalid version \"1.1.1.1.\"."));
+    version = new Version("1.1.1.1.");
+  }
+
   @Test
   public void constructFromNumber() {
-    version = new Version(s1, s1, s1);
-    Assert.assertEquals("1.1.1", version.getVersion());
+    version = new Version(s1, s1, s1, s1);
+    Assert.assertEquals("1.1.1.1", version.getVersion());
     Assert.assertEquals(1, version.getMajor());
     Assert.assertEquals(1, version.getMinor());
     Assert.assertEquals(1, version.getPatch());
+    Assert.assertEquals(1, version.getPatch());
   }
 
   @Test
   public void testToString() {
-    version = new Version(s1, s1, s1);
-    Assert.assertEquals("1.1.1", version.toString());
+    version = new Version(s1, s1, s1, s1);
+    Assert.assertEquals("1.1.1.1", version.toString());
   }
 
   @Test
   public void testHashCode() {
-    version = new Version(s1, s1, s1);
+    version = new Version(s1, s1, s1, s1);
     Assert.assertEquals(version.getVersion().hashCode(), version.hashCode());
   }
 
   @Test
   public void testEquals() {
-    version = new Version(s1, s1, s1);
+    version = new Version(s1, s1, s1, s1);
 
     Assert.assertTrue(version.equals(version));
-    Assert.assertTrue(version.equals(new Version(s1, s1, s1)));
+    Assert.assertTrue(version.equals(new Version(s1, s1, s1, s1)));
     Assert.assertFalse(version.equals(null));
   }
 
   @Test
   public void compareTo() {
-    version = new Version(s1, s1, s1);
+    version = new Version(s1, s1, s1, s1);
 
     Assert.assertEquals(0, version.compareTo(version));
-    Assert.assertEquals(0, version.compareTo(new Version(s1, s1, s1)));
+    Assert.assertEquals(0, version.compareTo(new Version(s1, s1, s1, s1)));
 
-    Assert.assertEquals(-1, version.compareTo(new Version(s1, s1, s2)));
-    Assert.assertEquals(-1, version.compareTo(new Version(s1, s2, s1)));
-    Assert.assertEquals(-1, version.compareTo(new Version(s2, s1, s1)));
+    Assert.assertEquals(-1, version.compareTo(new Version(s1, s1, s2, s1)));
+    Assert.assertEquals(-1, version.compareTo(new Version(s1, s2, s1, s1)));
+    Assert.assertEquals(-1, version.compareTo(new Version(s2, s1, s1, s1)));
 
-    Assert.assertEquals(1, version.compareTo(new Version((short) 0, Short.MAX_VALUE, Short.MAX_VALUE)));
+    Assert.assertEquals(1, version.compareTo(new Version((short) 0,
+        Short.MAX_VALUE, Short.MAX_VALUE, Short.MAX_VALUE)));
   }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleFixedParser.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleFixedParser.java
index 99ba3019c..37596056f 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleFixedParser.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleFixedParser.java
@@ -28,7 +28,7 @@
   @Test
   public void parseNormal() {
     versionRule = parser.parse("1");
-    Assert.assertEquals("1.0.0", versionRule.getVersionRule());
+    Assert.assertEquals("1.0.0.0", versionRule.getVersionRule());
   }
 
   @Test
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleRangeParser.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleRangeParser.java
index cd2da7e67..a44a23b64 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleRangeParser.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleRangeParser.java
@@ -34,7 +34,7 @@ public void parseInvalid() {
 
   @Test
   public void parseNormal() {
-    Assert.assertEquals("1.0.0-2.0.0", versionRule.getVersionRule());
+    Assert.assertEquals("1.0.0.0-2.0.0.0", versionRule.getVersionRule());
   }
 
   @Test
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleStartFromParser.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleStartFromParser.java
index 037feeda8..a99f39f17 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleStartFromParser.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionRuleStartFromParser.java
@@ -34,7 +34,7 @@ public void parseInvalid() {
 
   @Test
   public void parseNormal() {
-    Assert.assertEquals("1.0.0+", versionRule.getVersionRule());
+    Assert.assertEquals("1.0.0.0+", versionRule.getVersionRule());
   }
 
   @Test
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionUtils.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionUtils.java
index a7ffcf490..cd8a46032 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionUtils.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/TestVersionUtils.java
@@ -41,7 +41,7 @@ public void teardown() {
   public void getOrCreate() {
     Version v = VersionUtils.getOrCreate("1.0.0");
 
-    Assert.assertEquals("1.0.0", v.getVersion());
+    Assert.assertEquals("1.0.0.0", v.getVersion());
     Assert.assertSame(v, VersionUtils.getOrCreate("1.0.0"));
   }
 }
diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/VersionConst.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/VersionConst.java
index 9e53aab92..d92f03ea7 100644
--- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/VersionConst.java
+++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/version/VersionConst.java
@@ -18,11 +18,11 @@
 package org.apache.servicecomb.serviceregistry.version;
 
 public interface VersionConst {
-  Version v0 = new Version((short) 0, (short) 0, (short) 0);
+  Version v0 = new Version((short) 0, (short) 0, (short) 0, (short) 0);
 
   Version v1 = new Version("1");
 
-  Version v1Max = new Version((short) 1, Short.MAX_VALUE, Short.MAX_VALUE);
+  Version v1Max = new Version((short) 1, Short.MAX_VALUE, Short.MAX_VALUE, Short.MAX_VALUE);
 
   Version v2 = new Version("2");
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services