Merge remote-tracking branch 'origin/test' into test

This commit is contained in:
2026-10-13 11:00:37 +08:00
3 changed files with 75 additions and 4 deletions
@@ -25,15 +25,47 @@ class QueryDiagnosticsTest {
@AfterEach void cleanup() { QueryDiagnostics.CURRENT.remove(); MDC.clear(); }
@Test void onlyExplicitTestAndEnabledCreatesBeans() {
var runner=new ApplicationContextRunner().withUserConfiguration(QueryDiagnosticsConfiguration.class);
runner.run(c->assertEquals(0,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size()));
var runner=new ApplicationContextRunner().withUserConfiguration(QueryDiagnosticsConfiguration.class,QueryDiagnosticsResponseAdvice.class);
runner.run(c->{assertEquals(0,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size());assertEquals(0,c.getBeansOfType(QueryDiagnosticsResponseAdvice.class).size());});
runner.withPropertyValues("DEPLOY_ENV=test").run(c->assertEquals(0,c.getBeansOfType(FilterRegistrationBean.class).size()));
runner.withPropertyValues("DEPLOY_ENV=production","baiyue.self-operated-analytics.query-diagnostics.enabled=true")
.run(c->assertEquals(0,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size()));
.run(c->{assertEquals(0,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size());assertEquals(0,c.getBeansOfType(QueryDiagnosticsResponseAdvice.class).size());});
runner.withPropertyValues("baiyue.self-operated-analytics.query-diagnostics.enabled=true")
.run(c->assertEquals(0,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size()));
runner.withPropertyValues("DEPLOY_ENV=test","baiyue.self-operated-analytics.query-diagnostics.enabled=true")
.run(c->{assertEquals(1,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size());assertEquals(1,c.getBeansOfType(FilterRegistrationBean.class).size());});
.run(c->{assertEquals(1,c.getBeansOfType(QueryDiagnosticsInterceptor.class).size());assertEquals(1,c.getBeansOfType(FilterRegistrationBean.class).size());assertEquals(1,c.getBeansOfType(QueryDiagnosticsResponseAdvice.class).size());});
}
@Test void responseHeaderRequiresActiveStateAndPreservesBodyAndCapturePoint() throws Exception {
var advice=new QueryDiagnosticsResponseAdvice();
Object body=Map.of("sku","PRIVATE_SKU","token","PRIVATE_TOKEN");
var servletRequest=new MockHttpServletRequest("GET",BASE+"dashboard");
servletRequest.setQueryString("sourceAccount=PRIVATE_ACCOUNT");
var request=new org.springframework.http.server.ServletServerHttpRequest(servletRequest);
var response=new org.springframework.http.server.ServletServerHttpResponse(new MockHttpServletResponse());
assertFalse(advice.supports(null,null));
assertSame(body,advice.beforeBodyWrite(body,null,null,null,request,response));
assertNull(response.getHeaders().getFirst(QueryDiagnosticsResponseAdvice.HEADER));
var state=new QueryDiagnostics.State();QueryDiagnostics.CURRENT.set(state);MDC.put("requestId","synthetic-header-1");
state.timing("DashboardReadMapper.report").executor.add(123,false);
assertTrue(advice.supports(null,null));
assertSame(body,advice.beforeBodyWrite(body,null,null,null,request,response));
String header=response.getHeaders().getFirst(QueryDiagnosticsResponseAdvice.HEADER);
assertNotNull(header);assertFalse(header.contains("PRIVATE"));assertFalse(header.contains("\n"));
var json=new ObjectMapper().readTree(header);
assertEquals("BEFORE_BODY_WRITE",json.path("capturePoint").asText());
assertEquals("DASHBOARD",json.path("endpoint").asText());
assertEquals("synthetic-header-1",json.path("requestId").asText());
assertEquals(1,json.path("methods").path("DashboardReadMapper.report").path("executor").path("calls").asInt());
assertEquals("REQUEST_COMPLETE",new ObjectMapper().readTree(state.json("DASHBOARD","synthetic",200,false)).path("capturePoint").asText());
for(String path:List.of("other","dashboard/extra")){
var skipped=new org.springframework.http.server.ServletServerHttpResponse(new MockHttpServletResponse());
assertSame(body,advice.beforeBodyWrite(body,null,null,null,new org.springframework.http.server.ServletServerHttpRequest(new MockHttpServletRequest("GET",BASE+path)),skipped));
assertNull(skipped.getHeaders().getFirst(QueryDiagnosticsResponseAdvice.HEADER));
}
var post=new org.springframework.http.server.ServletServerHttpResponse(new MockHttpServletResponse());
advice.beforeBodyWrite(body,null,null,null,new org.springframework.http.server.ServletServerHttpRequest(new MockHttpServletRequest("POST",BASE+"dashboard")),post);
assertNull(post.getHeaders().getFirst(QueryDiagnosticsResponseAdvice.HEADER));
}
@Test void pathsAndMethodsAreExactAndExceptionsCleanRequestState() throws Exception {