Skip to content

Commit 445d057

Browse files
data-douserCopilot
andauthored
Integration tests for annotation, audit, cache, and CallGraphFromTo tools (#170)
* feat: SqliteStore backend with annotation, audit, and cache tools Replace lowdb with sql.js (asm.js build) for zero-dependency SQLite persistence. Bundle inline with esbuild — no native modules, no external deps at runtime. SqliteStore provides three tables: - sessions: session tracking (migrated from lowdb) - annotations: key-value annotation store with categories and metadata - query_result_cache: BQRS/SARIF result caching with subset retrieval New tools (gated by ENABLE_ANNOTATION_TOOLS env var): - annotation_create, annotation_list, annotation_search, annotation_delete - audit_store_findings, audit_list_findings, audit_add_notes, audit_clear_repo - query_results_cache_lookup, query_results_cache_retrieve, query_results_cache_clear, query_results_cache_compare Code refactoring for maintainability: - Extract database-resolver.ts from cli-tool-registry.ts - Extract query-resolver.ts from cli-tool-registry.ts - Extract result-processor.ts from cli-tool-registry.ts - Extract codeql-version.ts from cli-executor.ts Bug fixes: - Fix params.output not propagated to proce- Fix params.output not propagated to proce- Fix params.output not propagated txternal predicate conditions for direct query paths Closes #165 * Add integration tests for annotation, audit, cache, and CallGraphFromTo tools Client integration test fixtures: - annotation_create, annotation_delete, annotation_list, annotation_search - audit_store_findings, audit_list_findings, audit_add_notes, audit_clear_repo - query_results_cache_lookup, query_results_cache_retrieve, query_results_cache_clear, query_results_cache_compare - codeql_query_run CallGraphFromTo for cpp, javascript, python Workflow integration test: - mrva_finding_triage end-to-end workflow Extension integration tests: - mcp-tool-e2e: tool availability and MRVA workflow validation Updated client/scripts/run-integration-tests.sh with annotation mode support. Closes #166 * Fix server build * Remove grep from cache tools; fix annotation_search API to FTS semantics; always apply SARIF path for SARIF format Agent-Logs-Url: https://github.com/advanced-security/codeql-development-mcp-server/sessions/219712ee-4c28-4b51-9da5-961020112e6e Co-authored-by: data-douser <70299490+data-douser@users.noreply.github.com> * Sync server src/test/dist to dd/sqlite-annotation-cache tip Brings in all review feedback fixes (FTS safety, offset-only LIMIT, cache limit param, int/positive Zod schemas, store lifecycle fix) and the rebuilt dist. * Fix extension integration tests --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent 07a87a7 commit 445d057

File tree

50 files changed

+809
-5
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+809
-5
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"toolName": "annotation_create",
3+
"parameters": {
4+
"category": "note",
5+
"entityKey": "file:test/Example1.ql:L10",
6+
"content": "Potential SQL injection via string concatenation",
7+
"label": "sql-injection-candidate",
8+
"metadata": "{\"severity\":\"high\",\"cwe\":\"CWE-89\"}"
9+
},
10+
"success": true,
11+
"description": "Successfully created a note annotation with content, label, and structured metadata"
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"toolName": "annotation_create",
3+
"parameters": {
4+
"category": "note",
5+
"entityKey": "file:test/Example1.ql:L10",
6+
"content": "Potential SQL injection via string concatenation",
7+
"label": "sql-injection-candidate",
8+
"metadata": "{\"severity\":\"high\",\"cwe\":\"CWE-89\"}"
9+
},
10+
"expectedSuccess": true,
11+
"description": "Test annotation_create tool creates a note annotation with content, label, and metadata"
12+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"toolName": "annotation_create",
3+
"arguments": {
4+
"category": "note",
5+
"entityKey": "file:test/Example1.ql:L10",
6+
"content": "Potential SQL injection via string concatenation",
7+
"label": "sql-injection-candidate",
8+
"metadata": "{\"severity\":\"high\",\"cwe\":\"CWE-89\"}"
9+
}
10+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"toolName": "annotation_delete",
3+
"parameters": {
4+
"entityKeyPrefix": "file:test/"
5+
},
6+
"success": true,
7+
"description": "Successfully deleted annotations matching the entity key prefix"
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"toolName": "annotation_delete",
3+
"parameters": {
4+
"entityKeyPrefix": "file:test/"
5+
},
6+
"expectedSuccess": true,
7+
"description": "Test annotation_delete tool deletes annotations matching an entity key prefix"
8+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"toolName": "annotation_delete",
3+
"arguments": {
4+
"entityKeyPrefix": "file:test/"
5+
}
6+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"toolName": "annotation_list",
3+
"parameters": {
4+
"category": "note",
5+
"entityKeyPrefix": "file:test/",
6+
"limit": 10
7+
},
8+
"success": true,
9+
"description": "Successfully listed annotations filtered by category and entity key prefix"
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"toolName": "annotation_list",
3+
"parameters": {
4+
"category": "note",
5+
"entityKeyPrefix": "file:test/",
6+
"limit": 10
7+
},
8+
"expectedSuccess": true,
9+
"description": "Test annotation_list tool filters annotations by category and entity key prefix"
10+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"toolName": "annotation_list",
3+
"arguments": {
4+
"category": "note",
5+
"entityKeyPrefix": "file:test/",
6+
"limit": 10
7+
}
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"toolName": "annotation_search",
3+
"parameters": {
4+
"query": "SQL injection",
5+
"limit": 20
6+
},
7+
"success": true,
8+
"description": "Successfully searched annotations by content text"
9+
}

0 commit comments

Comments
 (0)