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 791c441f761..0e456385790 100644 --- a/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java +++ b/core/src/main/java/org/apache/servicecomb/core/ConfigurationSpringInitializer.java @@ -36,6 +36,7 @@ import org.apache.servicecomb.config.event.RefreshGovernanceConfigurationEvent; import org.apache.servicecomb.config.spi.ConfigCenterConfigurationSource; import org.apache.servicecomb.foundation.bootstrap.BootStrapService; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.event.EventManager; import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; import org.slf4j.Logger; @@ -110,6 +111,7 @@ public ConfigurationSpringInitializer() { @Override public void setEnvironment(Environment environment) { super.setEnvironment(environment); + LegacyPropertyFactory.setEnvironment(environment); if (isExternalInit()) { return; } diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/LegacyPropertyFactory.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/LegacyPropertyFactory.java new file mode 100644 index 00000000000..5abbe6f0ac5 --- /dev/null +++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/LegacyPropertyFactory.java @@ -0,0 +1,40 @@ +/* + * 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.foundation.common; + +import org.springframework.core.env.Environment; + +public class LegacyPropertyFactory { + private static Environment environment; + + public static void setEnvironment(Environment environment) { + LegacyPropertyFactory.environment = environment; + } + + public static Environment getEnvironment() { + return environment; + } + + public static String getStringProperty(String key, String defaultValue) { + return environment.getProperty(key, defaultValue); + } + + public static int getIntProperty(String key, int defaultValue) { + return environment.getProperty(key, int.class, defaultValue); + } +} diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/KeyPairUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/KeyPairUtils.java index 70b0700672c..d9aef85b42c 100644 --- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/KeyPairUtils.java +++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/KeyPairUtils.java @@ -31,23 +31,22 @@ import java.security.spec.X509EncodedKeySpec; import java.util.Base64; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.netflix.config.DynamicPropertyFactory; - public class KeyPairUtils { private static final Logger LOGGER = LoggerFactory.getLogger(KeyPairUtils.class); - private static final String KEY_GENERATOR_ALGORITHM = DynamicPropertyFactory.getInstance() - .getStringProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA").get();; + private static final String KEY_GENERATOR_ALGORITHM = LegacyPropertyFactory + .getStringProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA");; - private static final String SIGN_ALG = DynamicPropertyFactory.getInstance() - .getStringProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA").get(); + private static final String SIGN_ALG = LegacyPropertyFactory + .getStringProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA"); - private static final int KEY_SIZE = DynamicPropertyFactory.getInstance() - .getIntProperty("servicecomb.publicKey.accessControl.keySize", 2048).get(); + private static final int KEY_SIZE = LegacyPropertyFactory + .getIntProperty("servicecomb.publicKey.accessControl.keySize", 2048); private static final Base64.Encoder encoder = Base64.getEncoder(); diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestRSAUtil.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestRSAUtil.java index ab6458cffc2..057dbcf669b 100644 --- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestRSAUtil.java +++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestRSAUtil.java @@ -16,8 +16,12 @@ */ package org.apache.servicecomb.foundation.common.utils; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @@ -25,6 +29,17 @@ import java.security.spec.InvalidKeySpecException; public class TestRSAUtil { + @BeforeAll + public static void setUpClass() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA")) + .thenReturn("RSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA")) + .thenReturn("SHA256withRSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keySize", int.class, 2048)) + .thenReturn(2048); + } @Test public void testSignVerify() diff --git a/foundations/foundation-ssl/pom.xml b/foundations/foundation-ssl/pom.xml index b5802336d3d..334e47629bd 100644 --- a/foundations/foundation-ssl/pom.xml +++ b/foundations/foundation-ssl/pom.xml @@ -27,6 +27,10 @@ Java Chassis::Foundations::SSL + + org.springframework + spring-context + com.netflix.archaius archaius-core diff --git a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java index bbc7e0d9d7d..86ddc026ea7 100644 --- a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java +++ b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOption.java @@ -25,11 +25,9 @@ import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; -import java.util.List; import java.util.Properties; -import com.netflix.config.ConcurrentCompositeConfiguration; -import com.netflix.config.DynamicPropertyFactory; +import org.springframework.core.env.Environment; /** * SSL配置选项。 @@ -263,20 +261,10 @@ private static String listToString(Object[] lists) { return sb.toString(); } - public static String getStringProperty(ConcurrentCompositeConfiguration configSource, String defaultValue, - String... keys) { + public static String getStringProperty(Environment environment, String defaultValue, String... keys) { String property = null; for (String key : keys) { - if (configSource != null) { - Object v = configSource.getProperty(key); - if (v instanceof List) { - property = listToString(((List) v).toArray()); - } else { - property = (String) configSource.getProperty(key); - } - } else { - property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get(); - } + property = environment.getProperty(key); if (property != null) { break; } @@ -289,17 +277,10 @@ public static String getStringProperty(ConcurrentCompositeConfiguration configSo } } - private static boolean getBooleanProperty(ConcurrentCompositeConfiguration configSource, boolean defaultValue, - String... keys) { + private static boolean getBooleanProperty(Environment environment, boolean defaultValue, String... keys) { String property = null; for (String key : keys) { - if (configSource != null) { - if (configSource.getProperty(key) != null) { - return configSource.getBoolean(key); - } - } else { - property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get(); - } + property = environment.getProperty(key); if (property != null) { break; } @@ -312,83 +293,79 @@ private static boolean getBooleanProperty(ConcurrentCompositeConfiguration confi } } - public static SSLOption buildFromYaml(String tag, ConcurrentCompositeConfiguration configSource) { + public static SSLOption buildFromYaml(String tag, Environment environment) { SSLOption option = new SSLOption(); - option.engine = getStringProperty(configSource, + option.engine = getStringProperty(environment, DEFAULT_OPTION.getEngine(), "ssl." + tag + ".engine", "ssl.engine"); option.protocols = - getStringProperty(configSource, + getStringProperty(environment, DEFAULT_OPTION.getProtocols(), "ssl." + tag + ".protocols", "ssl.protocols"); option.ciphers = - getStringProperty(configSource, DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".ciphers", "ssl.ciphers"); + getStringProperty(environment, DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".ciphers", "ssl.ciphers"); option.authPeer = - getBooleanProperty(configSource, DEFAULT_OPTION.isAuthPeer(), "ssl." + tag + ".authPeer", "ssl.authPeer"); + getBooleanProperty(environment, DEFAULT_OPTION.isAuthPeer(), "ssl." + tag + ".authPeer", "ssl.authPeer"); option.checkCNHost = - getBooleanProperty(configSource, + getBooleanProperty(environment, DEFAULT_OPTION.isCheckCNHost(), "ssl." + tag + ".checkCN.host", "ssl.checkCN.host"); option.checkCNWhite = - getBooleanProperty(configSource, + getBooleanProperty(environment, DEFAULT_OPTION.isCheckCNWhite(), "ssl." + tag + ".checkCN.white", "ssl.checkCN.white"); - option.checkCNWhiteFile = getStringProperty(configSource, + option.checkCNWhiteFile = getStringProperty(environment, DEFAULT_OPTION.getCiphers(), "ssl." + tag + ".checkCN.white.file", "ssl.checkCN.white.file"); - option.allowRenegociate = getBooleanProperty(configSource, + option.allowRenegociate = getBooleanProperty(environment, DEFAULT_OPTION.isAllowRenegociate(), "ssl." + tag + ".allowRenegociate", "ssl.allowRenegociate"); option.storePath = - getStringProperty(configSource, + getStringProperty(environment, DEFAULT_OPTION.getStorePath(), "ssl." + tag + ".storePath", "ssl.storePath"); option.clientAuth = - getStringProperty(configSource, + getStringProperty(environment, DEFAULT_OPTION.getClientAuth(), "ssl." + tag + ".storePath", "ssl.clientAuth"); option.trustStore = - getStringProperty(configSource, + getStringProperty(environment, DEFAULT_OPTION.getTrustStore(), "ssl." + tag + ".trustStore", "ssl.trustStore"); - option.trustStoreType = getStringProperty(configSource, + option.trustStoreType = getStringProperty(environment, DEFAULT_OPTION.getTrustStoreType(), "ssl." + tag + ".trustStoreType", "ssl.trustStoreType"); - option.trustStoreValue = getStringProperty(configSource, + option.trustStoreValue = getStringProperty(environment, DEFAULT_OPTION.getTrustStoreValue(), "ssl." + tag + ".trustStoreValue", "ssl.trustStoreValue"); option.keyStore = - getStringProperty(configSource, DEFAULT_OPTION.getKeyStore(), "ssl." + tag + ".keyStore", "ssl.keyStore"); + getStringProperty(environment, DEFAULT_OPTION.getKeyStore(), "ssl." + tag + ".keyStore", "ssl.keyStore"); option.keyStoreType = - getStringProperty(configSource, + getStringProperty(environment, DEFAULT_OPTION.getKeyStoreType(), "ssl." + tag + ".keyStoreType", "ssl.keyStoreType"); - option.keyStoreValue = getStringProperty(configSource, + option.keyStoreValue = getStringProperty(environment, DEFAULT_OPTION.getKeyStoreValue(), "ssl." + tag + ".keyStoreValue", "ssl.keyStoreValue"); - option.crl = getStringProperty(configSource, DEFAULT_OPTION.getCrl(), "ssl." + tag + ".crl", "ssl.crl"); + option.crl = getStringProperty(environment, DEFAULT_OPTION.getCrl(), "ssl." + tag + ".crl", "ssl.crl"); option.sslCustomClass = - getStringProperty(configSource, null, "ssl." + tag + ".sslCustomClass", "ssl.sslCustomClass"); + getStringProperty(environment, null, "ssl." + tag + ".sslCustomClass", "ssl.sslCustomClass"); return option; } - public static SSLOption buildFromYaml(String tag) { - return buildFromYaml(tag, null); - } - private void fromProperty(Properties props) { this.protocols = propString(props, "ssl.protocols"); this.ciphers = propString(props, "ssl.ciphers"); diff --git a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOptionFactory.java b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOptionFactory.java index 4abe85ca61b..49cdb3ab15b 100644 --- a/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOptionFactory.java +++ b/foundations/foundation-ssl/src/main/java/org/apache/servicecomb/foundation/ssl/SSLOptionFactory.java @@ -17,11 +17,11 @@ package org.apache.servicecomb.foundation.ssl; -import com.netflix.config.ConcurrentCompositeConfiguration; +import org.springframework.core.env.Environment; public interface SSLOptionFactory { - static SSLOptionFactory createSSLOptionFactory(String tag, ConcurrentCompositeConfiguration configSource) { - String name = SSLOption.getStringProperty(configSource, + static SSLOptionFactory createSSLOptionFactory(String tag, Environment environment) { + String name = SSLOption.getStringProperty(environment, null, "ssl." + tag + ".sslOptionFactory", "ssl.sslOptionFactory"); diff --git a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java index 67ae3828499..912746e71e8 100644 --- a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java +++ b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/SSLOptionTest.java @@ -24,32 +24,38 @@ import java.net.URL; import java.util.Properties; -import org.apache.commons.configuration.SystemConfiguration; -import org.apache.servicecomb.config.ConfigUtil; -import org.apache.servicecomb.config.archaius.sources.ConfigSourceMaker; -import org.junit.AfterClass; +import org.junit.Before; import org.junit.Test; -import com.netflix.config.ConcurrentCompositeConfiguration; -import com.netflix.config.ConcurrentMapConfiguration; -import com.netflix.config.ConfigurationManager; -import com.netflix.config.DynamicConfiguration; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.FixedDelayPollingScheduler; - -import mockit.Deencapsulation; import mockit.Mock; import mockit.MockUp; import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; public class SSLOptionTest { private static final String DIR = Thread.currentThread().getContextClassLoader().getResource("").getPath(); - @AfterClass - public static void tearDown() throws Exception { - Deencapsulation.setField(ConfigurationManager.class, "instance", null); - Deencapsulation.setField(ConfigurationManager.class, "customConfigurationInstalled", false); - Deencapsulation.setField(DynamicPropertyFactory.class, "config", null); + Environment environment = Mockito.mock(Environment.class); + + @Before + public void setUp() throws Exception { + Mockito.when(environment.getProperty("ssl.protocols")).thenReturn("TLSv1.2,TLSv1.1,TLSv1,SSLv2Hello"); + Mockito.when(environment.getProperty("ssl.ciphers")).thenReturn( + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"); + Mockito.when(environment.getProperty("ssl.authPeer")).thenReturn("true"); + Mockito.when(environment.getProperty("ssl.checkCN.host")).thenReturn("true"); + Mockito.when(environment.getProperty("ssl.checkCN.white")).thenReturn("true"); + Mockito.when(environment.getProperty("ssl.checkCN.white.file")).thenReturn("white.list"); + Mockito.when(environment.getProperty("ssl.allowRenegotiate")).thenReturn("false"); + Mockito.when(environment.getProperty("ssl.storePath")).thenReturn("internal"); + Mockito.when(environment.getProperty("ssl.trustStore")).thenReturn("trust.jks"); + Mockito.when(environment.getProperty("ssl.trustStoreType")).thenReturn("JKS"); + Mockito.when(environment.getProperty("ssl.trustStoreValue")).thenReturn("Changeme_123"); + Mockito.when(environment.getProperty("ssl.keyStore")).thenReturn("server.p12"); + Mockito.when(environment.getProperty("ssl.keyStoreType")).thenReturn("PKCS12"); + Mockito.when(environment.getProperty("ssl.keyStoreValue")).thenReturn("Changeme_123"); + Mockito.when(environment.getProperty("ssl.crl")).thenReturn("revoke.crl"); } @Test @@ -124,21 +130,13 @@ public void testSSLOption() { @Test public void testSSLOptionYaml() { - // configuration from yaml files: default microservice.yaml - DynamicConfiguration configFromYamlFile = - new DynamicConfiguration(ConfigSourceMaker.yamlConfigSource(), new FixedDelayPollingScheduler()); - // configuration from system properties - ConcurrentMapConfiguration configFromSystemProperties = - new ConcurrentMapConfiguration(new SystemConfiguration()); - - // create a hierarchy of configuration that makes - // 1) dynamic configuration source override system properties - ConcurrentCompositeConfiguration finalConfig = new ConcurrentCompositeConfiguration(); - finalConfig.addConfiguration(configFromSystemProperties, "systemEnvConfig"); - finalConfig.addConfiguration(configFromYamlFile, "configFromYamlFile"); - ConfigurationManager.install(finalConfig); - - SSLOption option = SSLOption.buildFromYaml("server"); + Mockito.when(environment.getProperty("ssl.server.sslCustomClass")).thenReturn("wwrong"); + Mockito.when(environment.getProperty("ssl.ciphers")) + .thenReturn("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256," + + "TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA," + + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA"); + + SSLOption option = SSLOption.buildFromYaml("server", environment); String protocols = option.getProtocols(); option.setProtocols(protocols); @@ -170,7 +168,7 @@ public void testSSLOptionYaml() { boolean allowRenegociate = option.isAllowRenegociate(); option.setAllowRenegociate(allowRenegociate); - Assertions.assertFalse(allowRenegociate); + Assertions.assertTrue(allowRenegociate); String storePath = option.getStorePath(); option.setStorePath(storePath); @@ -212,10 +210,9 @@ public void testSSLOptionYaml() { @Test public void testSSLOptionYamlOption2() throws Exception { - System.setProperty("ssl.protocols", "TLSv1.2"); - ConcurrentCompositeConfiguration finalConfig = ConfigUtil.createLocalConfig(); + Mockito.when(environment.getProperty("ssl.protocols")).thenReturn("TLSv1.2"); - SSLOption option = SSLOption.buildFromYaml("server", finalConfig); + SSLOption option = SSLOption.buildFromYaml("server", environment); String protocols = option.getProtocols(); option.setProtocols(protocols); @@ -225,10 +222,9 @@ public void testSSLOptionYamlOption2() throws Exception { @Test public void testSSLOptionYamlOptionWithProperyFalse() throws Exception { - System.setProperty("ssl.authPeer", "false"); - ConcurrentCompositeConfiguration finalConfig = ConfigUtil.createLocalConfig(); + Mockito.when(environment.getProperty("ssl.authPeer")).thenReturn("false"); - SSLOption option = SSLOption.buildFromYaml("server", finalConfig); + SSLOption option = SSLOption.buildFromYaml("server", environment); boolean authPeer = option.isAuthPeer(); option.setAuthPeer(authPeer); @@ -238,10 +234,9 @@ public void testSSLOptionYamlOptionWithProperyFalse() throws Exception { @Test public void testSSLOptionYamlOptionWithProperyTrue() throws Exception { - System.setProperty("ssl.authPeer", "true"); - ConcurrentCompositeConfiguration finalConfig = ConfigUtil.createLocalConfig(); + Mockito.when(environment.getProperty("ssl.authPeer")).thenReturn("true"); - SSLOption option = SSLOption.buildFromYaml("server", finalConfig); + SSLOption option = SSLOption.buildFromYaml("server", environment); boolean authPeer = option.isAuthPeer(); option.setAuthPeer(authPeer); @@ -251,9 +246,12 @@ public void testSSLOptionYamlOptionWithProperyTrue() throws Exception { @Test public void testSSLOptionYamlOption() throws Exception { - ConcurrentCompositeConfiguration finalConfig = ConfigUtil.createLocalConfig(); + Mockito.when(environment.getProperty("ssl.ciphers")) + .thenReturn("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256," + + "TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA," + + "TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA"); - SSLOption option = SSLOption.buildFromYaml("server", finalConfig); + SSLOption option = SSLOption.buildFromYaml("server", environment); String protocols = option.getProtocols(); option.setProtocols(protocols); @@ -285,7 +283,7 @@ public void testSSLOptionYamlOption() throws Exception { boolean allowRenegociate = option.isAllowRenegociate(); option.setAllowRenegociate(allowRenegociate); - Assertions.assertFalse(allowRenegociate); + Assertions.assertTrue(allowRenegociate); String storePath = option.getStorePath(); option.setStorePath(storePath); diff --git a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TestSSLOptionFactory.java b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TestSSLOptionFactory.java index 3ee54ccab47..6cdcc3bab0b 100644 --- a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TestSSLOptionFactory.java +++ b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TestSSLOptionFactory.java @@ -19,8 +19,8 @@ import org.junit.Test; import org.junit.jupiter.api.Assertions; - -import com.netflix.config.ConcurrentCompositeConfiguration; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; import mockit.Expectations; import mockit.Mock; @@ -28,10 +28,11 @@ import mockit.Mocked; public class TestSSLOptionFactory { + Environment environment = Mockito.mock(Environment.class); @Test public void testSSLOptionFactory() { - SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory("cc", null); + SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory("cc", environment); Assertions.assertNull(factory); } @@ -39,13 +40,13 @@ public void testSSLOptionFactory() { public void testSSLOptionFactoryWrong(@Mocked SSLOption option) { new Expectations() { { - SSLOption.getStringProperty((ConcurrentCompositeConfiguration) any, anyString, (String[]) any); + SSLOption.getStringProperty((Environment) any, anyString, (String[]) any); result = "wrong"; } }; IllegalStateException exception = Assertions.assertThrows(IllegalStateException.class, - () -> SSLOptionFactory.createSSLOptionFactory("cc", null)); + () -> SSLOptionFactory.createSSLOptionFactory("cc", environment)); Assertions.assertEquals("Failed to create SSLOptionFactory.", exception.getMessage()); } @@ -53,12 +54,12 @@ public void testSSLOptionFactoryWrong(@Mocked SSLOption option) { public void testSSLOptionFactoryCorrent() { new MockUp() { @Mock - public String getStringProperty(ConcurrentCompositeConfiguration configSource, String defaultValue, + public String getStringProperty(Environment environment, String defaultValue, String... keys) { return "org.apache.servicecomb.foundation.ssl.MyOptionFactory"; } }; - SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory("cc", null); + SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory("cc", environment); Assertions.assertEquals(factory.createSSLOption().getProtocols(), "TLSv1.2"); } } diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java index 8a2012e3b86..35c8ab6d6d5 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxTLSBuilder.java @@ -23,6 +23,7 @@ import java.util.HashSet; import org.apache.commons.lang3.StringUtils; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.ssl.SSLCustom; import org.apache.servicecomb.foundation.ssl.SSLManager; import org.apache.servicecomb.foundation.ssl.SSLOption; @@ -76,10 +77,10 @@ private static void setClientAuth(SSLOption sslOption, NetServerOptions netServe } public static void buildHttpClientOptions(String sslKey, HttpClientOptions httpClientOptions) { - SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(sslKey, null); + SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(sslKey, LegacyPropertyFactory.getEnvironment()); SSLOption sslOption; if (factory == null) { - sslOption = SSLOption.buildFromYaml(sslKey); + sslOption = SSLOption.buildFromYaml(sslKey, LegacyPropertyFactory.getEnvironment()); } else { sslOption = factory.createSSLOption(); } @@ -88,10 +89,10 @@ public static void buildHttpClientOptions(String sslKey, HttpClientOptions httpC } public static void buildWebSocketClientOptions(String sslKey, WebSocketClientOptions webSocketClientOptions) { - SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(sslKey, null); + SSLOptionFactory factory = SSLOptionFactory.createSSLOptionFactory(sslKey, LegacyPropertyFactory.getEnvironment()); SSLOption sslOption; if (factory == null) { - sslOption = SSLOption.buildFromYaml(sslKey); + sslOption = SSLOption.buildFromYaml(sslKey, LegacyPropertyFactory.getEnvironment()); } else { sslOption = factory.createSSLOption(); } diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java index 972d145ec77..d9453e2ed82 100644 --- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java +++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/server/TcpServer.java @@ -19,6 +19,7 @@ import java.net.InetSocketAddress; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.ssl.SSLCustom; import org.apache.servicecomb.foundation.ssl.SSLOption; @@ -48,10 +49,10 @@ public void init(Vertx vertx, String sslKey, AsyncResultCallback() { @@ -137,7 +135,7 @@ public boolean isAuthPeer() { @Test public void testBuildClientOptionsBaseSTORE_JKS() { - SSLOption option = SSLOption.buildFromYaml("rest.consumer"); + SSLOption option = SSLOption.buildFromYaml("rest.consumer", environment); SSLCustom custom = SSLCustom.createSSLCustom(option.getSslCustomClass()); HttpClientOptions serverOptions = new HttpClientOptions(); new MockUp() { @@ -154,7 +152,7 @@ public String getKeyStoreType() { @Test public void testBuildClientOptionsBaseSTORE_PKCS12() { - SSLOption option = SSLOption.buildFromYaml("rest.consumer"); + SSLOption option = SSLOption.buildFromYaml("rest.consumer", environment); SSLCustom custom = SSLCustom.createSSLCustom(option.getSslCustomClass()); HttpClientOptions serverOptions = new HttpClientOptions(); new MockUp() { @@ -171,7 +169,7 @@ public String getTrustStoreType() { @Test public void testBuildHttpServerOptionsRequest() { - SSLOption option = SSLOption.buildFromYaml("rest.provider"); + SSLOption option = SSLOption.buildFromYaml("rest.provider", environment); SSLCustom custom = SSLCustom.createSSLCustom(option.getSslCustomClass()); HttpServerOptions serverOptions = new HttpServerOptions(); diff --git a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthHandlerBoot.java b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthHandlerBoot.java index 8c61ef7f882..068b599bbc0 100644 --- a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthHandlerBoot.java +++ b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthHandlerBoot.java @@ -22,6 +22,7 @@ import org.apache.servicecomb.core.BootListener.BootEvent; import org.apache.servicecomb.core.SCBEngine; import org.apache.servicecomb.core.bootstrap.SCBBootstrap; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.foundation.token.Keypair4Auth; import org.apache.servicecomb.registry.RegistrationManager; @@ -32,6 +33,8 @@ 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 TestAuthHandlerBoot { private SCBEngine engine; @@ -39,6 +42,14 @@ public class TestAuthHandlerBoot { @BeforeEach public void setUp() { ConfigUtil.installDynamicConfig(); + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA")) + .thenReturn("RSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA")) + .thenReturn("SHA256withRSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keySize", int.class, 2048)) + .thenReturn(2048); engine = SCBBootstrap.createSCBEngineForTest().run(); } diff --git a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthenticationToken.java b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthenticationToken.java index 9555a9066bd..c0c89874c46 100644 --- a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthenticationToken.java +++ b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestAuthenticationToken.java @@ -21,13 +21,27 @@ import java.security.SignatureException; import java.security.spec.InvalidKeySpecException; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.utils.KeyPairUtils; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.core.env.Environment; public class TestAuthenticationToken { - + @BeforeAll + public static void setUpClass() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA")) + .thenReturn("RSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA")) + .thenReturn("SHA256withRSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keySize", int.class, 2048)) + .thenReturn(2048); + } @Test public void testRSAAuthenticationToken() diff --git a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/provider/TestProviderTokenManager.java b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/provider/TestProviderTokenManager.java index db94319eb4b..cfa2364cfb8 100644 --- a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/provider/TestProviderTokenManager.java +++ b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/provider/TestProviderTokenManager.java @@ -22,6 +22,7 @@ import org.apache.servicecomb.authentication.AuthenticationToken; import org.apache.servicecomb.authentication.consumer.ConsumerTokenManager; import org.apache.servicecomb.config.ConfigUtil; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.utils.KeyPairEntry; import org.apache.servicecomb.foundation.common.utils.KeyPairUtils; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; @@ -40,12 +41,21 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; import org.mockito.Mockito; +import org.springframework.core.env.Environment; public class TestProviderTokenManager { @BeforeEach public void setUp() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keyGeneratorAlgorithm", "RSA")) + .thenReturn("RSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.signAlgorithm", "SHA256withRSA")) + .thenReturn("SHA256withRSA"); + Mockito.when(environment.getProperty("servicecomb.publicKey.accessControl.keySize", int.class, 2048)) + .thenReturn(2048); ConfigUtil.installDynamicConfig(); } 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 1493fea1b7f..4f476949179 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 @@ -26,6 +26,7 @@ import org.apache.servicecomb.codec.protobuf.definition.OperationProtobuf; import org.apache.servicecomb.codec.protobuf.definition.ProtobufManager; import org.apache.servicecomb.core.Invocation; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.ssl.SSLCustom; import org.apache.servicecomb.foundation.ssl.SSLOption; import org.apache.servicecomb.foundation.ssl.SSLOptionFactory; @@ -78,10 +79,10 @@ TcpClientConfig createTcpClientConfig() { .getLongProperty("servicecomb.request.timeout", TcpClientConfig.DEFAULT_LOGIN_TIMEOUT).get()); SSLOptionFactory factory = - SSLOptionFactory.createSSLOptionFactory(SSL_KEY, null); + SSLOptionFactory.createSSLOptionFactory(SSL_KEY, LegacyPropertyFactory.getEnvironment()); SSLOption sslOption; if (factory == null) { - sslOption = SSLOption.buildFromYaml(SSL_KEY); + sslOption = SSLOption.buildFromYaml(SSL_KEY, LegacyPropertyFactory.getEnvironment()); } else { sslOption = factory.createSSLOption(); } 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 43db6143352..3307474d940 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 @@ -31,6 +31,7 @@ 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.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager; @@ -45,6 +46,7 @@ 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; @@ -74,6 +76,8 @@ public class TestHighwayClient { @BeforeClass public static void setup() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); ArchaiusUtils.resetConfig(); ArchaiusUtils.setProperty(REQUEST_TIMEOUT_KEY, 2000); 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 624fc6dd775..a4281e4f877 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 @@ -23,6 +23,7 @@ import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.foundation.common.Holder; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.swagger.invocation.AsyncResponse; @@ -33,6 +34,7 @@ import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; import mockit.Mock; import mockit.MockUp; @@ -44,6 +46,8 @@ public class TestHighwayTransport { @BeforeClass public static void setup() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); VertxUtils.blockCloseVertxByName("transport"); Thread.getAllStackTraces().keySet().forEach(t -> LOGGER.info("before: {}", t.getName())); } 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 9edf23126f2..80006e76383 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 @@ -30,6 +30,7 @@ import org.apache.servicecomb.core.Endpoint; import org.apache.servicecomb.core.event.ServerAccessLogEvent; import org.apache.servicecomb.core.transport.AbstractTransport; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.event.EventManager; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.common.utils.ExceptionUtils; @@ -309,10 +310,10 @@ private HttpServerOptions createDefaultHttpServerOptions() { } if (endpointObject.isSslEnabled()) { SSLOptionFactory factory = - SSLOptionFactory.createSSLOptionFactory(SSL_KEY, null); + SSLOptionFactory.createSSLOptionFactory(SSL_KEY, LegacyPropertyFactory.getEnvironment()); SSLOption sslOption; if (factory == null) { - sslOption = SSLOption.buildFromYaml(SSL_KEY); + sslOption = SSLOption.buildFromYaml(SSL_KEY, LegacyPropertyFactory.getEnvironment()); } else { sslOption = factory.createSSLOption(); } 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 13fe1bf41c6..c32b41b27e4 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 @@ -28,6 +28,7 @@ import org.apache.servicecomb.core.bootstrap.SCBBootstrap; import org.apache.servicecomb.core.transport.AbstractTransport; import org.apache.servicecomb.foundation.common.Holder; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.net.URIEndpointObject; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.serviceregistry.RegistryUtils; @@ -38,6 +39,7 @@ 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; @@ -63,6 +65,8 @@ public class TestRestServerVerticle { @Before public void setUp() { + Environment environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); ConfigUtil.installDynamicConfig(); instance = new RestServerVerticle(); startPromise = Promise.promise();