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/servicecomb-java-chassis.git
commit 1c924443c70c37cc680413bb7eb128ccbfeba516 Author: liubao <bi...@qq.com> AuthorDate: Mon Sep 18 09:19:49 2023 +0800 [SCB-2008]change DynamicPropertyFactory to Environment: core and transports --- .../servicecomb/common/rest/UploadConfig.java | 69 ++---- .../servicecomb/common/rest/TestUploadConfig.java | 76 ------- .../rest/locator/TestServicePathManager.java | 2 + .../core/ConfigurationSpringInitializer.java | 10 +- .../core/filter/impl/ParameterValidatorFilter.java | 15 +- .../core/governance/GovernanceConfiguration.java | 4 +- .../provider/producer/ProducerProviderManager.java | 5 +- .../core/transport/AbstractTransport.java | 14 +- .../filter/impl/ParameterValidatorFilterTest.java | 12 +- .../core/transport/TestAbstractTransport.java | 18 ++ .../config/FoundationConfigConfiguration.java | 6 + .../servicecomb/config/LegacyPropertyFactory.java | 59 +++++ .../inspector/internal/TestInspectorImpl.java | 9 + .../transport/common/TransportConfigUtils.java | 7 +- .../transport/common/TestTransportConfigUtils.java | 28 ++- .../transport/highway/HighwayClient.java | 11 +- .../transport/highway/HighwayConfig.java | 8 +- .../transport/highway/HighwayServer.java | 6 +- .../transport/highway/TestHighwayClient.java | 29 ++- .../transport/highway/TestHighwayConfig.java | 53 ----- .../transport/highway/TestHighwayTransport.java | 23 ++ .../rest/client/TransportClientConfig.java | 79 +++---- .../rest/client/TestTransportClientConfig.java | 97 --------- .../transport/rest/servlet/ServletConfig.java | 19 +- .../transport/rest/servlet/TestServletConfig.java | 57 ----- .../rest/servlet/TestServletRestTransport.java | 16 ++ .../transport/rest/servlet/TestServletUtils.java | 37 ++-- .../transport/rest/vertx/RestServerVerticle.java | 11 +- .../transport/rest/vertx/TransportConfig.java | 122 +++++------ .../transport/rest/vertx/VertxRestDispatcher.java | 18 +- .../vertx/TestAbstractVertxHttpDispatcher.java | 39 ++-- .../rest/vertx/TestRestServerVerticle.java | 146 +++++++++---- .../transport/rest/vertx/TestTransportConfig.java | 237 --------------------- .../rest/vertx/TestVertxRestDispatcher.java | 23 +- .../rest/vertx/TestVertxRestTransport.java | 32 ++- 35 files changed, 531 insertions(+), 866 deletions(-) diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/UploadConfig.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/UploadConfig.java index a5d921b1a..fb89bf91c 100644 --- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/UploadConfig.java +++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/UploadConfig.java @@ -16,79 +16,46 @@ */ package org.apache.servicecomb.common.rest; -import jakarta.servlet.MultipartConfigElement; +import org.apache.servicecomb.config.LegacyPropertyFactory; -import com.netflix.config.DynamicPropertyFactory; +import jakarta.servlet.MultipartConfigElement; public class UploadConfig { - /** * null means not support upload */ - private String location; + public String getLocation() { + return LegacyPropertyFactory + .getStringProperty(RestConst.UPLOAD_DIR, RestConst.UPLOAD_DEFAULT_DIR); + } /** * limit of one upload file, only available for servlet rest transport */ - private long maxFileSize; + public long getMaxFileSize() { + return LegacyPropertyFactory.getLongProperty(RestConst.UPLOAD_MAX_FILE_SIZE, -1L); + } /** * limit of upload request body */ - private long maxSize; - - /** - * the size threshold after which files will be written to disk, only available for servlet rest transport - */ - private int fileSizeThreshold; - - public UploadConfig() { - location = DynamicPropertyFactory.getInstance() - .getStringProperty(RestConst.UPLOAD_DIR, RestConst.UPLOAD_DEFAULT_DIR).get(); - maxFileSize = DynamicPropertyFactory.getInstance().getLongProperty(RestConst.UPLOAD_MAX_FILE_SIZE, -1L).get(); - maxSize = DynamicPropertyFactory.getInstance().getLongProperty(RestConst.UPLOAD_MAX_SIZE, -1L).get(); - fileSizeThreshold = DynamicPropertyFactory.getInstance().getIntProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, 0) - .get(); - } - - public String getLocation() { - return location; - } - - public void setLocation(String location) { - this.location = location; - } - - public long getMaxFileSize() { - return maxFileSize; - } - - public void setMaxFileSize(long maxFileSize) { - this.maxFileSize = maxFileSize; - } - public long getMaxSize() { - return maxSize; + return LegacyPropertyFactory.getLongProperty(RestConst.UPLOAD_MAX_SIZE, -1L); } - public void setMaxSize(long maxSize) { - this.maxSize = maxSize; - } + /** + * the size threshold after which files will be written to disk, only available for servlet rest transport + */ public int getFileSizeThreshold() { - return fileSizeThreshold; - } - - public void setFileSizeThreshold(int fileSizeThreshold) { - this.fileSizeThreshold = fileSizeThreshold; + return LegacyPropertyFactory.getIntProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, 0); } public MultipartConfigElement toMultipartConfigElement() { - return new MultipartConfigElement( - location, - DynamicPropertyFactory.getInstance().getLongProperty(RestConst.UPLOAD_MAX_FILE_SIZE, -1L).get(), - DynamicPropertyFactory.getInstance().getLongProperty(RestConst.UPLOAD_MAX_SIZE, -1L).get(), - DynamicPropertyFactory.getInstance().getIntProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, 0).get()); + getLocation(), + getMaxFileSize(), + getMaxSize(), + getFileSizeThreshold()); } } diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestUploadConfig.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestUploadConfig.java deleted file mode 100644 index 4ef76bdee..000000000 --- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/TestUploadConfig.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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.common.rest; - -import jakarta.servlet.MultipartConfigElement; - -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class TestUploadConfig { - @BeforeEach - public void setUp() { - ArchaiusUtils.resetConfig(); - } - - @AfterEach - public void tearDown() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void getMultipartConfig_default() { - ArchaiusUtils.setProperty(RestConst.UPLOAD_DIR, "upload"); - - UploadConfig uploadConfig = new UploadConfig(); - MultipartConfigElement multipartConfigElement = uploadConfig.toMultipartConfigElement(); - - Assertions.assertEquals("upload", uploadConfig.getLocation()); - Assertions.assertEquals(-1L, uploadConfig.getMaxFileSize()); - Assertions.assertEquals(-1L, uploadConfig.getMaxSize()); - Assertions.assertEquals(0, uploadConfig.getFileSizeThreshold()); - - Assertions.assertEquals("upload", multipartConfigElement.getLocation()); - Assertions.assertEquals(-1L, multipartConfigElement.getMaxFileSize()); - Assertions.assertEquals(-1L, multipartConfigElement.getMaxRequestSize()); - Assertions.assertEquals(0, multipartConfigElement.getFileSizeThreshold()); - } - - @Test - public void getMultipartConfig_config() { - ArchaiusUtils.setProperty(RestConst.UPLOAD_DIR, "upload"); - ArchaiusUtils.setProperty(RestConst.UPLOAD_MAX_FILE_SIZE, 1); - ArchaiusUtils.setProperty(RestConst.UPLOAD_MAX_SIZE, 2); - ArchaiusUtils.setProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, 3); - - UploadConfig uploadConfig = new UploadConfig(); - MultipartConfigElement multipartConfigElement = uploadConfig.toMultipartConfigElement(); - - Assertions.assertEquals("upload", uploadConfig.getLocation()); - Assertions.assertEquals(1, uploadConfig.getMaxFileSize()); - Assertions.assertEquals(2, uploadConfig.getMaxSize()); - Assertions.assertEquals(3, uploadConfig.getFileSizeThreshold()); - - Assertions.assertEquals("upload", multipartConfigElement.getLocation()); - Assertions.assertEquals(1, multipartConfigElement.getMaxFileSize()); - Assertions.assertEquals(2, multipartConfigElement.getMaxRequestSize()); - Assertions.assertEquals(3, multipartConfigElement.getFileSizeThreshold()); - } -} diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestServicePathManager.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestServicePathManager.java index 2e244e123..902ea583d 100644 --- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestServicePathManager.java +++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/locator/TestServicePathManager.java @@ -87,6 +87,8 @@ public class TestServicePathManager { scbEngine.setEnvironment(environment); Mockito.when(environment.getProperty(CFG_KEY_TURN_DOWN_STATUS_WAIT_SEC, long.class, DEFAULT_TURN_DOWN_STATUS_WAIT_SEC)).thenReturn(DEFAULT_TURN_DOWN_STATUS_WAIT_SEC); + Mockito.when(environment.getProperty(DefinitionConst.REGISTER_URL_PREFIX, boolean.class, false)).thenReturn(false); + ExecutorManager executorManager = Mockito.mock(ExecutorManager.class); TransportManager transportManager = Mockito.mock(TransportManager.class); scbEngine.setTransportManager(transportManager); diff --git a/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java b/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java index c3e9952b7..f814f1209 100644 --- a/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java +++ b/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java @@ -52,10 +52,8 @@ import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.PropertySource; - import com.google.common.eventbus.Subscribe; import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicPropertyFactory; import com.netflix.config.WatchedUpdateResult; /** @@ -243,8 +241,8 @@ public class ConfigurationSpringInitializer extends PropertySourcesPlaceholderCo try { ce.getPropertySources().addFirst(new MapPropertySource("dynamic-source", dynamicData)); } catch (Exception e) { - if (DynamicPropertyFactory.getInstance().getBooleanProperty(CoreConst.PRINT_SENSITIVE_ERROR_MESSAGE, - false).get()) { + if (environment.getProperty(CoreConst.PRINT_SENSITIVE_ERROR_MESSAGE, boolean.class, + false)) { LOGGER.warn("set up spring property source failed.", e); } else { LOGGER.warn("set up spring property source failed. msg: {}", e.getMessage()); @@ -331,7 +329,9 @@ public class ConfigurationSpringInitializer extends PropertySourcesPlaceholderCo try { Object propertyValue = environment.getProperty(propertyName, Object.class); if (propertyValue == null) { - LOGGER.error("The value of a configuration item is null, please check whether there is any impact, config item key: {}", propertyName); + LOGGER.error( + "The value of a configuration item is null, please check whether there is any impact, config item key: {}", + propertyName); continue; } configFromSpringBoot.put(propertyName, propertyValue); diff --git a/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java b/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java index 03efe04ad..ea5cf5ffd 100644 --- a/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java +++ b/core/src/main/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilter.java @@ -37,8 +37,8 @@ import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpo import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; - -import com.netflix.config.DynamicPropertyFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; @@ -52,10 +52,17 @@ public class ParameterValidatorFilter implements ProviderFilter, InitializingBea public static final String NAME = "validator"; - private static final String ENABLE_EL = "servicecomb.filters.validation.useResourceBundleMessageInterpolator"; + public static final String ENABLE_EL = "servicecomb.filters.validation.useResourceBundleMessageInterpolator"; protected ExecutableValidator validator; + private Environment environment; + + @Autowired + public void setEnvironment(Environment environment) { + this.environment = environment; + } + @Nonnull @Override public String getName() { @@ -89,7 +96,7 @@ public class ParameterValidatorFilter implements ProviderFilter, InitializingBea } private boolean useResourceBundleMessageInterpolator() { - return DynamicPropertyFactory.getInstance().getBooleanProperty(ENABLE_EL, false).get(); + return environment.getProperty(ENABLE_EL, boolean.class, false); } @Override diff --git a/core/src/main/java/org/apache/servicecomb/core/governance/GovernanceConfiguration.java b/core/src/main/java/org/apache/servicecomb/core/governance/GovernanceConfiguration.java index eff944fff..37ca9ce0c 100644 --- a/core/src/main/java/org/apache/servicecomb/core/governance/GovernanceConfiguration.java +++ b/core/src/main/java/org/apache/servicecomb/core/governance/GovernanceConfiguration.java @@ -16,7 +16,7 @@ */ package org.apache.servicecomb.core.governance; -import com.netflix.config.DynamicPropertyFactory; +import org.apache.servicecomb.config.LegacyPropertyFactory; public class GovernanceConfiguration { public static final String ROOT = "servicecomb.loadbalance."; @@ -62,7 +62,7 @@ public class GovernanceConfiguration { public static String getStringProperty(String defaultValue, String... keys) { String property; for (String key : keys) { - property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get(); + property = LegacyPropertyFactory.getStringProperty(key); if (property != null) { return property; } diff --git a/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java b/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java index 6344b90b1..68ba02f36 100644 --- a/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java +++ b/core/src/main/java/org/apache/servicecomb/core/provider/producer/ProducerProviderManager.java @@ -39,8 +39,6 @@ import org.apache.servicecomb.swagger.engine.SwaggerProducerOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.config.DynamicPropertyFactory; - import io.swagger.v3.oas.models.OpenAPI; public class ProducerProviderManager { @@ -121,8 +119,7 @@ public class ProducerProviderManager { private void registerUrlPrefixToSwagger(OpenAPI swagger) { String urlPrefix = ClassLoaderScopeContext.getClassLoaderScopeProperty(DefinitionConst.URL_PREFIX); if (!StringUtils.isEmpty(urlPrefix) && !SwaggerUtils.getBasePath(swagger).startsWith(urlPrefix) - && DynamicPropertyFactory.getInstance() - .getBooleanProperty(DefinitionConst.REGISTER_URL_PREFIX, false).get()) { + && scbEngine.getEnvironment().getProperty(DefinitionConst.REGISTER_URL_PREFIX, boolean.class, false)) { LOGGER.info("Add swagger base path prefix for {} with {}", SwaggerUtils.getBasePath(swagger), urlPrefix); SwaggerUtils.setBasePath(swagger, urlPrefix + SwaggerUtils.getBasePath(swagger)); } diff --git a/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java b/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java index de9926fa8..8a68eb9ec 100644 --- a/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java +++ b/core/src/main/java/org/apache/servicecomb/core/transport/AbstractTransport.java @@ -38,8 +38,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.Environment; -import com.netflix.config.DynamicPropertyFactory; - import io.vertx.core.Vertx; public abstract class AbstractTransport implements Transport { @@ -133,7 +131,7 @@ public abstract class AbstractTransport implements Transport { * * @return the publish address, or {@code null} if the param {@code address} is null. */ - public static String getPublishAddress(String schema, String address) { + protected String getPublishAddress(String schema, String address) { if (address == null) { return address; } @@ -155,16 +153,12 @@ public abstract class AbstractTransport implements Transport { } } - private static IpPort genPublishIpPort(String schema, IpPort ipPort) { - String publicAddressSetting = DynamicPropertyFactory.getInstance() - .getStringProperty(PUBLISH_ADDRESS, "") - .get(); + private IpPort genPublishIpPort(String schema, IpPort ipPort) { + String publicAddressSetting = environment.getProperty(PUBLISH_ADDRESS, String.class, ""); publicAddressSetting = publicAddressSetting.trim(); String publishPortKey = PUBLISH_PORT.replace("{transport_name}", schema); - int publishPortSetting = DynamicPropertyFactory.getInstance() - .getIntProperty(publishPortKey, 0) - .get(); + int publishPortSetting = environment.getProperty(publishPortKey, int.class, 0); int publishPort = publishPortSetting == 0 ? ipPort.getPort() : publishPortSetting; if (publicAddressSetting.isEmpty()) { diff --git a/core/src/test/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilterTest.java b/core/src/test/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilterTest.java index d7ed12f58..5d441ef26 100644 --- a/core/src/test/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilterTest.java +++ b/core/src/test/java/org/apache/servicecomb/core/filter/impl/ParameterValidatorFilterTest.java @@ -20,6 +20,7 @@ package org.apache.servicecomb.core.filter.impl; import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; import static org.apache.servicecomb.core.exception.ExceptionCodes.DEFAULT_VALIDATE; import static org.apache.servicecomb.core.exception.converter.ConstraintViolationExceptionConverter.KEY_CODE; +import static org.apache.servicecomb.core.filter.impl.ParameterValidatorFilter.ENABLE_EL; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -39,7 +40,6 @@ import org.apache.servicecomb.swagger.engine.SwaggerProducerOperation; import org.apache.servicecomb.swagger.invocation.exception.CommonExceptionData; import org.apache.servicecomb.swagger.invocation.exception.InvocationException; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mockito; import org.springframework.core.env.Environment; @@ -88,7 +88,7 @@ public class ParameterValidatorFilterTest { } } - static ParameterValidatorFilter filter = new ParameterValidatorFilter(); + ParameterValidatorFilter filter = new ParameterValidatorFilter(); @Mocked Invocation invocation; @@ -98,15 +98,13 @@ public class ParameterValidatorFilterTest { Environment environment; - @BeforeClass - public static void beforeClass() throws Exception { - filter.afterPropertiesSet(); - } - @Before public void setUp() throws Exception { SCBEngine engine = SCBBootstrap.createSCBEngineForTest(); environment = Mockito.mock(Environment.class); + Mockito.when(environment.getProperty(ENABLE_EL, boolean.class, false)).thenReturn(false); + filter.setEnvironment(environment); + filter.afterPropertiesSet(); engine.setEnvironment(environment); new Expectations() { { diff --git a/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java b/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java index cf0a1e3e4..640134367 100644 --- a/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java +++ b/core/src/test/java/org/apache/servicecomb/core/transport/TestAbstractTransport.java @@ -17,6 +17,8 @@ package org.apache.servicecomb.core.transport; +import static org.apache.servicecomb.core.transport.AbstractTransport.PUBLISH_ADDRESS; + import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -24,9 +26,14 @@ import java.util.Collections; import org.apache.servicecomb.foundation.common.net.IpPort; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; public class TestAbstractTransport { + Environment environment = Mockito.mock(Environment.class); + static class MyAbstractTransport extends AbstractTransport { @Override @@ -40,9 +47,16 @@ public class TestAbstractTransport { } } + @BeforeEach + public void setUp() { + Mockito.when(environment.getProperty(PUBLISH_ADDRESS, String.class, "")).thenReturn(""); + Mockito.when(environment.getProperty("servicecomb.my.publishPort", int.class, 0)).thenReturn(0); + } + @Test public void testSetListenAddressWithoutSchemaChineseSpaceNewSC() throws UnsupportedEncodingException { MyAbstractTransport transport = new MyAbstractTransport(); + transport.setEnvironment(environment); transport.setListenAddressWithoutSchema("127.0.0.1:9090", Collections.singletonMap("country", "中 国")); Assertions.assertEquals("my://127.0.0.1:9090?country=" + URLEncoder.encode("中 国", StandardCharsets.UTF_8.name()), transport.getEndpoint().getEndpoint()); @@ -51,6 +65,7 @@ public class TestAbstractTransport { @Test public void testSetListenAddressWithoutSchemaNormalNotEncode() { MyAbstractTransport transport = new MyAbstractTransport(); + transport.setEnvironment(environment); transport.setListenAddressWithoutSchema("127.0.0.1:9090", Collections.singletonMap("country", "chinese")); Assertions.assertEquals("my://127.0.0.1:9090?country=chinese", transport.getEndpoint().getEndpoint()); } @@ -58,6 +73,7 @@ public class TestAbstractTransport { @Test public void testSetListenAddressWithoutSchemaAlreadyHaveQuery() { MyAbstractTransport transport = new MyAbstractTransport(); + transport.setEnvironment(environment); transport.setListenAddressWithoutSchema("127.0.0.1:9090?a=aValue", Collections.singletonMap("country", "chinese")); Assertions.assertEquals("my://127.0.0.1:9090?a=aValue&country=chinese", transport.getEndpoint().getEndpoint()); @@ -66,6 +82,7 @@ public class TestAbstractTransport { @Test public void testMyAbstractTransport() { MyAbstractTransport transport = new MyAbstractTransport(); + transport.setEnvironment(environment); transport.setListenAddressWithoutSchema("127.0.0.1:9090"); Assertions.assertEquals("my", transport.getName()); Assertions.assertEquals("my://127.0.0.1:9090", transport.getEndpoint().getEndpoint()); @@ -80,6 +97,7 @@ public class TestAbstractTransport { @Test public void testMyAbstractTransportException() { MyAbstractTransport transport = new MyAbstractTransport(); + transport.setEnvironment(environment); Assertions.assertThrows(IllegalArgumentException.class, () -> transport.setListenAddressWithoutSchema(":127.0.0.1:9090")); } diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java index 87ee0c5c7..00e302bf5 100644 --- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java +++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/FoundationConfigConfiguration.java @@ -23,6 +23,7 @@ import org.apache.servicecomb.config.priority.PriorityPropertyManager; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; @Configuration @SuppressWarnings("unused") @@ -68,4 +69,9 @@ public class FoundationConfigConfiguration { public DataCenterProperties dataCenterProperties() { return new DataCenterProperties(); } + + @Bean + public LegacyPropertyFactory legacyPropertyFactory(Environment environment) { + return new LegacyPropertyFactory(environment); + } } diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LegacyPropertyFactory.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LegacyPropertyFactory.java new file mode 100644 index 000000000..f01f8736b --- /dev/null +++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/LegacyPropertyFactory.java @@ -0,0 +1,59 @@ +/* + * 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.config; + +import org.springframework.core.env.Environment; + +import com.google.common.annotations.VisibleForTesting; + +/** + * Provider a convenient way to get property value in static context. + * + * NOTE: this way is not commented and only for legacy code without too much refactoring. + */ +public class LegacyPropertyFactory { + private static Environment environment; + + public LegacyPropertyFactory(Environment environment) { + LegacyPropertyFactory.environment = environment; + } + + @VisibleForTesting + public static void setEnvironment(Environment environment) { + LegacyPropertyFactory.environment = environment; + } + + public static boolean getBooleanProperty(String key, boolean defaultValue) { + return environment.getProperty(key, boolean.class, defaultValue); + } + + public static int getIntProperty(String key, int defaultValue) { + return environment.getProperty(key, int.class, defaultValue); + } + + public static long getLongProperty(String key, long defaultValue) { + return environment.getProperty(key, long.class, defaultValue); + } + + public static String getStringProperty(String key) { + return environment.getProperty(key); + } + + public static String getStringProperty(String key, String defaultValue) { + return environment.getProperty(key, String.class, defaultValue); + } +} diff --git a/inspector/src/test/java/org/apache/servicecomb/inspector/internal/TestInspectorImpl.java b/inspector/src/test/java/org/apache/servicecomb/inspector/internal/TestInspectorImpl.java index f28f966f0..715d3fed4 100644 --- a/inspector/src/test/java/org/apache/servicecomb/inspector/internal/TestInspectorImpl.java +++ b/inspector/src/test/java/org/apache/servicecomb/inspector/internal/TestInspectorImpl.java @@ -34,6 +34,7 @@ import java.util.zip.ZipInputStream; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.servicecomb.config.ConfigUtil; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.config.priority.PriorityPropertyFactory; import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.Transport; @@ -55,6 +56,7 @@ import org.hamcrest.Matchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledForJreRange; import org.junit.jupiter.api.condition.JRE; @@ -84,6 +86,13 @@ public class TestInspectorImpl { inspector = initInspector(null); } + Environment environment = Mockito.mock(Environment.class); + + @BeforeEach + public void setUp() { + LegacyPropertyFactory.setEnvironment(environment); + } + private static InspectorImpl initInspector(String urlPrefix) { SCBEngine scbEngine = SCBBootstrap.createSCBEngineForTest(); Environment environment = Mockito.mock(Environment.class); diff --git a/transports/transport-common/src/main/java/org/apache/servicecomb/transport/common/TransportConfigUtils.java b/transports/transport-common/src/main/java/org/apache/servicecomb/transport/common/TransportConfigUtils.java index 29a7b9533..26524a094 100644 --- a/transports/transport-common/src/main/java/org/apache/servicecomb/transport/common/TransportConfigUtils.java +++ b/transports/transport-common/src/main/java/org/apache/servicecomb/transport/common/TransportConfigUtils.java @@ -16,11 +16,10 @@ */ package org.apache.servicecomb.transport.common; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.config.DynamicPropertyFactory; - public final class TransportConfigUtils { private static final Logger LOGGER = LoggerFactory.getLogger(TransportConfigUtils.class); @@ -30,12 +29,12 @@ public final class TransportConfigUtils { // old verticle count key is ambiguous // suggest to use new name public static int readVerticleCount(String key, String deprecatedKey) { - int count = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get(); + int count = LegacyPropertyFactory.getIntProperty(key, -1); if (count > 0) { return count; } - count = DynamicPropertyFactory.getInstance().getIntProperty(deprecatedKey, -1).get(); + count = LegacyPropertyFactory.getIntProperty(deprecatedKey, -1); if (count > 0) { LOGGER.warn("{} is ambiguous, and deprecated, recommended to use {}.", deprecatedKey, key); return count; diff --git a/transports/transport-common/src/test/java/org/apache/servicecomb/transport/common/TestTransportConfigUtils.java b/transports/transport-common/src/test/java/org/apache/servicecomb/transport/common/TestTransportConfigUtils.java index a05f51906..14a77032d 100644 --- a/transports/transport-common/src/test/java/org/apache/servicecomb/transport/common/TestTransportConfigUtils.java +++ b/transports/transport-common/src/test/java/org/apache/servicecomb/transport/common/TestTransportConfigUtils.java @@ -18,25 +18,28 @@ package org.apache.servicecomb.transport.common; import java.util.concurrent.atomic.AtomicInteger; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.foundation.test.scaffolding.log.LogCollector; - -import mockit.Mock; -import mockit.MockUp; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; + +import mockit.Mock; +import mockit.MockUp; public class TestTransportConfigUtils { + Environment environment = Mockito.mock(Environment.class); + @BeforeEach public void setup() { - ArchaiusUtils.resetConfig(); + LegacyPropertyFactory.setEnvironment(environment); } @AfterAll public static void teardown() { - ArchaiusUtils.resetConfig(); } static String key = "verticle-count"; @@ -45,15 +48,14 @@ public class TestTransportConfigUtils { @Test public void readVerticleCount_new_exist() { - ArchaiusUtils.setProperty(key, 10); - + Mockito.when(environment.getProperty("verticle-count", int.class, -1)).thenReturn(10); Assertions.assertEquals(10, TransportConfigUtils.readVerticleCount(key, deprecatedKey)); } @Test public void readVerticleCount_old_exist() { - ArchaiusUtils.setProperty(deprecatedKey, 10); - + Mockito.when(environment.getProperty("verticle-count", int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty("thread-count", int.class, -1)).thenReturn(10); LogCollector collector = new LogCollector(); Assertions.assertEquals(10, TransportConfigUtils.readVerticleCount(key, deprecatedKey)); Assertions.assertEquals("thread-count is ambiguous, and deprecated, recommended to use verticle-count.", @@ -63,6 +65,9 @@ public class TestTransportConfigUtils { @Test public void readVerticleCount_default_smallCpu() { + Mockito.when(environment.getProperty("verticle-count", int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty("thread-count", int.class, -1)).thenReturn(-1); + new MockUp<Runtime>() { @Mock int availableProcessors() { @@ -79,6 +84,9 @@ public class TestTransportConfigUtils { @Test public void readVerticleCount_default_bigCpu() { + Mockito.when(environment.getProperty("verticle-count", int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty("thread-count", int.class, -1)).thenReturn(-1); + AtomicInteger count = new AtomicInteger(8); new MockUp<Runtime>() { @Mock diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClient.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClient.java index e15124dbb..122be005e 100644 --- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClient.java +++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClient.java @@ -19,11 +19,9 @@ package org.apache.servicecomb.transport.highway; import java.util.concurrent.TimeoutException; -import jakarta.ws.rs.core.Response.Status; - -import com.google.common.annotations.VisibleForTesting; import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf; import org.apache.servicecomb.codec.protobuf.definition.ProtobufManager; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.foundation.ssl.SSLCustom; import org.apache.servicecomb.foundation.ssl.SSLOption; @@ -40,10 +38,11 @@ import org.apache.servicecomb.swagger.invocation.exception.InvocationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.config.DynamicPropertyFactory; +import com.google.common.annotations.VisibleForTesting; import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; +import jakarta.ws.rs.core.Response.Status; public class HighwayClient { private static final Logger LOGGER = LoggerFactory.getLogger(HighwayClient.class); @@ -70,8 +69,8 @@ public class HighwayClient { TcpClientConfig createTcpClientConfig() { TcpClientConfig tcpClientConfig = new TcpClientConfig(); // global request timeout to be login timeout - tcpClientConfig.setMsLoginTimeout(DynamicPropertyFactory.getInstance() - .getLongProperty("servicecomb.request.timeout", TcpClientConfig.DEFAULT_LOGIN_TIMEOUT).get()); + tcpClientConfig.setMsLoginTimeout( + LegacyPropertyFactory.getLongProperty("servicecomb.request.timeout", TcpClientConfig.DEFAULT_LOGIN_TIMEOUT)); SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(SSL_KEY, null); diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayConfig.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayConfig.java index 7122fa508..0148cfbfe 100644 --- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayConfig.java +++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayConfig.java @@ -17,19 +17,15 @@ package org.apache.servicecomb.transport.highway; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.transport.common.TransportConfigUtils; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; - public final class HighwayConfig { private HighwayConfig() { } public static String getAddress() { - DynamicStringProperty address = - DynamicPropertyFactory.getInstance().getStringProperty("servicecomb.highway.address", null); - return address.get(); + return LegacyPropertyFactory.getStringProperty("servicecomb.highway.address", null); } public static int getServerThreadCount() { diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java index 08956df6a..9224c6ac2 100644 --- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java +++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayServer.java @@ -17,13 +17,12 @@ package org.apache.servicecomb.transport.highway; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.vertx.server.TcpServer; import org.apache.servicecomb.foundation.vertx.server.TcpServerConnection; -import com.netflix.config.DynamicPropertyFactory; - public class HighwayServer extends TcpServer { private final Endpoint endpoint; @@ -39,7 +38,6 @@ public class HighwayServer extends TcpServer { @Override protected int getConnectionLimit() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.highway.server.connection-limit", Integer.MAX_VALUE).get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.highway.server.connection-limit", Integer.MAX_VALUE); } } diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java index 1c71f1c41..999688a16 100644 --- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java +++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java @@ -17,10 +17,9 @@ package org.apache.servicecomb.transport.highway; -import jakarta.ws.rs.core.Response.Status; - import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf; import org.apache.servicecomb.codec.protobuf.definition.ProtobufManager; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.definition.OperationConfig; @@ -28,7 +27,6 @@ import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.core.executor.ReactiveExecutor; import org.apache.servicecomb.core.invocation.InvocationStageTrace; import org.apache.servicecomb.foundation.common.Holder; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager; import org.apache.servicecomb.foundation.vertx.client.tcp.AbstractTcpClientPackage; @@ -38,15 +36,18 @@ import org.apache.servicecomb.foundation.vertx.client.tcp.TcpResponseCallback; import org.apache.servicecomb.swagger.invocation.Response; import org.apache.servicecomb.swagger.invocation.exception.InvocationException; import org.junit.AfterClass; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; +import org.springframework.core.env.Environment; import io.vertx.core.AbstractVerticle; import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; import io.vertx.core.buffer.Buffer; +import jakarta.ws.rs.core.Response.Status; import mockit.Deencapsulation; import mockit.Mock; import mockit.MockUp; @@ -67,13 +68,12 @@ public class TestHighwayClient { Endpoint endpoint = Mockito.mock(Endpoint.class); + Environment environment = Mockito.mock(Environment.class); + static long nanoTime = 123; @BeforeClass public static void setup() { - ArchaiusUtils.resetConfig(); - ArchaiusUtils.setProperty(REQUEST_TIMEOUT_KEY, 2000); - new MockUp<System>() { @Mock long nanoTime() { @@ -84,7 +84,22 @@ public class TestHighwayClient { @AfterClass public static void teardown() { - ArchaiusUtils.resetConfig(); + + } + + @Before + public void setUp() { + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty(REQUEST_TIMEOUT_KEY, long.class, (long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT)) + .thenReturn((long) 2000); + Mockito.when(environment.getProperty("servicecomb.highway.client.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.client.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.server.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.server.thread-count", int.class, -1)) + .thenReturn(-1); } @Test diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayConfig.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayConfig.java deleted file mode 100644 index 90fb5fd60..000000000 --- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.transport.highway; - -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.jupiter.api.Assertions; - -public class TestHighwayConfig { - @BeforeClass - public static void setup() { - ArchaiusUtils.resetConfig(); - } - - @AfterClass - public static void tearDown() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void getServerThreadCount() { - ArchaiusUtils.setProperty("servicecomb.highway.server.verticle-count", 1); - Assertions.assertEquals(HighwayConfig.getServerThreadCount(), 1); - } - - @Test - public void getClientThreadCount() { - ArchaiusUtils.setProperty("servicecomb.highway.client.verticle-count", 1); - Assertions.assertEquals(HighwayConfig.getClientThreadCount(), 1); - } - - @Test - public void getAddress() { - Assertions.assertNull(HighwayConfig.getAddress()); - } -} diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java index 4aae882ab..263d2e264 100644 --- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java +++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayTransport.java @@ -19,24 +19,30 @@ package org.apache.servicecomb.transport.highway; import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf; import org.apache.servicecomb.codec.protobuf.definition.RequestRootSerializer; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.vertx.VertxUtils; +import org.apache.servicecomb.foundation.vertx.client.tcp.TcpClientConfig; import org.junit.AfterClass; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; public class TestHighwayTransport { private static final Logger LOGGER = LoggerFactory.getLogger(TestHighwayTransport.class); private final HighwayTransport transport = new HighwayTransport(); + Environment environment = Mockito.mock(Environment.class); + @BeforeClass public static void setup() { VertxUtils.blockCloseVertxByName("transport"); @@ -49,6 +55,22 @@ public class TestHighwayTransport { Thread.getAllStackTraces().keySet().forEach(t -> LOGGER.info("after: {}", t.getName())); } + @Before + public void setUp() { + Mockito.when(environment.getProperty( + "servicecomb.request.timeout", long.class, (long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT)) + .thenReturn((long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT); + Mockito.when(environment.getProperty("servicecomb.highway.client.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.client.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.server.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.highway.server.thread-count", int.class, -1)) + .thenReturn(-1); + LegacyPropertyFactory.setEnvironment(environment); + } + @Test public void testGetInstance() { Assertions.assertNotNull(transport); @@ -60,6 +82,7 @@ public class TestHighwayTransport { try { transport.init(); } catch (Exception e) { + e.printStackTrace(); status = false; } diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java index 542955859..a371a8bc6 100644 --- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java +++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/TransportClientConfig.java @@ -17,10 +17,9 @@ package org.apache.servicecomb.transport.rest.client; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.transport.common.TransportConfigUtils; -import com.netflix.config.DynamicPropertyFactory; - import io.vertx.core.http.HttpClientOptions; public final class TransportClientConfig { @@ -38,98 +37,80 @@ public final class TransportClientConfig { } public static int getHttp2ConnectionMaxPoolSize() { - return DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.http2.maxPoolSize", - HttpClientOptions.DEFAULT_HTTP2_MAX_POOL_SIZE) - .get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.client.http2.maxPoolSize", + HttpClientOptions.DEFAULT_HTTP2_MAX_POOL_SIZE); } public static int getHttp2MultiplexingLimit() { - return DynamicPropertyFactory.getInstance().getIntProperty("servicecomb.rest.client.http2.multiplexingLimit", - HttpClientOptions.DEFAULT_HTTP2_MULTIPLEXING_LIMIT) - .get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.client.http2.multiplexingLimit", + HttpClientOptions.DEFAULT_HTTP2_MULTIPLEXING_LIMIT); } public static boolean getUseAlpn() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.client.http2.useAlpnEnabled", true) - .get(); + return LegacyPropertyFactory.getBooleanProperty("servicecomb.rest.client.http2.useAlpnEnabled", true); } public static boolean isHttp2TransportClientEnabled() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.client.http2.enabled", - true) - .get(); + return LegacyPropertyFactory.getBooleanProperty("servicecomb.rest.client.http2.enabled", + true); } public static int getConnectionMaxPoolSize() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.connection.maxPoolSize", HttpClientOptions.DEFAULT_MAX_POOL_SIZE) - .get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.client.connection.maxPoolSize", + HttpClientOptions.DEFAULT_MAX_POOL_SIZE); } public static int getHttp2ConnectionIdleTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.http2.connection.idleTimeoutInSeconds", DEFAULT_IDLE_TIME_OUT) - .get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.client.http2.connection.idleTimeoutInSeconds", + DEFAULT_IDLE_TIME_OUT); } public static int getConnectionIdleTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.connection.idleTimeoutInSeconds", DEFAULT_IDLE_TIME_OUT) - .get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.client.connection.idleTimeoutInSeconds", + DEFAULT_IDLE_TIME_OUT); } public static boolean getConnectionKeepAlive() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.client.connection.keepAlive", HttpClientOptions.DEFAULT_KEEP_ALIVE) - .get(); + return LegacyPropertyFactory + .getBooleanProperty("servicecomb.rest.client.connection.keepAlive", HttpClientOptions.DEFAULT_KEEP_ALIVE); } public static int getConnectionKeepAliveTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.connection.keepAliveTimeoutInSeconds", - DEFAULT_KEEP_ALIVE_TIME_OUT) - .get(); + return LegacyPropertyFactory + .getIntProperty("servicecomb.rest.client.connection.keepAliveTimeoutInSeconds", DEFAULT_KEEP_ALIVE_TIME_OUT); } public static int getHttp2ConnectionKeepAliveTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.client.http2.connection.keepAliveTimeoutInSeconds", - DEFAULT_KEEP_ALIVE_TIME_OUT) - .get(); + DEFAULT_KEEP_ALIVE_TIME_OUT); } public static boolean getConnectionCompression() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getBooleanProperty("servicecomb.rest.client.connection.compression", - HttpClientOptions.DEFAULT_TRY_USE_COMPRESSION) - .get(); + HttpClientOptions.DEFAULT_TRY_USE_COMPRESSION); } public static int getMaxHeaderSize() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.maxHeaderSize", HttpClientOptions.DEFAULT_MAX_HEADER_SIZE) - .get(); + return LegacyPropertyFactory + .getIntProperty("servicecomb.rest.client.maxHeaderSize", HttpClientOptions.DEFAULT_MAX_HEADER_SIZE); } public static int getMaxWaitQueueSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.client.maxWaitQueueSize", - HttpClientOptions.DEFAULT_MAX_WAIT_QUEUE_SIZE) - .get(); + HttpClientOptions.DEFAULT_MAX_WAIT_QUEUE_SIZE); } public static boolean isHttpTransportClientEnabled() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getBooleanProperty("servicecomb.rest.client.enabled", - true) - .get(); + true); } public static int getConnectionTimeoutInMillis() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.client.connection.timeoutInMillis", 1000) - .get(); + return LegacyPropertyFactory + .getIntProperty("servicecomb.rest.client.connection.timeoutInMillis", 1000); } } diff --git a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java b/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java deleted file mode 100644 index 4409e2979..000000000 --- a/transports/transport-rest/transport-rest-client/src/test/java/org/apache/servicecomb/transport/rest/client/TestTransportClientConfig.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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.transport.rest.client; - -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class TestTransportClientConfig { - - @BeforeEach - public void before() { - ArchaiusUtils.resetConfig(); - } - - @AfterEach - public void after() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void getThreadCount() { - ArchaiusUtils.setProperty("servicecomb.rest.client.verticle-count", 1); - Assertions.assertEquals(1, TransportClientConfig.getThreadCount()); - } - - @Test - public void getConnectionMaxPoolSize() { - Assertions.assertEquals(5, TransportClientConfig.getConnectionMaxPoolSize()); - } - - @Test - public void getConnectionIdleTimeoutInSeconds() { - Assertions.assertEquals(150, TransportClientConfig.getConnectionIdleTimeoutInSeconds()); - } - - @Test - public void getHttp2MultiplexingLimit() { - Assertions.assertEquals(-1, TransportClientConfig.getHttp2MultiplexingLimit()); - } - - @Test - public void getHttp2ConnectionMaxPoolSize() { - Assertions.assertEquals(1, TransportClientConfig.getHttp2ConnectionMaxPoolSize()); - } - - @Test - public void getHttp2ConnectionIdleTimeoutInSeconds() { - Assertions.assertEquals(150, TransportClientConfig.getHttp2ConnectionIdleTimeoutInSeconds()); - } - - @Test - public void getUseAlpnEnabled() { - Assertions.assertTrue(TransportClientConfig.getUseAlpn()); - } - - @Test - public void getConnectionKeepAlive() { - Assertions.assertTrue(TransportClientConfig.getConnectionKeepAlive()); - } - - @Test - public void getConnectionCompression() { - Assertions.assertFalse(TransportClientConfig.getConnectionCompression()); - } - - @Test - public void getMaxHeaderSize() { - Assertions.assertEquals(8192, TransportClientConfig.getMaxHeaderSize()); - ArchaiusUtils.setProperty("servicecomb.rest.client.maxHeaderSize", 1024); - Assertions.assertEquals(1024, TransportClientConfig.getMaxHeaderSize()); - } - - @Test - public void getMaxWaitQueueSize() { - Assertions.assertEquals(-1, TransportClientConfig.getMaxWaitQueueSize()); - ArchaiusUtils.setProperty("servicecomb.rest.client.maxWaitQueueSize", 1024); - Assertions.assertEquals(1024, TransportClientConfig.getMaxWaitQueueSize()); - } -} diff --git a/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletConfig.java b/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletConfig.java index 9993a3dfb..8c5934c04 100644 --- a/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletConfig.java +++ b/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletConfig.java @@ -17,9 +17,7 @@ package org.apache.servicecomb.transport.rest.servlet; -import com.netflix.config.DynamicLongProperty; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; +import org.apache.servicecomb.config.LegacyPropertyFactory; public final class ServletConfig { public static final long DEFAULT_ASYN_SERVLET_TIMEOUT = -1; @@ -32,26 +30,19 @@ public final class ServletConfig { public static final String DEFAULT_URL_PATTERN = "/*"; - private static final DynamicLongProperty asyncServletTimeoutProperty = - DynamicPropertyFactory.getInstance().getLongProperty(KEY_SERVICECOMB_ASYC_SERVLET_TIMEOUT, - DEFAULT_ASYN_SERVLET_TIMEOUT); - private ServletConfig() { } public static long getAsyncServletTimeout() { - return asyncServletTimeoutProperty.get(); + return LegacyPropertyFactory.getLongProperty(KEY_SERVICECOMB_ASYC_SERVLET_TIMEOUT, + DEFAULT_ASYN_SERVLET_TIMEOUT); } public static String getLocalServerAddress() { - DynamicStringProperty address = - DynamicPropertyFactory.getInstance().getStringProperty(SERVICECOMB_REST_ADDRESS, null); - return address.get(); + return LegacyPropertyFactory.getStringProperty(SERVICECOMB_REST_ADDRESS, null); } public static String getServletUrlPattern() { - DynamicStringProperty address = - DynamicPropertyFactory.getInstance().getStringProperty(KEY_SERVLET_URL_PATTERN, null); - return address.get(); + return LegacyPropertyFactory.getStringProperty(KEY_SERVLET_URL_PATTERN, null); } } diff --git a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletConfig.java b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletConfig.java deleted file mode 100644 index f269c30e6..000000000 --- a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletConfig.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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.transport.rest.servlet; - -import org.apache.commons.configuration.Configuration; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.netflix.config.DynamicPropertyFactory; -import org.junit.jupiter.api.Assertions; - -public class TestServletConfig { - @BeforeClass - public static void classSetup() { - ArchaiusUtils.resetConfig(); - } - - @AfterClass - public static void classTeardown() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void testGetLocalServerAddress() { - Assertions.assertNull(ServletConfig.getLocalServerAddress()); - } - - @Test - public void testGetServerTimeout() { - Assertions.assertEquals(ServletConfig.DEFAULT_ASYN_SERVLET_TIMEOUT, ServletConfig.getAsyncServletTimeout()); - } - - @Test - public void testGetServletUrlPattern() { - DynamicPropertyFactory.getInstance(); - Configuration configuration = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource(); - configuration.setProperty(ServletConfig.KEY_SERVLET_URL_PATTERN, "/*"); - Assertions.assertEquals("/*", ServletConfig.getServletUrlPattern()); - } -} diff --git a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletRestTransport.java b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletRestTransport.java index 93fdb0931..50169fa67 100644 --- a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletRestTransport.java +++ b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletRestTransport.java @@ -17,20 +17,36 @@ package org.apache.servicecomb.transport.rest.servlet; +import static org.apache.servicecomb.core.transport.AbstractTransport.PUBLISH_ADDRESS; + import java.io.IOException; import java.net.ServerSocket; import org.apache.servicecomb.foundation.common.utils.ClassLoaderScopeContext; import org.apache.servicecomb.registry.definition.DefinitionConst; import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; import mockit.Expectations; public class TestServletRestTransport { ServletRestTransport transport = new ServletRestTransport(); + Environment environment = Mockito.mock(Environment.class); + + @Before + public void setUp() { + Mockito.when(environment.getProperty(PUBLISH_ADDRESS, String.class, "")) + .thenReturn(""); + Mockito.when(environment.getProperty("servicecomb.rest.publishPort", int.class, 0)) + .thenReturn(0); + transport.setEnvironment(environment); + } + @After public void tearDown() { ClassLoaderScopeContext.clearClassLoaderScopeProperty(); diff --git a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletUtils.java b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletUtils.java index 8b77dd7e1..febed525e 100644 --- a/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletUtils.java +++ b/transports/transport-rest/transport-rest-servlet/src/test/java/org/apache/servicecomb/transport/rest/servlet/TestServletUtils.java @@ -29,38 +29,44 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import jakarta.servlet.MultipartConfigElement; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletRegistration; -import jakarta.servlet.ServletRegistration.Dynamic; -import jakarta.servlet.http.HttpServlet; - import org.apache.servicecomb.common.rest.RestConst; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.exceptions.ServiceCombException; import org.apache.servicecomb.foundation.common.utils.ClassLoaderScopeContext; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.registry.definition.DefinitionConst; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; -import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; +import jakarta.servlet.MultipartConfigElement; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.ServletRegistration.Dynamic; +import jakarta.servlet.http.HttpServlet; import mockit.Expectations; import mockit.Mock; import mockit.MockUp; import mockit.Mocked; -import org.junit.jupiter.api.Assertions; public class TestServletUtils { + Environment environment = Mockito.mock(Environment.class); + @Before public void setUp() { - ArchaiusUtils.resetConfig(); - } - - @After - public void tearDown() { - ArchaiusUtils.resetConfig(); + Mockito.when(environment.getProperty(RestConst.UPLOAD_DIR, String.class, RestConst.UPLOAD_DEFAULT_DIR)) + .thenReturn(RestConst.UPLOAD_DEFAULT_DIR); + Mockito.when(environment.getProperty(RestConst.UPLOAD_MAX_FILE_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_MAX_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, int.class, 0)) + .thenReturn(0); + LegacyPropertyFactory.setEnvironment(environment); } @Test @@ -283,7 +289,8 @@ public class TestServletUtils { File tempDir = Files.createTempDirectory("temp").toFile(); File uploadDir = new File(tempDir, "upload"); - ArchaiusUtils.setProperty(RestConst.UPLOAD_DIR, uploadDir.getAbsolutePath()); + Mockito.when(environment.getProperty(RestConst.UPLOAD_DIR, String.class, RestConst.UPLOAD_DEFAULT_DIR)) + .thenReturn(uploadDir.getAbsolutePath()); ServletUtils.setServletParameters(servletContext); diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java index 1c6120f61..ecc0e175d 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/RestServerVerticle.java @@ -21,12 +21,10 @@ import java.nio.channels.ClosedChannelException; import java.util.List; import java.util.Set; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; - import org.apache.servicecomb.common.accessLog.AccessLogConfig; import org.apache.servicecomb.common.accessLog.core.element.impl.LocalHostAccessItem; import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.core.event.ServerAccessLogEvent; import org.apache.servicecomb.core.transport.AbstractTransport; @@ -46,7 +44,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; -import com.netflix.config.DynamicPropertyFactory; import io.vertx.core.AbstractVerticle; import io.vertx.core.Context; @@ -62,6 +59,8 @@ import io.vertx.core.net.impl.ConnectionBase; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; import io.vertx.ext.web.handler.CorsHandler; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; public class RestServerVerticle extends AbstractVerticle { private static final Logger LOGGER = LoggerFactory.getLogger(RestServerVerticle.class); @@ -100,8 +99,8 @@ public class RestServerVerticle extends AbstractVerticle { DefaultHttpServerMetrics serverMetrics = (DefaultHttpServerMetrics) ((ConnectionBase) connection).metrics(); DefaultServerEndpointMetric endpointMetric = serverMetrics.getEndpointMetric(); long connectedCount = endpointMetric.getCurrentConnectionCount(); - int connectionLimit = DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.server.connection-limit", Integer.MAX_VALUE).get(); + int connectionLimit = LegacyPropertyFactory.getIntProperty("servicecomb.rest.server.connection-limit", + Integer.MAX_VALUE); if (connectedCount > connectionLimit) { connection.close(); endpointMetric.onRejectByConnectionLimit(); diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java index 6e7f229b0..59308280c 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/TransportConfig.java @@ -22,11 +22,9 @@ import java.util.Set; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.transport.common.TransportConfigUtils; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; - import io.vertx.core.Verticle; import io.vertx.core.http.Http2Settings; import io.vertx.core.http.HttpServerOptions; @@ -55,39 +53,35 @@ public final class TransportConfig { } public static String getAddress() { - DynamicStringProperty address = - DynamicPropertyFactory.getInstance().getStringProperty("servicecomb.rest.address", null); - return address.get(); + return LegacyPropertyFactory.getStringProperty("servicecomb.rest.address", null); } public static int getMaxFormAttributeSize() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.server.maxFormAttributeSize", - HttpServerOptions.DEFAULT_MAX_FORM_ATTRIBUTE_SIZE).get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.server.maxFormAttributeSize", + HttpServerOptions.DEFAULT_MAX_FORM_ATTRIBUTE_SIZE); } public static int getCompressionLevel() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.server.compressionLevel", - HttpServerOptions.DEFAULT_COMPRESSION_LEVEL).get(); + return LegacyPropertyFactory.getIntProperty("servicecomb.rest.server.compressionLevel", + HttpServerOptions.DEFAULT_COMPRESSION_LEVEL); } public static int getMaxChunkSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.maxChunkSize", - HttpServerOptions.DEFAULT_MAX_CHUNK_SIZE).get(); + HttpServerOptions.DEFAULT_MAX_CHUNK_SIZE); } public static int getDecoderInitialBufferSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.decoderInitialBufferSize", - HttpServerOptions.DEFAULT_DECODER_INITIAL_BUFFER_SIZE).get(); + HttpServerOptions.DEFAULT_DECODER_INITIAL_BUFFER_SIZE); } public static int getHttp2ConnectionWindowSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.http2ConnectionWindowSize", - HttpServerOptions.DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE).get(); + HttpServerOptions.DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE); } public static int getThreadCount() { @@ -97,122 +91,111 @@ public final class TransportConfig { } public static int getConnectionIdleTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.connection.idleTimeoutInSeconds", DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND) - .get(); + ; } public static int getHttp2ConnectionIdleTimeoutInSeconds() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.http2.connection.idleTimeoutInSeconds", - DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND) - .get(); + DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND); } public static boolean getCompressed() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.server.compression", DEFAULT_SERVER_COMPRESSION_SUPPORT) - .get(); + return LegacyPropertyFactory + .getBooleanProperty("servicecomb.rest.server.compression", DEFAULT_SERVER_COMPRESSION_SUPPORT); } public static boolean getDecompressionSupported() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getBooleanProperty("servicecomb.rest.server.decompressionSupported", - HttpServerOptions.DEFAULT_DECOMPRESSION_SUPPORTED).get(); + HttpServerOptions.DEFAULT_DECOMPRESSION_SUPPORTED); } public static long getMaxConcurrentStreams() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getLongProperty("servicecomb.rest.server.http2.concurrentStreams", - HttpServerOptions.DEFAULT_INITIAL_SETTINGS_MAX_CONCURRENT_STREAMS).get(); + HttpServerOptions.DEFAULT_INITIAL_SETTINGS_MAX_CONCURRENT_STREAMS); } public static long getHttp2HeaderTableSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getLongProperty("servicecomb.rest.server.http2.HeaderTableSize", - Http2Settings.DEFAULT_HEADER_TABLE_SIZE).get(); + Http2Settings.DEFAULT_HEADER_TABLE_SIZE); } public static boolean getPushEnabled() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getBooleanProperty("servicecomb.rest.server.http2.pushEnabled", - Http2Settings.DEFAULT_ENABLE_PUSH).get(); + Http2Settings.DEFAULT_ENABLE_PUSH); } public static int getInitialWindowSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.http2.initialWindowSize", - Http2Settings.DEFAULT_INITIAL_WINDOW_SIZE).get(); + Http2Settings.DEFAULT_INITIAL_WINDOW_SIZE); } public static int getMaxFrameSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.http2.maxFrameSize", - Http2Settings.DEFAULT_MAX_FRAME_SIZE).get(); + Http2Settings.DEFAULT_MAX_FRAME_SIZE); } public static int getMaxHeaderListSize() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.http2.maxHeaderListSize", - Http2Settings.DEFAULT_MAX_HEADER_LIST_SIZE).get(); + Http2Settings.DEFAULT_MAX_HEADER_LIST_SIZE); } public static boolean getUseAlpn() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty("servicecomb.rest.server.http2.useAlpnEnabled", true) - .get(); + return LegacyPropertyFactory + .getBooleanProperty("servicecomb.rest.server.http2.useAlpnEnabled", true); } public static int getMaxHeaderSize() { - return DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.rest.server.maxHeaderSize", DEFAULT_SERVER_MAX_HEADER_SIZE) - .get(); + return LegacyPropertyFactory + .getIntProperty("servicecomb.rest.server.maxHeaderSize", DEFAULT_SERVER_MAX_HEADER_SIZE); } public static boolean isCorsEnabled() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".enabled", false) - .get(); + return LegacyPropertyFactory + .getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".enabled", false); } public static String getCorsAllowedOrigin() { - return DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".origin", "*") - .get(); + return LegacyPropertyFactory + .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".origin", "*"); } public static boolean isCorsAllowCredentials() { - return DynamicPropertyFactory.getInstance() - .getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowCredentials", false) - .get(); + return LegacyPropertyFactory + .getBooleanProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowCredentials", false); } public static Set<String> getCorsAllowedHeaders() { - String allowedHeaders = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedHeader", null) - .get(); + String allowedHeaders = LegacyPropertyFactory + .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedHeader"); return convertToSet(allowedHeaders); } public static Set<String> getCorsAllowedMethods() { - String allowedMethods = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedMethod", null) - .get(); + String allowedMethods = LegacyPropertyFactory + .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".allowedMethod"); return convertToSet(allowedMethods); } public static Set<String> getCorsExposedHeaders() { - String exposedHeaders = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".exposedHeader", null) - .get(); + String exposedHeaders = LegacyPropertyFactory + .getStringProperty(SERVICECOMB_CORS_CONFIG_BASE + ".exposedHeader"); return convertToSet(exposedHeaders); } public static int getCorsMaxAge() { - return DynamicPropertyFactory.getInstance() - .getIntProperty(SERVICECOMB_CORS_CONFIG_BASE + ".maxAge", -1) - .get(); + return LegacyPropertyFactory + .getIntProperty(SERVICECOMB_CORS_CONFIG_BASE + ".maxAge", -1); } private static Set<String> convertToSet(String setString) { @@ -226,9 +209,8 @@ public final class TransportConfig { } public static int getMaxInitialLineLength() { - return DynamicPropertyFactory.getInstance() + return LegacyPropertyFactory .getIntProperty("servicecomb.rest.server.maxInitialLineLength", - HttpServerOptions.DEFAULT_MAX_INITIAL_LINE_LENGTH) - .get(); + HttpServerOptions.DEFAULT_MAX_INITIAL_LINE_LENGTH); } } diff --git a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxRestDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxRestDispatcher.java index cd2c14d98..abce41bf5 100644 --- a/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxRestDispatcher.java +++ b/transports/transport-rest/transport-rest-vertx/src/main/java/org/apache/servicecomb/transport/rest/vertx/VertxRestDispatcher.java @@ -17,13 +17,9 @@ package org.apache.servicecomb.transport.rest.vertx; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response.Status; -import jakarta.ws.rs.core.Response.Status.Family; - import org.apache.servicecomb.common.rest.RestProducerInvocationFlow; import org.apache.servicecomb.common.rest.RestVertxProducerInvocationCreator; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.CoreConst; import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.Transport; @@ -37,12 +33,14 @@ import org.apache.servicecomb.swagger.invocation.exception.InvocationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.config.DynamicPropertyFactory; - import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response.Status.Family; public class VertxRestDispatcher extends AbstractVertxHttpDispatcher { private static final Logger LOGGER = LoggerFactory.getLogger(VertxRestDispatcher.class); @@ -59,18 +57,18 @@ public class VertxRestDispatcher extends AbstractVertxHttpDispatcher { @Override public int getOrder() { - return DynamicPropertyFactory.getInstance().getIntProperty(KEY_ORDER, Integer.MAX_VALUE).get(); + return LegacyPropertyFactory.getIntProperty(KEY_ORDER, Integer.MAX_VALUE); } @Override public boolean enabled() { - return DynamicPropertyFactory.getInstance().getBooleanProperty(KEY_ENABLED, true).get(); + return LegacyPropertyFactory.getBooleanProperty(KEY_ENABLED, true); } @Override public void init(Router router) { // cookies handler are enabled by default start from 3.8.3 - String pattern = DynamicPropertyFactory.getInstance().getStringProperty(KEY_PATTERN, null).get(); + String pattern = LegacyPropertyFactory.getStringProperty(KEY_PATTERN); if (pattern == null) { router.route().handler(createBodyHandler()); router.route().failureHandler(this::failureHandler).handler(this::onRequest); diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestAbstractVertxHttpDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestAbstractVertxHttpDispatcher.java index b03ae001c..93bececb8 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestAbstractVertxHttpDispatcher.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestAbstractVertxHttpDispatcher.java @@ -17,17 +17,15 @@ package org.apache.servicecomb.transport.rest.vertx; -import org.apache.commons.configuration.Configuration; import org.apache.servicecomb.common.rest.RestConst; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.AfterClass; -import org.junit.BeforeClass; +import org.apache.servicecomb.config.LegacyPropertyFactory; +import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.junit.runners.MethodSorters; - -import com.netflix.config.DynamicPropertyFactory; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; import io.vertx.ext.web.Router; import mockit.Deencapsulation; @@ -45,21 +43,26 @@ public class TestAbstractVertxHttpDispatcher { } } - Configuration config = (Configuration) DynamicPropertyFactory.getBackingConfigurationSource(); + Environment environment = Mockito.mock(Environment.class); - @BeforeClass - public static void setup() { - ArchaiusUtils.resetConfig(); - } - - - @AfterClass - public static void teardown() { - ArchaiusUtils.resetConfig(); + @Before + public void setUp() { + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty( + RestConst.UPLOAD_MAX_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_MAX_FILE_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, int.class, 0)) + .thenReturn(0); } @Test public void createBodyHandlerUploadDefault() { + Mockito.when(environment.getProperty( + "servicecomb.uploads.directory", String.class, RestConst.UPLOAD_DEFAULT_DIR)) + .thenReturn(RestConst.UPLOAD_DEFAULT_DIR); + AbstractVertxHttpDispatcher dispatcher = new AbstractVertxHttpDispatcherForTest(); RestBodyHandler bodyHandler = (RestBodyHandler) dispatcher.createBodyHandler(); @@ -69,7 +72,9 @@ public class TestAbstractVertxHttpDispatcher { @Test public void createBodyHandlerUploadNormal() { - config.setProperty("servicecomb.uploads.directory", "/path"); + Mockito.when(environment.getProperty( + "servicecomb.uploads.directory", String.class, RestConst.UPLOAD_DEFAULT_DIR)) + .thenReturn("/path"); AbstractVertxHttpDispatcher dispatcher = new AbstractVertxHttpDispatcherForTest(); RestBodyHandler bodyHandler = (RestBodyHandler) dispatcher.createBodyHandler(); diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java index 57a6a2ac1..d4c963ee3 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestRestServerVerticle.java @@ -17,11 +17,25 @@ package org.apache.servicecomb.transport.rest.vertx; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_COMPRESSION_LEVEL; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_DECODER_INITIAL_BUFFER_SIZE; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_DECOMPRESSION_SUPPORTED; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_MAX_CHUNK_SIZE; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_MAX_FORM_ATTRIBUTE_SIZE; +import static io.vertx.core.http.HttpServerOptions.DEFAULT_MAX_INITIAL_LINE_LENGTH; +import static org.apache.servicecomb.core.transport.AbstractTransport.PUBLISH_ADDRESS; +import static org.apache.servicecomb.transport.rest.vertx.TransportConfig.DEFAULT_SERVER_COMPRESSION_SUPPORT; +import static org.apache.servicecomb.transport.rest.vertx.TransportConfig.DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND; +import static org.apache.servicecomb.transport.rest.vertx.TransportConfig.DEFAULT_SERVER_MAX_HEADER_SIZE; +import static org.apache.servicecomb.transport.rest.vertx.TransportConfig.SERVICECOMB_CORS_CONFIG_BASE; + import java.util.HashSet; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import org.apache.servicecomb.config.ConfigUtil; +import org.apache.servicecomb.common.rest.RestConst; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.Transport; @@ -30,6 +44,7 @@ import org.apache.servicecomb.core.transport.AbstractTransport; import org.apache.servicecomb.foundation.common.Holder; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; +import org.apache.servicecomb.foundation.vertx.client.tcp.TcpClientConfig; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.junit.After; @@ -37,11 +52,13 @@ import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; +import org.springframework.core.env.Environment; import io.vertx.core.Context; import io.vertx.core.Handler; import io.vertx.core.Promise; import io.vertx.core.Vertx; +import io.vertx.core.http.Http2Settings; import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerResponse; import io.vertx.core.json.JsonObject; @@ -60,9 +77,80 @@ public class TestRestServerVerticle { Promise<Void> startPromise = null; + Environment environment = Mockito.mock(Environment.class); + @Before public void setUp() { - ConfigUtil.installDynamicConfig(); + Mockito.when(environment.getProperty( + "servicecomb.request.timeout", long.class, (long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT)) + .thenReturn((long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT); + Mockito.when(environment.getProperty("servicecomb.rest.client.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.client.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.server.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.server.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.http.dispatcher.rest.order", int.class, Integer.MAX_VALUE)) + .thenReturn(Integer.MAX_VALUE); + Mockito.when(environment.getProperty("servicecomb.rest.publishPort", int.class, 0)) + .thenReturn(0); + Mockito.when(environment.getProperty("servicecomb.http.dispatcher.rest.enabled", boolean.class, true)) + .thenReturn(true); + Mockito.when(environment.getProperty(SERVICECOMB_CORS_CONFIG_BASE + ".enabled", boolean.class, false)) + .thenReturn(false); + Mockito.when(environment.getProperty(PUBLISH_ADDRESS, String.class, "")) + .thenReturn(""); + Mockito.when(environment.getProperty( + RestConst.UPLOAD_MAX_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_MAX_FILE_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, int.class, 0)) + .thenReturn(0); + Mockito.when(environment.getProperty("servicecomb.rest.server.compression", boolean.class, + DEFAULT_SERVER_COMPRESSION_SUPPORT)) + .thenReturn(false); + Mockito.when(environment.getProperty("servicecomb.rest.server.maxHeaderSize", int.class, + DEFAULT_SERVER_MAX_HEADER_SIZE)) + .thenReturn(DEFAULT_SERVER_MAX_HEADER_SIZE); + Mockito.when(environment.getProperty("servicecomb.rest.server.maxFormAttributeSize", int.class, + DEFAULT_MAX_FORM_ATTRIBUTE_SIZE)) + .thenReturn(DEFAULT_MAX_FORM_ATTRIBUTE_SIZE); + Mockito.when(environment.getProperty("servicecomb.rest.server.compressionLevel", int.class, + DEFAULT_COMPRESSION_LEVEL)) + .thenReturn(DEFAULT_COMPRESSION_LEVEL); + Mockito.when(environment.getProperty("servicecomb.rest.server.maxChunkSize", int.class, + DEFAULT_MAX_CHUNK_SIZE)) + .thenReturn(DEFAULT_MAX_CHUNK_SIZE); + Mockito.when(environment.getProperty("servicecomb.rest.server.decompressionSupported", boolean.class, + DEFAULT_DECOMPRESSION_SUPPORTED)) + .thenReturn(DEFAULT_DECOMPRESSION_SUPPORTED); + Mockito.when(environment.getProperty("servicecomb.rest.server.decoderInitialBufferSize", int.class, + DEFAULT_DECODER_INITIAL_BUFFER_SIZE)) + .thenReturn(DEFAULT_DECODER_INITIAL_BUFFER_SIZE); + Mockito.when(environment.getProperty("servicecomb.rest.server.maxInitialLineLength", int.class, + DEFAULT_MAX_INITIAL_LINE_LENGTH)) + .thenReturn(DEFAULT_MAX_INITIAL_LINE_LENGTH); + Mockito.when(environment.getProperty("servicecomb.rest.server.connection.idleTimeoutInSeconds", int.class, + DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND)) + .thenReturn(DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND); + Mockito.when(environment.getProperty("servicecomb.rest.server.http2.useAlpnEnabled", boolean.class, + true)) + .thenReturn(true); + Mockito.when(environment.getProperty("servicecomb.rest.server.http2ConnectionWindowSize", int.class, + DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE)) + .thenReturn(DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE); + Mockito.when(environment.getProperty("servicecomb.rest.server.http2.connection.idleTimeoutInSeconds", int.class, + DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND)) + .thenReturn(DEFAULT_SERVER_CONNECTION_IDLE_TIMEOUT_SECOND); + Mockito.when(environment.getProperty("servicecomb.rest.server.http2.pushEnabled", boolean.class, + Http2Settings.DEFAULT_ENABLE_PUSH)) + .thenReturn(Http2Settings.DEFAULT_ENABLE_PUSH); + + LegacyPropertyFactory.setEnvironment(environment); + instance = new RestServerVerticle(); startPromise = Promise.promise(); @@ -81,6 +169,7 @@ public class TestRestServerVerticle { public void testRestServerVerticleWithRouter(@Mocked Transport transport, @Mocked Vertx vertx, @Mocked Context context, @Mocked JsonObject jsonObject, @Mocked Promise<Void> startPromise) throws Exception { + URIEndpointObject endpointObject = new URIEndpointObject("http://127.0.0.1:8080"); new Expectations() { { @@ -131,37 +220,6 @@ public class TestRestServerVerticle { server.start(startPromise); } - @Test - public void testRestServerVerticleWithHttp2(@Mocked Transport transport, @Mocked Vertx vertx, - @Mocked Context context, - @Mocked JsonObject jsonObject, @Mocked Promise<Void> startPromise) { - URIEndpointObject endpointObject = new URIEndpointObject("http://127.0.0.1:8080?protocol=http2"); - new Expectations() { - { - transport.parseAddress("http://127.0.0.1:8080?protocol=http2"); - result = endpointObject; - } - }; - Endpoint endpiont = new Endpoint(transport, "http://127.0.0.1:8080?protocol=http2"); - - new Expectations() { - { - context.config(); - result = jsonObject; - jsonObject.getValue(AbstractTransport.ENDPOINT_KEY); - result = endpiont; - } - }; - RestServerVerticle server = new RestServerVerticle(); - boolean status = false; - try { - server.init(vertx, context); - server.start(startPromise); - } catch (Exception e) { - status = true; - } - Assertions.assertFalse(status); - } @Test public void testStartFutureAddressEmpty() { @@ -189,11 +247,23 @@ public class TestRestServerVerticle { @Test public void testMountCorsHandler() { - ArchaiusUtils.setProperty("servicecomb.cors.enabled", true); - ArchaiusUtils.setProperty("servicecomb.cors.allowedMethod", "GET,PUT,POST"); - ArchaiusUtils.setProperty("servicecomb.cors.allowedHeader", "abc,def"); - ArchaiusUtils.setProperty("servicecomb.cors.exposedHeader", "abc2,def2"); - ArchaiusUtils.setProperty("servicecomb.cors.maxAge", 1); + Mockito.when(environment.getProperty("servicecomb.cors.enabled", boolean.class, + false)) + .thenReturn(true); + Mockito.when(environment.getProperty("servicecomb.cors.origin", String.class, + "*")) + .thenReturn("*"); + Mockito.when(environment.getProperty("servicecomb.cors.allowedMethod")) + .thenReturn("GET,PUT,POST"); + Mockito.when(environment.getProperty("servicecomb.cors.allowedHeader")) + .thenReturn("abc,def"); + Mockito.when(environment.getProperty("servicecomb.cors.exposedHeader")) + .thenReturn("abc2,def2"); + Mockito.when(environment.getProperty("servicecomb.cors.maxAge", int.class, -1)) + .thenReturn(1); + Mockito.when(environment.getProperty("servicecomb.cors.allowCredentials", boolean.class, false)) + .thenReturn(false); + Set<HttpMethod> methodSet = new HashSet<>(3); methodSet.add(HttpMethod.GET); methodSet.add(HttpMethod.PUT); diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java deleted file mode 100644 index fd1e88d63..000000000 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestTransportConfig.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * 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.transport.rest.vertx; - -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.hamcrest.MatcherAssert; -import org.hamcrest.Matchers; - -import mockit.Mock; -import mockit.MockUp; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -public class TestTransportConfig { - - @BeforeEach - public void before() { - ArchaiusUtils.resetConfig(); - } - - @AfterEach - public void after() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void testGetAddressNull() { - Assertions.assertNull(TransportConfig.getAddress()); - } - - @Test - public void testGetAddressNormal() { - ArchaiusUtils.setProperty("servicecomb.rest.address", "1.1.1.1"); - Assertions.assertEquals("1.1.1.1", TransportConfig.getAddress()); - } - - @Test - public void testGetThreadCountNull() { - new MockUp<Runtime>() { - @Mock - int availableProcessors() { - return 1; - } - }; - Assertions.assertEquals(1, TransportConfig.getThreadCount()); - } - - @Test - public void testGetThreadCountNormal() { - ArchaiusUtils.setProperty("servicecomb.rest.server.thread-count", 10); - Assertions.assertEquals(10, TransportConfig.getThreadCount()); - } - - @Test - public void testGetCompressedAndHeaderSize() { - ArchaiusUtils.setProperty("servicecomb.rest.server.compression", true); - Assertions.assertTrue(TransportConfig.getCompressed()); - ArchaiusUtils.setProperty("servicecomb.rest.server.maxHeaderSize", 2048); - Assertions.assertEquals(2048, TransportConfig.getMaxHeaderSize()); - } - - @Test - public void testGetDecompressed() { - Assertions.assertFalse(TransportConfig.getDecompressionSupported()); - ArchaiusUtils.setProperty("servicecomb.rest.server.decompressionSupported", true); - Assertions.assertTrue(TransportConfig.getDecompressionSupported()); - } - - @Test - public void testGetDecoderInitialBufferSize() { - Assertions.assertEquals(128, TransportConfig.getDecoderInitialBufferSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.decoderInitialBufferSize", 256); - Assertions.assertEquals(256, TransportConfig.getDecoderInitialBufferSize()); - } - - @Test - public void testGetHttp2ConnectionWindowSize() { - Assertions.assertEquals(-1, TransportConfig.getHttp2ConnectionWindowSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2ConnectionWindowSize", 1); - Assertions.assertEquals(1, TransportConfig.getHttp2ConnectionWindowSize()); - } - - @Test - public void testGetMaxFormAttributeSize() { - Assertions.assertEquals(8192, TransportConfig.getMaxFormAttributeSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.maxFormAttributeSize", 3072); - Assertions.assertEquals(3072, TransportConfig.getMaxFormAttributeSize()); - } - - @Test - public void testGeCompressionLevel() { - Assertions.assertEquals(6, TransportConfig.getCompressionLevel()); - ArchaiusUtils.setProperty("servicecomb.rest.server.compressionLevel", 8); - Assertions.assertEquals(8, TransportConfig.getCompressionLevel()); - } - - @Test - public void testGetMaxChunkSize() { - Assertions.assertEquals(8192, TransportConfig.getMaxChunkSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.maxChunkSize", 65536); - Assertions.assertEquals(65536, TransportConfig.getMaxChunkSize()); - } - - @Test - public void testIsCorsEnabled() { - Assertions.assertFalse(TransportConfig.isCorsEnabled()); - ArchaiusUtils.setProperty("servicecomb.cors.enabled", true); - Assertions.assertTrue(TransportConfig.isCorsEnabled()); - ArchaiusUtils.setProperty("servicecomb.cors.enabled", false); - Assertions.assertFalse(TransportConfig.isCorsEnabled()); - } - - @Test - public void testGetCorsAllowedOrigin() { - Assertions.assertEquals("*", TransportConfig.getCorsAllowedOrigin()); - String origin = "http://localhost:8080"; - ArchaiusUtils.setProperty("servicecomb.cors.origin", origin); - Assertions.assertEquals(origin, TransportConfig.getCorsAllowedOrigin()); - } - - @Test - public void testIsCorsAllowCredentials() { - Assertions.assertFalse(TransportConfig.isCorsAllowCredentials()); - ArchaiusUtils.setProperty("servicecomb.cors.allowCredentials", true); - Assertions.assertTrue(TransportConfig.isCorsAllowCredentials()); - ArchaiusUtils.setProperty("servicecomb.cors.allowCredentials", false); - Assertions.assertFalse(TransportConfig.isCorsAllowCredentials()); - } - - @Test - public void testGetCorsAllowedHeaders() { - String configKey = "servicecomb.cors.allowedHeader"; - Assertions.assertTrue(TransportConfig.getCorsAllowedHeaders().isEmpty()); - ArchaiusUtils.setProperty(configKey, "abc"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedHeaders(), Matchers.containsInAnyOrder("abc")); - ArchaiusUtils.setProperty(configKey, "abc, def"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedHeaders(), Matchers.containsInAnyOrder("abc", "def")); - ArchaiusUtils.setProperty(configKey, "abc ,, def"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedHeaders(), Matchers.containsInAnyOrder("abc", "def")); - ArchaiusUtils.setProperty(configKey, ""); - Assertions.assertTrue(TransportConfig.getCorsAllowedHeaders().isEmpty()); - } - - @Test - public void testGetCorsAllowedMethods() { - String configKey = "servicecomb.cors.allowedMethod"; - Assertions.assertTrue(TransportConfig.getCorsAllowedMethods().isEmpty()); - ArchaiusUtils.setProperty(configKey, "GET"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedMethods(), Matchers.containsInAnyOrder("GET")); - ArchaiusUtils.setProperty(configKey, "GET, POST"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedMethods(), Matchers.containsInAnyOrder("GET", "POST")); - ArchaiusUtils.setProperty(configKey, "GET,,POST"); - MatcherAssert.assertThat(TransportConfig.getCorsAllowedMethods(), Matchers.containsInAnyOrder("GET", "POST")); - ArchaiusUtils.setProperty(configKey, ""); - Assertions.assertTrue(TransportConfig.getCorsAllowedMethods().isEmpty()); - } - - @Test - public void testGetCorsExposedHeaders() { - String configKey = "servicecomb.cors.exposedHeader"; - Assertions.assertTrue(TransportConfig.getCorsExposedHeaders().isEmpty()); - ArchaiusUtils.setProperty(configKey, "abc"); - MatcherAssert.assertThat(TransportConfig.getCorsExposedHeaders(), Matchers.containsInAnyOrder("abc")); - ArchaiusUtils.setProperty(configKey, "abc, def"); - MatcherAssert.assertThat(TransportConfig.getCorsExposedHeaders(), Matchers.containsInAnyOrder("abc", "def")); - ArchaiusUtils.setProperty(configKey, "abc ,, def"); - MatcherAssert.assertThat(TransportConfig.getCorsExposedHeaders(), Matchers.containsInAnyOrder("abc", "def")); - ArchaiusUtils.setProperty(configKey, ""); - Assertions.assertTrue(TransportConfig.getCorsExposedHeaders().isEmpty()); - } - - @Test - public void testGetCorsMaxAge() { - Assertions.assertEquals(-1, TransportConfig.getCorsMaxAge()); - ArchaiusUtils.setProperty("servicecomb.cors.maxAge", 3600); - Assertions.assertEquals(3600, TransportConfig.getCorsMaxAge()); - } - - @Test - public void testHttp2Setting() { - Assertions.assertEquals(100L, TransportConfig.getMaxConcurrentStreams()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.concurrentStreams", 200L); - Assertions.assertEquals(200L, TransportConfig.getMaxConcurrentStreams()); - - Assertions.assertEquals(4096L, TransportConfig.getHttp2HeaderTableSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.HeaderTableSize", 8192L); - Assertions.assertEquals(8192L, TransportConfig.getHttp2HeaderTableSize()); - - Assertions.assertTrue(TransportConfig.getPushEnabled()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.pushEnabled", false); - Assertions.assertFalse(TransportConfig.getPushEnabled()); - - Assertions.assertEquals(65535, TransportConfig.getInitialWindowSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.initialWindowSize", 2 * 65535); - Assertions.assertEquals(2 * 65535, TransportConfig.getInitialWindowSize()); - - Assertions.assertEquals(16384, TransportConfig.getMaxFrameSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.maxFrameSize", 65535); - Assertions.assertEquals(65535, TransportConfig.getMaxFrameSize()); - - Assertions.assertEquals(8192, TransportConfig.getMaxHeaderListSize()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.maxHeaderListSize", 65535); - Assertions.assertEquals(65535, TransportConfig.getMaxHeaderListSize()); - } - - - @Test - public void testUseAlpn() { - Assertions.assertTrue(TransportConfig.getUseAlpn()); - ArchaiusUtils.setProperty("servicecomb.rest.server.http2.useAlpnEnabled", false); - Assertions.assertFalse(TransportConfig.getUseAlpn()); - } - - @Test - public void testGetMaxInitialLineLength() { - Assertions.assertEquals(4096, TransportConfig.getMaxInitialLineLength()); - ArchaiusUtils.setProperty("servicecomb.rest.server.maxInitialLineLength", 8000); - Assertions.assertEquals(8000, TransportConfig.getMaxInitialLineLength()); - } -} diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java index 67099a56a..ddce28c37 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestDispatcher.java @@ -17,12 +17,9 @@ package org.apache.servicecomb.transport.rest.vertx; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response.Status; - import org.apache.http.HttpHeaders; import org.apache.servicecomb.common.rest.RestConst; -import org.apache.servicecomb.config.ConfigUtil; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.bootstrap.SCBBootstrap; import org.apache.servicecomb.core.transport.TransportManager; @@ -35,11 +32,14 @@ import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; +import org.springframework.core.env.Environment; import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.ErrorDataDecoderException; import io.vertx.core.json.JsonObject; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response.Status; import mockit.Mocked; public class TestVertxRestDispatcher { @@ -53,9 +53,19 @@ public class TestVertxRestDispatcher { Throwable throwable; + Environment environment = Mockito.mock(Environment.class); + @Before public void setUp() { - ConfigUtil.installDynamicConfig(); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty( + RestConst.UPLOAD_MAX_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_MAX_FILE_SIZE, long.class, -1L)) + .thenReturn(-1L); + Mockito.when(environment.getProperty(RestConst.UPLOAD_FILE_SIZE_THRESHOLD, int.class, 0)) + .thenReturn(0); + dispatcher = new VertxRestDispatcher(); dispatcher.init(mainRouter); @@ -70,6 +80,9 @@ public class TestVertxRestDispatcher { @Test public void getOrder() { + Mockito.when(environment.getProperty( + "servicecomb.http.dispatcher.rest.order", int.class, Integer.MAX_VALUE)) + .thenReturn(Integer.MAX_VALUE); Assertions.assertEquals(Integer.MAX_VALUE, dispatcher.getOrder()); } diff --git a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestTransport.java b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestTransport.java index 8bec21af7..29377821f 100644 --- a/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestTransport.java +++ b/transports/transport-rest/transport-rest-vertx/src/test/java/org/apache/servicecomb/transport/rest/vertx/TestVertxRestTransport.java @@ -17,10 +17,15 @@ package org.apache.servicecomb.transport.rest.vertx; +import static org.apache.servicecomb.core.transport.AbstractTransport.PUBLISH_ADDRESS; + import java.io.IOException; import java.net.ServerSocket; +import org.apache.servicecomb.config.LegacyPropertyFactory; import org.apache.servicecomb.foundation.vertx.VertxUtils; +import org.apache.servicecomb.foundation.vertx.client.tcp.TcpClientConfig; +import org.junit.Before; import org.junit.Test; import org.junit.jupiter.api.Assertions; import org.mockito.Mockito; @@ -38,6 +43,30 @@ public class TestVertxRestTransport { private final VertxRestTransport instance = new VertxRestTransport(); + Environment environment = Mockito.mock(Environment.class); + + @Before + public void setUp() { + Mockito.when(environment.getProperty( + "servicecomb.request.timeout", long.class, (long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT)) + .thenReturn((long) TcpClientConfig.DEFAULT_LOGIN_TIMEOUT); + Mockito.when(environment.getProperty("servicecomb.rest.client.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.client.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.server.verticle-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.rest.server.thread-count", int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty("servicecomb.http.dispatcher.rest.order", int.class, Integer.MAX_VALUE)) + .thenReturn(Integer.MAX_VALUE); + Mockito.when(environment.getProperty("servicecomb.rest.publishPort", int.class, 0)) + .thenReturn(0); + Mockito.when(environment.getProperty(PUBLISH_ADDRESS, String.class, "")) + .thenReturn(""); + LegacyPropertyFactory.setEnvironment(environment); + } + @Test public void testGetInstance() { Assertions.assertNotNull(instance); @@ -66,6 +95,7 @@ public class TestVertxRestTransport { }; instance.init(); } catch (Exception e) { + e.printStackTrace(); status = true; } Assertions.assertFalse(status); @@ -105,7 +135,6 @@ public class TestVertxRestTransport { }; VertxRestTransport transport = new VertxRestTransport(); - Environment environment = Mockito.mock(Environment.class); transport.setEnvironment(environment); Assertions.assertFalse(transport.canInit()); @@ -126,7 +155,6 @@ public class TestVertxRestTransport { }; VertxRestTransport transport = new VertxRestTransport(); - Environment environment = Mockito.mock(Environment.class); transport.setEnvironment(environment); Assertions.assertTrue(transport.canInit()); }