[Developer] #570 show vector VPD effective SQL trace

This commit is contained in:
devmrko
2026-06-30 14:16:42 +09:00
parent cde5266a77
commit 188b398dcb
5 changed files with 148 additions and 3 deletions

View File

@@ -0,0 +1,26 @@
package com.cloudhandson.vpdbackoffice.service;
import static org.assertj.core.api.Assertions.assertThat;
import com.cloudhandson.vpdbackoffice.domain.protectedobject.ProtectedObject;
import org.junit.jupiter.api.Test;
class OrdsProbeServiceTest {
@Test
void buildsVectorEffectiveSqlWithVpdPredicateAndDistancePlaceholder() {
ProtectedObject object = new ProtectedObject(
5L, "ADMIN", "CB_VECTOR_SEARCH_DOCUMENTS", "cb-agent-vector/search", "Y");
String sql = OrdsProbeService.vectorEffectiveSql(
object, "INSTR(',' || UPPER(d.TECH_TAG) || ',', ',ORACLE_VPD,') > 0");
assertThat(sql)
.contains("FROM ADMIN.CB_VECTOR_SEARCH_DOCUMENTS d")
.contains("VECTOR_DISTANCE(d.embedding, TO_VECTOR(:embedding), COSINE)")
.contains("WHERE d.embedding IS NOT NULL AND (INSTR")
.contains("ORDER BY score")
.contains("ROWNUM <= LEAST(GREATEST(NVL(:row_limit, 10), 1), 100)")
.doesNotContain("Bearer", "0.10", "0.20");
}
}

View File

@@ -134,6 +134,20 @@ class GuidedFlowTemplateTest {
.contains("검색 기술 상세 보기");
}
@Test
void probeResultExplainsVectorEffectiveSqlWhenTheHandlerReturnsTrace() throws IOException {
String result = template("fragments/probe-result.html");
String vectorSql = Files.readString(Path.of("sql/adb/29_agent_ords_vector_search_ords.sql"));
assertThat(result)
.contains("토큰 적용 후 SQL")
.contains("권한 적용 SQL")
.contains("VPD가 추가한 WHERE 조건");
assertThat(vectorSql)
.contains("VECTOR_DISTANCE(d.embedding, TO_VECTOR(:embedding), COSINE)")
.contains("WHERE d.embedding IS NOT NULL AND (' || v_vpd_predicate || ')");
}
@Test
void vectorOrdsHandlerReadsBodyStreamOnlyOnce() throws IOException {
String sql = Files.readString(Path.of("sql/adb/29_agent_ords_vector_search_ords.sql"));