This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git
commit cee58b7ee47fda6450c6da09930dfedc157ede53 Author: weichao666 <[email protected]> AuthorDate: Mon Mar 12 17:40:03 2018 +0800 [SCB-394] framework version support SC which earlier than 1.0.0 --- .../servicecomb/serviceregistry/api/Const.java | 8 + .../api/registry/FrameworkVersions.java | 17 ++ .../api/registry/MicroserviceFactory.java | 9 - .../api/registry/ServiceCenterConfig.java | 200 +++++++++++++++++++++ .../api/registry/ServiceCenterInfo.java | 70 ++++++++ .../client/LocalServiceRegistryClientImpl.java | 12 ++ .../client/ServiceRegistryClient.java | 6 + .../client/http/ServiceRegistryClientImpl.java | 22 +++ .../registry/AbstractServiceRegistry.java | 14 ++ .../servicecomb/serviceregistry/TestRegistry.java | 11 ++ .../api/registry/TestFrameworkVersions.java | 23 +++ .../api/registry/TestServiceCenterConfig.java | 91 ++++++++++ .../api/registry/TestServiceCenterInfo.java | 53 ++++++ .../client/LocalServiceRegistryClientImplTest.java | 7 + .../client/http/TestServiceRegistryClientImpl.java | 46 +++++ .../registry/TestLocalServiceRegistry.java | 25 +++ .../registry/TestRemoteServiceRegistry.java | 16 ++ 17 files changed, 621 insertions(+), 9 deletions(-) diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java index c9f7e84..5f3173a 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/Const.java @@ -137,6 +137,14 @@ public final class Const { } } + public static final String SERVICECENTER_VERSION; + static { + if (VERSION_V3.equals(CURRENT_VERSION)) { + SERVICECENTER_VERSION = "/version"; + } else { + SERVICECENTER_VERSION = V4_PREFIX + "/version"; + } + } } public static final String REGISTRY_APP_ID = "default"; diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java index 5c87855..a9dce0f 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/FrameworkVersions.java @@ -22,12 +22,29 @@ import java.util.Map; import java.util.Map.Entry; import java.util.ServiceLoader; +import org.apache.servicecomb.serviceregistry.RegistryUtils; import org.apache.servicecomb.serviceregistry.api.Versions; +import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FrameworkVersions { + private static final Logger LOGGER = LoggerFactory.getLogger(FrameworkVersions.class); private static final ServiceLoader<Versions> frameworkVersions = ServiceLoader.load(Versions.class); public static String allVersions() { + ServiceRegistryClient client = RegistryUtils.getServiceRegistryClient(); + ServiceCenterInfo serviceCenterInfo = client.getServiceCenterInfo(); + if (serviceCenterInfo == null) { + LOGGER.error("query servicecenter version info failed."); + } + String scVersion = serviceCenterInfo.getVersion(); + //old scVersion which earlier than 1.0.0 not report frameworkVersion, e.g. 0.5.0 + String oldScVersion = "0.[0-5].0+"; + if (scVersion.matches(oldScVersion)) { + return ""; + } + Map<String, String> versions = new HashMap<>(); Entry<String, String> entry; StringBuffer sb = new StringBuffer(); 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 4e40aa1..beba2d9 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 @@ -17,8 +17,6 @@ package org.apache.servicecomb.serviceregistry.api.registry; import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_APPLICATION_ID_KEY; -import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_DEFAULT_REGISTER_BY; -import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_FRAMEWORK_DEFAULT_NAME; 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_NAME_KEY; import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_QUALIFIED_MICROSERVICE_ROLE_KEY; @@ -70,13 +68,6 @@ public class MicroserviceFactory { microservice.getServiceName())); } - // use default values, we can add configure item in future. - Framework framework = new Framework(); - framework.setName(CONFIG_FRAMEWORK_DEFAULT_NAME); - framework.setVersion(FrameworkVersions.allVersions()); - microservice.setFramework(framework); - microservice.setRegisterBy(CONFIG_DEFAULT_REGISTER_BY); - return microservice; } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterConfig.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterConfig.java new file mode 100644 index 0000000..26049e1 --- /dev/null +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterConfig.java @@ -0,0 +1,200 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.serviceregistry.api.registry; + +public class ServiceCenterConfig { + private int maxHeaderBytes; + + private int maxBodyBytes; + + private String readHeaderTimeout; + + private String readTimeout; + + private String idleTimeout; + + private String writeTimeout; + + private String limitTTLUnit; + + private int limitConnections; + + private String limitIPLookup; + + private String sslEnabled; + + private String sslMinVersion; + + private String sslVerifyPeer; + + private String sslCiphers; + + private String autoSyncInterval; + + private int compactIndexDelta; + + private String compactInterval; + + private int logRotateSize; + + private int logBackupCount; + + public int getMaxHeaderBytes() { + return maxHeaderBytes; + } + + public void setMaxHeaderBytes(int maxHeaderBytes) { + this.maxHeaderBytes = maxHeaderBytes; + } + + public int getMaxBodyBytes() { + return maxBodyBytes; + } + + public void setMaxBodyBytes(int maxBodyBytes) { + this.maxBodyBytes = maxBodyBytes; + } + + public String getReadHeaderTimeout() { + return readHeaderTimeout; + } + + public void setReadHeaderTimeout(String readHeaderTimeout) { + this.readHeaderTimeout = readHeaderTimeout; + } + + public String getReadTimeout() { + return readTimeout; + } + + public void setReadTimeout(String readTimeout) { + this.readTimeout = readTimeout; + } + + public String getIdleTimeout() { + return idleTimeout; + } + + public void setIdleTimeout(String idleTimeout) { + this.idleTimeout = idleTimeout; + } + + public String getWriteTimeout() { + return writeTimeout; + } + + public void setWriteTimeout(String writeTimeout) { + this.writeTimeout = writeTimeout; + } + + public String getLimitTTLUnit() { + return limitTTLUnit; + } + + public void setLimitTTLUnit(String limitTTLUnit) { + this.limitTTLUnit = limitTTLUnit; + } + + public int getLimitConnections() { + return limitConnections; + } + + public void setLimitConnections(int limitConnections) { + this.limitConnections = limitConnections; + } + + public String getLimitIPLookup() { + return limitIPLookup; + } + + public void setLimitIPLookup(String limitIPLookup) { + this.limitIPLookup = limitIPLookup; + } + + public String getSslEnabled() { + return sslEnabled; + } + + public void setSslEnabled(String sslEnabled) { + this.sslEnabled = sslEnabled; + } + + public String getSslMinVersion() { + return sslMinVersion; + } + + public void setSslMinVersion(String sslMinVersion) { + this.sslMinVersion = sslMinVersion; + } + + public String getSslVerifyPeer() { + return sslVerifyPeer; + } + + public void setSslVerifyPeer(String sslVerifyPeer) { + this.sslVerifyPeer = sslVerifyPeer; + } + + public String getSslCiphers() { + return sslCiphers; + } + + public void setSslCiphers(String sslCiphers) { + this.sslCiphers = sslCiphers; + } + + public String getAutoSyncInterval() { + return autoSyncInterval; + } + + public void setAutoSyncInterval(String autoSyncInterval) { + this.autoSyncInterval = autoSyncInterval; + } + + public int getCompactIndexDelta() { + return compactIndexDelta; + } + + public void setCompactIndexDelta(int compactIndexDelta) { + this.compactIndexDelta = compactIndexDelta; + } + + public String getCompactInterval() { + return compactInterval; + } + + public void setCompactInterval(String compactInterval) { + this.compactInterval = compactInterval; + } + + public int getLogRotateSize() { + return logRotateSize; + } + + public void setLogRotateSize(int logRotateSize) { + this.logRotateSize = logRotateSize; + } + + public int getLogBackupCount() { + return logBackupCount; + } + + public void setLogBackupCount(int logBackupCount) { + this.logBackupCount = logBackupCount; + } +} diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterInfo.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterInfo.java new file mode 100644 index 0000000..65dca2b --- /dev/null +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/api/registry/ServiceCenterInfo.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.serviceregistry.api.registry; + +public class ServiceCenterInfo { + private String version; + + private String buildTag; + + private String runMode; + + private String apiVersion; + + private ServiceCenterConfig config; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getBuildTag() { + return buildTag; + } + + public void setBuildTag(String buildTag) { + this.buildTag = buildTag; + } + + public String getRunMode() { + return runMode; + } + + public void setRunMode(String runMode) { + this.runMode = runMode; + } + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public ServiceCenterConfig getConfig() { + return config; + } + + public void setConfig(ServiceCenterConfig config) { + this.config = config; + } +} diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java index 663cde3..2cb228f 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImpl.java @@ -34,6 +34,8 @@ import java.util.concurrent.atomic.AtomicInteger; import org.apache.servicecomb.foundation.vertx.AsyncResultCallback; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.api.response.FindInstancesResponse; import org.apache.servicecomb.serviceregistry.api.response.HeartbeatResponse; import org.apache.servicecomb.serviceregistry.api.response.MicroserviceInstanceChangedEvent; @@ -371,5 +373,15 @@ public class LocalServiceRegistryClientImpl implements ServiceRegistryClient { return instances.get(instanceId); } + @Override + public ServiceCenterInfo getServiceCenterInfo() { + ServiceCenterInfo info = new ServiceCenterInfo(); + info.setVersion("1.0.0"); + info.setBuildTag("20180312"); + info.setRunMode("dev"); + info.setApiVersion("4.0.0"); + info.setConfig(new ServiceCenterConfig()); + return info; + } } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java index 6167824..2cf20b9 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/ServiceRegistryClient.java @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.servicecomb.foundation.vertx.AsyncResultCallback; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.api.response.HeartbeatResponse; import org.apache.servicecomb.serviceregistry.api.response.MicroserviceInstanceChangedEvent; import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances; @@ -140,4 +141,9 @@ public interface ServiceRegistryClient { * @return MicroserviceInstance */ MicroserviceInstance findServiceInstance(String serviceId, String instanceId); + + /** + * get ServiceCenterVersionInfo + */ + ServiceCenterInfo getServiceCenterInfo(); } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java index d48d0bc..ab7f597 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ServiceRegistryClientImpl.java @@ -35,6 +35,7 @@ import org.apache.servicecomb.foundation.vertx.AsyncResultCallback; import org.apache.servicecomb.serviceregistry.api.Const; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.api.request.CreateSchemaRequest; import org.apache.servicecomb.serviceregistry.api.request.CreateServiceRequest; import org.apache.servicecomb.serviceregistry.api.request.RegisterInstanceRequest; @@ -735,4 +736,25 @@ public final class ServiceRegistryClientImpl implements ServiceRegistryClient { return null; } } + + @Override + public ServiceCenterInfo getServiceCenterInfo() { + Holder<ServiceCenterInfo> holder = new Holder<>(); + IpPort ipPort = ipPortManager.getAvailableAddress(); + + CountDownLatch countDownLatch = new CountDownLatch(1); + RestUtils.get(ipPort, + Const.REGISTRY_API.SERVICECENTER_VERSION, + new RequestParam(), + syncHandler(countDownLatch, ServiceCenterInfo.class, holder)); + try { + countDownLatch.await(); + if (holder.value != null) { + return holder.value; + } + } catch (Exception e) { + LOGGER.error("query servicecenter version info failed.", e); + } + return null; + } } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java index 9b67ed5..6ad86bf 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java @@ -16,6 +16,9 @@ */ package org.apache.servicecomb.serviceregistry.registry; +import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_DEFAULT_REGISTER_BY; +import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.CONFIG_FRAMEWORK_DEFAULT_NAME; + import java.util.HashMap; import java.util.List; import java.util.Map; @@ -25,6 +28,8 @@ import org.apache.servicecomb.serviceregistry.Features; import org.apache.servicecomb.serviceregistry.ServiceRegistry; import org.apache.servicecomb.serviceregistry.api.Const; import org.apache.servicecomb.serviceregistry.api.registry.BasePath; +import org.apache.servicecomb.serviceregistry.api.registry.Framework; +import org.apache.servicecomb.serviceregistry.api.registry.FrameworkVersions; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceFactory; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; @@ -162,11 +167,20 @@ public abstract class AbstractServiceRegistry implements ServiceRegistry { public void run() { loadStaticConfiguration(); + loadFrameworkVersions(); // try register // if failed, then retry in thread serviceCenterTask.init(); } + private void loadFrameworkVersions() { + Framework framework = new Framework(); + framework.setName(CONFIG_FRAMEWORK_DEFAULT_NAME); + framework.setVersion(FrameworkVersions.allVersions()); + microservice.setFramework(framework); + microservice.setRegisterBy(CONFIG_DEFAULT_REGISTER_BY); + } + private void loadStaticConfiguration() { // TODO 如果yaml定义了paths规则属性,替换默认值,现需要DynamicPropertyFactory支持数组获取 List<BasePath> paths = microservice.getPaths(); diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java index 8237ef4..f4e9382 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/TestRegistry.java @@ -34,6 +34,8 @@ import org.apache.servicecomb.config.ConfigUtil; import org.apache.servicecomb.foundation.common.net.NetUtils; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; +import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances; import org.apache.servicecomb.serviceregistry.registry.ServiceRegistryFactory; import org.junit.AfterClass; @@ -55,6 +57,9 @@ import mockit.Mocked; public class TestRegistry { private static final AbstractConfiguration inMemoryConfig = new ConcurrentMapConfiguration(); + private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class); + private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class); + private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class); @BeforeClass public static void initSetup() throws Exception { @@ -64,6 +69,11 @@ public class TestRegistry { configuration.addConfiguration(inMemoryConfig); ConfigurationManager.install(configuration); + + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry); + Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient); + Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo); + Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0"); } @AfterClass @@ -72,6 +82,7 @@ public class TestRegistry { Deencapsulation.setField(ConfigurationManager.class, "customConfigurationInstalled", false); Deencapsulation.setField(DynamicPropertyFactory.class, "config", null); RegistryUtils.setServiceRegistry(null); + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null); } @Before diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java index d02bd55..5d16727 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestFrameworkVersions.java @@ -17,10 +17,33 @@ package org.apache.servicecomb.serviceregistry.api.registry; +import org.apache.servicecomb.serviceregistry.RegistryUtils; +import org.apache.servicecomb.serviceregistry.ServiceRegistry; +import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; +import org.junit.AfterClass; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import org.mockito.Mockito; +import mockit.Deencapsulation; public class TestFrameworkVersions { + private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class); + private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class); + private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class); + + @BeforeClass + public static void init() { + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry); + Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient); + Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo); + Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0"); + } + + @AfterClass + public static void teardown() { + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null); + } @Test public void testFrameworkVersions() { diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterConfig.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterConfig.java new file mode 100644 index 0000000..101385a --- /dev/null +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterConfig.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.serviceregistry.api.registry; + +import org.junit.Assert; +import org.junit.Test; + +public class TestServiceCenterConfig { + ServiceCenterConfig config = new ServiceCenterConfig(); + + @Test + public void testDefaultValues() { + Assert.assertEquals(0, config.getMaxHeaderBytes()); + Assert.assertEquals(0, config.getMaxBodyBytes()); + Assert.assertNull(config.getReadHeaderTimeout()); + Assert.assertNull(config.getReadTimeout()); + Assert.assertNull(config.getIdleTimeout()); + Assert.assertNull(config.getWriteTimeout()); + Assert.assertNull(config.getLimitTTLUnit()); + Assert.assertEquals(0, config.getLimitConnections()); + Assert.assertNull(config.getLimitIPLookup()); + Assert.assertNull(config.getSslEnabled()); + Assert.assertNull(config.getSslMinVersion()); + Assert.assertNull(config.getSslVerifyPeer()); + Assert.assertNull(config.getSslCiphers()); + Assert.assertNull(config.getAutoSyncInterval()); + Assert.assertEquals(0, config.getCompactIndexDelta()); + Assert.assertNull(config.getCompactInterval()); + Assert.assertEquals(0, config.getLogRotateSize()); + Assert.assertEquals(0, config.getLogBackupCount()); + } + + @Test + public void testInitializedValues() { + initMicroservice(); //Initialize the Object + Assert.assertEquals(10, config.getMaxHeaderBytes()); + Assert.assertEquals(10, config.getMaxBodyBytes()); + Assert.assertEquals("60s", config.getReadHeaderTimeout()); + Assert.assertEquals("60s", config.getReadTimeout()); + Assert.assertEquals("60s", config.getIdleTimeout()); + Assert.assertEquals("60s", config.getWriteTimeout()); + Assert.assertEquals("s", config.getLimitTTLUnit()); + Assert.assertEquals(0, config.getLimitConnections()); + Assert.assertEquals("xxx", config.getLimitIPLookup()); + Assert.assertEquals("false", config.getSslEnabled()); + Assert.assertEquals("xxx", config.getSslMinVersion()); + Assert.assertEquals("true", config.getSslVerifyPeer()); + Assert.assertEquals("xxx", config.getSslCiphers()); + Assert.assertEquals("30s", config.getAutoSyncInterval()); + Assert.assertEquals(100, config.getCompactIndexDelta()); + Assert.assertEquals("100", config.getCompactInterval()); + Assert.assertEquals(20, config.getLogRotateSize()); + Assert.assertEquals(50, config.getLogBackupCount()); + } + + private void initMicroservice() { + config.setMaxHeaderBytes(10); + config.setMaxBodyBytes(10); + config.setReadHeaderTimeout("60s"); + config.setReadTimeout("60s"); + config.setIdleTimeout("60s"); + config.setWriteTimeout("60s"); + config.setLimitTTLUnit("s"); + config.setLimitConnections(0); + config.setLimitIPLookup("xxx"); + config.setSslEnabled("false"); + config.setSslMinVersion("xxx"); + config.setSslVerifyPeer("true"); + config.setSslCiphers("xxx"); + config.setAutoSyncInterval("30s"); + config.setCompactIndexDelta(100); + config.setCompactInterval("100"); + config.setLogRotateSize(20); + config.setLogBackupCount(50); + } +} diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterInfo.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterInfo.java new file mode 100644 index 0000000..50c4bb0 --- /dev/null +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/api/registry/TestServiceCenterInfo.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.serviceregistry.api.registry; + +import org.junit.Assert; +import org.junit.Test; + +public class TestServiceCenterInfo { + ServiceCenterInfo info = new ServiceCenterInfo(); + ServiceCenterConfig config = new ServiceCenterConfig(); + + @Test + public void testDefaultValues() { + Assert.assertNull(info.getVersion()); + Assert.assertNull(info.getBuildTag()); + Assert.assertNull(info.getRunMode()); + Assert.assertNull(info.getApiVersion()); + Assert.assertNull(info.getConfig()); + } + + @Test + public void testInitializedValues() { + initMicroservice(); //Initialize the Object + Assert.assertEquals("x.x.x", info.getVersion()); + Assert.assertEquals("xxx", info.getBuildTag()); + Assert.assertEquals("dev", info.getRunMode()); + Assert.assertEquals("x.x.x", info.getApiVersion()); + Assert.assertNotNull(info.getConfig()); + } + + private void initMicroservice() { + info.setVersion("x.x.x"); + info.setBuildTag("xxx"); + info.setRunMode("dev"); + info.setApiVersion("x.x.x"); + info.setConfig(config); + } +} diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java index b4eee38..c841f25 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/LocalServiceRegistryClientImplTest.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.client.http.MicroserviceInstances; import org.apache.servicecomb.serviceregistry.definition.DefinitionConst; import org.hamcrest.Matchers; @@ -172,4 +173,10 @@ public class LocalServiceRegistryClientImplTest { String instanceId = registryClient.registerMicroserviceInstance(instance); Assert.assertNotNull(registryClient.findServiceInstance(microservice.getServiceId(), instanceId)); } + + @Test + public void testGetServiceCenterInfo() { + ServiceCenterInfo serviceCenterInfo = registryClient.getServiceCenterInfo(); + Assert.assertEquals("1.0.0", serviceCenterInfo.getVersion()); + } } diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java index 56af6d2..23bdf94 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestServiceRegistryClientImpl.java @@ -32,6 +32,8 @@ import org.apache.log4j.spi.LoggingEvent; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceFactory; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterConfig; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.api.response.GetExistenceResponse; import org.apache.servicecomb.serviceregistry.client.ClientException; import org.apache.servicecomb.serviceregistry.client.IpPortManager; @@ -321,4 +323,48 @@ public class TestServiceRegistryClientImpl { Assert.assertNull(oClient.findServiceInstance(null, "appId", "serviceName", "1.0.0+")); } + + @Test + public void testGetServiceCenterInfoSuccess() { + ServiceCenterInfo serviceCenterInfo = new ServiceCenterInfo(); + serviceCenterInfo.setVersion("x.x.x"); + serviceCenterInfo.setBuildTag("xxx"); + serviceCenterInfo.setRunMode("dev"); + serviceCenterInfo.setApiVersion("x.x.x"); + serviceCenterInfo.setConfig(new ServiceCenterConfig()); + + new MockUp<RestUtils>() { + @Mock + void httpDo(RequestContext requestContext, Handler<RestResponse> responseHandler) { + Holder<ServiceCenterInfo> holder = Deencapsulation.getField(responseHandler, "arg$4"); + holder.value = serviceCenterInfo; + } + }; + ServiceCenterInfo info = oClient.getServiceCenterInfo(); + Assert.assertEquals("x.x.x", info.getVersion()); + Assert.assertEquals("xxx", info.getBuildTag()); + Assert.assertEquals("dev", info.getRunMode()); + Assert.assertNotNull(info.getConfig()); + } + + @Test + public void testGetServiceCenterInfoException() { + InterruptedException e = new InterruptedException(); + new MockUp<CountDownLatch>() { + @Mock + public void await() throws InterruptedException { + throw e; + } + }; + + new RegisterSchemaTester() { + void doRun(java.util.List<LoggingEvent> events) { + oClient.getServiceCenterInfo(); + Assert.assertEquals( + "query servicecenter version info failed.", + events.get(0).getMessage()); + Assert.assertEquals(e, events.get(0).getThrowableInformation().getThrowable()); + } + }.run(); + } } diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java index b422d59..cbdcc73 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/registry/TestLocalServiceRegistry.java @@ -19,12 +19,37 @@ package org.apache.servicecomb.serviceregistry.registry; import java.util.HashMap; import java.util.Map; +import org.apache.servicecomb.serviceregistry.RegistryUtils; import org.apache.servicecomb.serviceregistry.ServiceRegistry; import org.apache.servicecomb.serviceregistry.api.registry.Microservice; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; +import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; +import org.junit.AfterClass; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import org.mockito.Mockito; + +import mockit.Deencapsulation; public class TestLocalServiceRegistry { + private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class); + private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class); + private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class); + + @BeforeClass + public static void init() { + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry); + Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient); + Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo); + Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0"); + } + + @AfterClass + public static void teardown() { + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null); + } + @Test public void testLifeCycle() { ServiceRegistry serviceRegistry = ServiceRegistryFactory.createLocal(); 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 d46ef93..8b21c34 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 @@ -25,6 +25,7 @@ import org.apache.servicecomb.config.ConfigUtil; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.serviceregistry.RegistryUtils; import org.apache.servicecomb.serviceregistry.ServiceRegistry; +import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo; import org.apache.servicecomb.serviceregistry.client.LocalServiceRegistryClientImpl; import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig; @@ -33,10 +34,12 @@ import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition; import org.apache.servicecomb.serviceregistry.task.event.PullMicroserviceVersionsInstancesEvent; import org.apache.servicecomb.serviceregistry.task.event.ShutdownEvent; import org.hamcrest.Matchers; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.mockito.Mockito; import com.google.common.eventbus.EventBus; @@ -48,6 +51,10 @@ import mockit.MockUp; import mockit.Mocked; public class TestRemoteServiceRegistry { + private static ServiceRegistryClient registryClient = Mockito.mock(ServiceRegistryClient.class); + private static ServiceRegistry serviceRegistry = Mockito.mock(ServiceRegistry.class); + private static ServiceCenterInfo serviceCenterInfo = Mockito.mock(ServiceCenterInfo.class); + class TestingRemoteServiceRegistry extends RemoteServiceRegistry { public TestingRemoteServiceRegistry(EventBus eventBus, ServiceRegistryConfig serviceRegistryConfig, MicroserviceDefinition microserviceDefinition) { @@ -94,6 +101,10 @@ public class TestRemoteServiceRegistry { EventBus bus = new EventBus(); RemoteServiceRegistry remote = new TestingRemoteServiceRegistry(bus, config, definition); remote.init(); + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", serviceRegistry); + Mockito.when(serviceRegistry.getServiceRegistryClient()).thenReturn(registryClient); + Mockito.when(registryClient.getServiceCenterInfo()).thenReturn(serviceCenterInfo); + Mockito.when(serviceCenterInfo.getVersion()).thenReturn("1.0.0"); remote.run(); Assert.assertTrue(2 <= remote.getTaskPool().getTaskCount()); // includes complete tasks @@ -134,4 +145,9 @@ public class TestRemoteServiceRegistry { Deencapsulation.setField(remote, "taskPool", taskPool); bus.post(event); } + + @AfterClass + public static void teardown() { + Deencapsulation.setField(RegistryUtils.class, "serviceRegistry", null); + } } -- To stop receiving notification emails like this one, please contact [email protected].
