Skip to content

Commit

Permalink
Support auto module switch and uts
Browse files Browse the repository at this point in the history
Signed-off-by: JermaineHua <[email protected]>
  • Loading branch information
CrazyHZM committed Sep 11, 2024
1 parent 9c64511 commit 6d844ab
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 12 deletions.
6 changes: 6 additions & 0 deletions sofa-boot-project/sofa-boot/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,25 @@
* @author huazhongming
* @since 4.4.0
*/
public class DynamicModuleExportApplicationContextInitializer
implements
ApplicationContextInitializer<ConfigurableApplicationContext> {
public class AutoModuleExportApplicationContextInitializer
implements
ApplicationContextInitializer<ConfigurableApplicationContext> {

private static final String AUTO_MODULE_JDK_ENABLE_KEY = "sofa.boot.auto.module.export.jdk.enable";
private static final String AUTO_MODULE_ALL_ENABLE_KEY = "sofa.boot.auto.module.export.all.enable";

@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ModuleUtil.exportAllJDKModulePackageToAll();
if (isEnable(applicationContext, AUTO_MODULE_ALL_ENABLE_KEY, "false")) {
ModuleUtil.exportAllModulePackageToAll();
} else if (isEnable(applicationContext, AUTO_MODULE_JDK_ENABLE_KEY, "true")) {
ModuleUtil.exportAllJDKModulePackageToAll();
}
}

protected boolean isEnable(ConfigurableApplicationContext applicationContext, String key,
String defaultValue) {
String switchStr = applicationContext.getEnvironment().getProperty(key, defaultValue);
return Boolean.parseBoolean(switchStr);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,14 @@
*/
public class ModuleUtil {

Check warning on line 31 in sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java

View check run for this annotation

Codecov / codecov/patch

sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java#L31

Added line #L31 was not covered by tests

private static final Logger LOGGER = SofaBootLoggerFactory.getLogger(ModuleUtil.class);
private static final Logger LOGGER = SofaBootLoggerFactory
.getLogger(ModuleUtil.class);

private static final MethodHandle implAddOpensToAllUnnamed;
private static final MethodHandle implAddOpens;
private static final MethodHandle implAddExportsToAllUnnamed;
private static final MethodHandle implAddExports;
private static final MethodHandle implAddOpensToAllUnnamed;
private static final MethodHandle implAddOpens;
private static final MethodHandle implAddExportsToAllUnnamed;
private static final MethodHandle implAddExports;
private static final Map<String, Module> nameToModules;

static {
implAddOpensToAllUnnamed = createModuleMethodHandle("implAddOpensToAllUnnamed",
Expand All @@ -44,14 +46,14 @@ public class ModuleUtil {
implAddExportsToAllUnnamed = createModuleMethodHandle("implAddExportsToAllUnnamed",
String.class);
implAddExports = createModuleMethodHandle("implAddExports", String.class);
nameToModules = getNameToModule();
}

/**
* Export all JDK module packages to all.
*/
public static void exportAllJDKModulePackageToAll() {
try {
Map<String, Module> nameToModules = getNameToModule();
if (nameToModules != null) {
nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> {
if (isJDKModulePackage(pkgName)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ org.springframework.boot.SpringApplicationRunListener=\
# Initializers
org.springframework.context.ApplicationContextInitializer=\
com.alipay.sofa.boot.compatibility.CompatibilityVerifierApplicationContextInitializer,\
com.alipay.sofa.boot.Initializer.DynamicModuleExportApplicationContextInitializer
com.alipay.sofa.boot.Initializer.AutoModuleExportApplicationContextInitializer
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
* 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 com.alipay.sofa.boot.initializer;

import com.alipay.sofa.boot.Initializer.AutoModuleExportApplicationContextInitializer;
import com.alipay.sofa.boot.util.ModuleUtil;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;

import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.times;

/**
* @author huazhongming
* @since 4.4.0
*/
public class AutoModuleExportApplicationContextInitializerTests {

private ApplicationContextRunner contextRunner;

@BeforeEach
void setUp() {
contextRunner = new ApplicationContextRunner()
.withInitializer(new AutoModuleExportApplicationContextInitializer());
}

@Test
void jdkDefaultTrue(){

try (MockedStatic<ModuleUtil> mockedStatic = mockStatic(ModuleUtil.class)) {
contextRunner.withPropertyValues().run(applicationContext -> {});
mockedStatic.verify(ModuleUtil::exportAllJDKModulePackageToAll, times(1));
}
}

@Test
void allDefaultFalse(){
try (MockedStatic<ModuleUtil> mockedStatic = mockStatic(ModuleUtil.class)) {
contextRunner.withPropertyValues().run(applicationContext -> {});
mockedStatic.verify(ModuleUtil::exportAllModulePackageToAll, times(0));
}
}

@Test
void jdkDisable(){

try (MockedStatic<ModuleUtil> mockedStatic = mockStatic(ModuleUtil.class)) {
contextRunner.withPropertyValues("sofa.boot.auto.module.export.jdk.enable=false").run(applicationContext -> {});
mockedStatic.verify(ModuleUtil::exportAllJDKModulePackageToAll, times(0));
}
}

@Test
void allEnable(){
try (MockedStatic<ModuleUtil> mockedStatic = mockStatic(ModuleUtil.class)) {
contextRunner.withPropertyValues("sofa.boot.auto.module.export.all.enable=true").run(applicationContext -> {});
mockedStatic.verify(ModuleUtil::exportAllModulePackageToAll, times(1));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void testExportAllJDKModulePackageToAll() throws NoSuchMethodException {

ModuleUtil.exportAllJDKModulePackageToAll();

java.lang.reflect.Method newByteChannel0Method = Files.class.getDeclaredMethod("provider", Path.class);
Method newByteChannel0Method = Files.class.getDeclaredMethod("provider", Path.class);
newByteChannel0Method.setAccessible(true);
}
}

0 comments on commit 6d844ab

Please sign in to comment.