Files
schemaCheck/src/test/java/com/codechecker/cache/config/ConfigLoaderTest.java

76 lines
3.1 KiB
Java

package com.codechecker.cache.config;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* 验证默认配置加载与业务 YAML 深度合并(业务项优先)。
*/
class ConfigLoaderTest {
@Test
void loadsDefaultsWhenNoBusinessConfig() {
CheckerConfig config = ConfigLoader.load(null);
assertTrue(config.isEnabled());
assertEquals("notify", config.getMode());
assertTrue(config.getDetection().getPatterns().contains("W01"));
assertTrue(config.getDetection().getMqPatterns().contains("MQ01"));
assertTrue(config.getDetection().getMqPatterns().contains("MQ-K01"));
assertTrue(config.getDetection().getMqPatterns().contains("MQ04"));
assertTrue(config.getDetection().getMqPatterns().contains("MQ-K03"));
assertTrue(config.getDetection().isMqReadHintsEnabled());
assertFalse(config.isScanTestSources());
}
@Test
void businessConfigOverridesDefaults(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException {
Path cfg = tmp.resolve("biz.yaml");
Files.write(cfg, ("enabled: false\n"
+ "mode: block\n"
+ "include_modules:\n - jnpf-tenant\n"
+ "notify:\n enabled: false\n").getBytes(StandardCharsets.UTF_8));
CheckerConfig config = ConfigLoader.load(cfg);
assertFalse(config.isEnabled());
assertEquals("block", config.getMode());
assertTrue(config.isBlockMode());
assertEquals(1, config.getIncludeModules().size());
assertEquals("jnpf-tenant", config.getIncludeModules().get(0));
// 未覆盖项保留默认
assertFalse(config.getNotify().isEnabled());
assertTrue(config.getDetection().getPatterns().contains("W01"));
}
@Test
void loadsWebhookUrlFromConfig(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException {
Path cfg = tmp.resolve("biz.yaml");
Files.write(cfg, ("notify:\n"
+ " webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test\n"
).getBytes(StandardCharsets.UTF_8));
CheckerConfig config = ConfigLoader.load(cfg);
assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test",
config.getNotify().getWebhookUrl());
}
@Test
void legacyWebhookEnvUrlStillWorks(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException {
Path cfg = tmp.resolve("biz.yaml");
Files.write(cfg, ("notify:\n"
+ " webhook_env: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy\n"
).getBytes(StandardCharsets.UTF_8));
CheckerConfig config = ConfigLoader.load(cfg);
assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy",
config.getNotify().getWebhookUrl());
}
}