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.
167 lines
6.6 KiB
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");
|
|
}
|
|
} |