You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
789/AdvancedExample/AdvancedExampleTest.java

167 lines
6.6 KiB

/**
* 进阶题测试类
* 测试动态配置管理系统和边车模式功能
*/
import java.util.HashMap;
import java.util.Map;
public class AdvancedExampleTest {
// 辅助方法:重复字符
private static String repeatChar(char c, int count) {
StringBuilder sb = new StringBuilder(count);
for (int i = 0; i < count; i++) {
sb.append(c);
}
return sb.toString();
}
public static void main(String[] args) {
System.out.println("=== 进阶题测试开始 ===\n");
// 测试动态配置管理系统
testDynamicConfigManager();
System.out.println("\n" + repeatChar('-', 50) + "\n");
// 测试边车模式
testSidecar();
System.out.println("\n=== 进阶题测试完成 ===");
}
// 测试动态配置管理系统
private static void testDynamicConfigManager() {
System.out.println("1. 测试动态配置管理系统功能");
// 获取配置管理器实例
DynamicConfigManager configManager = DynamicConfigManager.getInstance();
// 添加配置监听器
configManager.addListener(new DynamicConfigManager.ConfigChangeListener() {
@Override
public void onConfigChange(String key, Object oldValue, Object newValue) {
System.out.println("监听器收到配置变更通知: ");
System.out.println(" 键: " + key);
System.out.println(" 旧值: " + oldValue);
System.out.println(" 新值: " + newValue);
}
});
// 设置单个配置
System.out.println("\n设置单个配置:");
configManager.setConfig("server.port", 8080);
configManager.setConfig("database.url", "jdbc:mysql://localhost:3306/test");
configManager.setConfig("logging.level", "INFO");
configManager.setConfig("feature.cache.enabled", true);
// 获取配置
System.out.println("\n获取配置值:");
int port = configManager.getConfig("server.port", 8080);
String dbUrl = configManager.getConfig("database.url", "");
String logLevel = configManager.getConfig("logging.level", "DEBUG");
boolean cacheEnabled = configManager.getConfig("feature.cache.enabled", false);
String nonExistent = configManager.getConfig("non.existent", "默认值");
System.out.println("server.port = " + port);
System.out.println("database.url = " + dbUrl);
System.out.println("logging.level = " + logLevel);
System.out.println("feature.cache.enabled = " + cacheEnabled);
System.out.println("non.existent = " + nonExistent);
// 热更新配置测试
System.out.println("\n测试配置热更新:");
System.out.println("更新前的日志级别: " + configManager.getConfig("logging.level", "DEBUG"));
configManager.setConfig("logging.level", "DEBUG"); // 触发监听器
System.out.println("更新后的日志级别: " + configManager.getConfig("logging.level", "DEBUG"));
// 批量更新配置
System.out.println("\n批量更新配置:");
Map<String, Object> batchConfigs = new HashMap<>();
batchConfigs.put("cache.size", 1000);
batchConfigs.put("timeout.seconds", 30);
batchConfigs.put("retries.max", 3);
configManager.setConfigs(batchConfigs);
// 查看所有配置
System.out.println("\n当前所有配置键:");
System.out.println(configManager.getAllKeys());
System.out.println("配置总数: " + configManager.size());
// 移除配置
System.out.println("\n移除配置:");
configManager.removeConfig("cache.size");
System.out.println("移除后配置总数: " + configManager.size());
System.out.println("cache.size 是否存在: " + configManager.containsKey("cache.size"));
}
// 测试边车模式
private static void testSidecar() {
System.out.println("2. 测试边车模式功能");
// 创建边车实例
Sidecar sidecar = new Sidecar("test-app-v1");
// 添加边车功能
System.out.println("\n添加边车功能:");
sidecar.addFeature(new Sidecar.LoggingFeature());
sidecar.addFeature(new Sidecar.MonitoringFeature());
// 添加自定义功能
sidecar.addFeature(new Sidecar.SidecarFeature() {
@Override
public String getName() { return "安全检查"; }
@Override
public void start() { System.out.println("安全检查功能已启动"); }
@Override
public void stop() { System.out.println("安全检查功能已停止"); }
@Override
public void handleRequest(Sidecar.RequestContext context) {
System.out.println("安全检查: 请求 " + context.getRequestId() + " 路径 " + context.getPath());
// 模拟安全检查
if (context.getPath().contains("admin") && !context.getPath().startsWith("/api/auth")) {
context.markError("未授权访问管理路径");
}
}
});
// 启动边车
System.out.println("\n启动边车:");
sidecar.start();
// 测试同步请求处理
System.out.println("\n测试同步请求处理:");
sidecar.handleRequestSync("req-001", "/api/users/list");
sidecar.handleRequestSync("req-002", "/api/products/123");
// 测试未授权请求(应该被安全检查拦截)
System.out.println("\n测试未授权请求:");
sidecar.handleRequestSync("req-003", "/api/admin/dashboard");
// 测试异步请求处理
System.out.println("\n测试异步请求处理:");
for (int i = 4; i <= 10; i++) {
sidecar.handleRequestAsync("req-" + String.format("%03d", i), "/api/async/test/" + i);
}
// 等待异步请求处理完成
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 查看统计信息
System.out.println("\n边车统计信息:");
System.out.println(sidecar.getStats());
// 停止边车
System.out.println("\n停止边车:");
sidecar.stop();
// 测试边车停止后的请求处理
System.out.println("\n测试边车停止后的请求处理:");
sidecar.handleRequestSync("req-011", "/api/test/stopped");
}
}