|
@@ -118,6 +118,70 @@ class HermesErrorPatternServiceTest {
|
|
|
assertThat(service.isErrorResponse(body).isError()).isFalse();
|
|
assertThat(service.isErrorResponse(body).isError()).isFalse();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // ========== 分隔符归一化(- / _ / 空格 等价) ==========
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void isResponse_underscorePatternMatchesSpacedText() {
|
|
|
|
|
+ // 用户场景:pattern "api_error" 应匹配文本 "API ERROR ..."
|
|
|
|
|
+ HermesErrorPattern p = new HermesErrorPattern();
|
|
|
|
|
+ p.setName("API 错误");
|
|
|
|
|
+ p.setPattern("api_error");
|
|
|
|
|
+ p.setEnabled(true);
|
|
|
|
|
+ service.create(p);
|
|
|
|
|
+
|
|
|
|
|
+ assertThat(service.isErrorResponse("调用失败:API ERROR encountered").isError()).isTrue();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void isResponse_hyphenPatternMatchesUnderscoreText() {
|
|
|
|
|
+ // pattern "rate-limit" 应匹配文本 "RATE_LIMIT exceeded"
|
|
|
|
|
+ HermesErrorPattern p = new HermesErrorPattern();
|
|
|
|
|
+ p.setName("限流");
|
|
|
|
|
+ p.setPattern("rate-limit");
|
|
|
|
|
+ p.setEnabled(true);
|
|
|
|
|
+ service.create(p);
|
|
|
|
|
+
|
|
|
|
|
+ assertThat(service.isErrorResponse("RATE_LIMIT exceeded").isError()).isTrue();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void isResponse_multipleSeparatorsAllEquivalent() {
|
|
|
|
|
+ // 多分隔符混合:pattern "context_length_exceeded" 应匹配 "CONTEXT-LENGTH EXCEEDED"
|
|
|
|
|
+ HermesErrorPattern p = new HermesErrorPattern();
|
|
|
|
|
+ p.setName("上下文超限");
|
|
|
|
|
+ p.setPattern("context_length_exceeded");
|
|
|
|
|
+ p.setEnabled(true);
|
|
|
|
|
+ service.create(p);
|
|
|
|
|
+
|
|
|
|
|
+ assertThat(service.isErrorResponse("请求失败:CONTEXT-LENGTH EXCEEDED").isError()).isTrue();
|
|
|
|
|
+ assertThat(service.isErrorResponse("请求失败:CONTEXT LENGTH EXCEEDED").isError()).isTrue();
|
|
|
|
|
+ assertThat(service.isErrorResponse("请求失败:CONTEXT_LENGTH_EXCEEDED").isError()).isTrue();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void isResponse_noSeparatorPatternDoesNotMatchSeparatedText() {
|
|
|
|
|
+ // 防止过度归一化:pattern "apierror"(无分隔符)不应匹配 "API ERROR"(有分隔符)
|
|
|
|
|
+ HermesErrorPattern p = new HermesErrorPattern();
|
|
|
|
|
+ p.setName("连写模式");
|
|
|
|
|
+ p.setPattern("apierror");
|
|
|
|
|
+ p.setEnabled(true);
|
|
|
|
|
+ service.create(p);
|
|
|
|
|
+
|
|
|
|
|
+ assertThat(service.isErrorResponse("调用失败:API ERROR encountered").isError()).isFalse();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Test
|
|
|
|
|
+ void isResponse_separatedPatternDoesNotMatchNoSeparatorText() {
|
|
|
|
|
+ // 反向同样不匹配:pattern "api error"(带分隔符)不应匹配 "APIERROR"(无分隔符)
|
|
|
|
|
+ HermesErrorPattern p = new HermesErrorPattern();
|
|
|
|
|
+ p.setName("带分隔符模式");
|
|
|
|
|
+ p.setPattern("api error");
|
|
|
|
|
+ p.setEnabled(true);
|
|
|
|
|
+ service.create(p);
|
|
|
|
|
+
|
|
|
|
|
+ assertThat(service.isErrorResponse("调用失败:APIERROR encountered").isError()).isFalse();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ========== 内置初始化 ==========
|
|
// ========== 内置初始化 ==========
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|