[QA Brain MVP] T9: Security, Concurrency, and End-to-End Persona Verification Test Suite
สรุปงาน (Summary)
พัฒนาชุดการทดสอบอัตโนมัติแบบครอบคลุม (Comprehensive Automated Test Suite) สำหรับ QA Brain เพื่อพิสูจน์ความปลอดภัยของขอบเขตข้อมูล (Isolation), การควบคุมการทำงานพร้อมกัน (Concurrency & CAS), ความสมบูรณ์ของ Constraints ในฐานข้อมูล, โซ่ Immutable Audit Trail (qa_audit_event), การตรวจ Typed Evidence, และการจำลอง Persona Workflow ระหว่าง AI Agent สองตัวกับ QA Lead (End-to-End Persona Verification)
อ้างอิงข้อกำหนดสถาปัตยกรรม: RFC v4.1 (Section 8)
ลำดับการทำงาน (Dependency): ขึ้นต่อกับ T1, T2, T3, T4, T5, T6
ขอบเขตและงานที่ต้องทำ (Scope of Work)
1. ชุดทดสอบความปลอดภัยและการแยกส่วนข้อมูล (Security & Isolation Tests)
-
Isolation Test: กุญแจเครื่อง (Machine Key) หรือบัญชี User ของโปรเจกต์ A ค้นหาหรืออ่านข้อมูลของโปรเจกต์ B ไม่ได้ในทุกมิติ (
query,get_entry) -
DRAFT Retrieval Immunity Test: การสืบค้นปกติ (
query) ไม่ส่งคืนบทเรียนDRAFTและการเรียกget_entryของ Gotcha Draft ตอบกลับเป็นNOT_FOUNDเมื่อไม่มีสิทธิ์QA_EDITOR+ -
Idempotency Replay Authorization Test: จำลองการส่งคำขอเดิมด้วย Idempotency Key ซ้ำหลังจากสิทธิ์ของผู้ใช้ในโปรเจกต์นั้นถูกเพิกถอน ระบบต้องตอบกลับ HTTP 403
FORBIDDEN(ไม่ส่งข้อมูลแคชเดิมคืน) -
SSRF No-Fetch Test: ส่ง URL อันตรายหรือ Internal IP ใน
evidenceRefและevidenceDetailเซิร์ฟเวอร์ต้องไม่ทำการส่ง HTTP Request ออกไปภายนอกเด็ดขาด - Pre-Ingress Sanitizer Fail-Closed Test: จำลองสถานการณ์ Sanitizer เกิดข้อผิดพลาดหรือ ReDoS Timeout คำขอต้องหยุดทำงานแบบ Fail-Closed และไม่หลุด Raw Payload ลงในฐานข้อมูลหรือ Log
-
Machine Key Workspace-Wide Scope Test: ทดสอบ Machine Key ของโปรเจกต์ A สามารถอ่าน Gotcha ส่วนกลางของ Workspace (
projectId = null) ได้ แต่ไม่สามารถอ่าน Gotcha ของโปรเจกต์ B ได้ -
Duplicate Advisory Scope Boundary Test: ทดสอบสร้าง Gotcha ในโปรเจกต์ A ด้วยคำที่ตรงกับ Gotcha ในโปรเจกต์ B ระบบต้องไม่ส่งชื่อเรื่องหรือ ID ของโปรเจกต์ B เข้ามาใน
advisoryWarningsเด็ดขาด
2. ชุดทดสอบความสอดคล้องและการทำงานพร้อมกัน (Concurrency & DB Constraints Tests)
-
Database Constraint Negative Tests: ทดสอบยิงข้อมูลที่ละเมิด SQL Check Constraints:
-
channel = MCP_MACHINEแต่ระบุactor_user_id$\rightarrow$ DB Reject -
status = VERIFIEDแต่ไม่มีverified_by_user_idหรือverified_revision != version$\rightarrow$ DB Reject - ระบุ
source_repoแต่เว้นว่างsource_path$\rightarrow$ DB Reject
-
-
Concurrent Atomic Idempotency Test: ยิงคำขอ
happyqa_brain_record_gotchaพร้อมกัน 10 เธรดด้วย Idempotency Key เดียวกัน ต้องมีเพียง 1 Transaction บันทึกข้อมูลสำเร็จ อีก 9 คำขอได้รับคำตอบ Replay เดียวกัน -
CAS Version Conflict Test: ยิงคำสั่ง Edit หรือ Verify ด้วย
expectedVersionที่ล้าหลัง ต้องได้รับข้อผิดพลาดVERSION_CONFLICT(HTTP 409) - Promotion Lineage & Cross-Workspace Rejection Test: ยกระดับบทเรียนสู่ Workspace ต้องสร้างแถวใหม่ (Promoted Copy) โดยคงต้นฉบับไว้ และต้องถูกปฏิเสธทันทีหากพยายามเชื่อมโยงข้าม Workspace ผ่าน Foreign Key
-
Typed Evidence (
RUN_RESULT) Scope Validation Test: ส่งคำขอบันทึก Gotcha โดยระบุevidenceType = RUN_RESULTแต่ใช้ Run ID ของโปรเจกต์อื่น ระบบต้องปฏิเสธด้วยVALIDATION_FAILED -
Immutable Audit Trail Integrity Test: ทดสอบว่าทุกการสร้าง, แก้ไข, รับรอง, ปลดระวาง และโปรโมต มีการบันทึกลง
qa_audit_eventและสามารถตรวจสอบความต่อเนื่องของ Hash Chain ผ่านverifyAuditChainRowsได้ 100% -
Seed Anti-Overwrite Conflict Test: ยิงคำสั่ง Seed ซ้ำบนแถวที่มี
manuallyModifiedAt != nullระบบต้องข้ามและรายงานMANUALLY_MODIFIED_CONFLICT
3. ชุดทดสอบเสมือนจริงข้าม Agent (End-to-End Persona Acceptance Test)
-
Agent Collaboration Workflow Test:
-
Step 1: จำลอง Agent A (Claude Code) รันเทสและเจอบั๊ก/กับดัก $\rightarrow$ บันทึกบทเรียนผ่าน MCP tool
happyqa_brain_record_gotcha(ได้สถานะDRAFT) -
Step 2: จำลอง QA Lead เข้าสู่ระบบบน Web UI ตรวจสอบรายละเอียดและหลักฐาน $\rightarrow$ กดรับรองบทเรียน (สถานะเปลี่ยนเป็น
VERIFIED) -
Step 3: จำลอง Agent B (ChatGPT หรือ Cursor ใน Session ใหม่) ได้รับมอบหมายงานทดสอบฟีเจอร์เดียวกัน $\rightarrow$ เรียก
happyqa_brain_query$\rightarrow$ พบบทเรียนที่ Agent A จดไว้ $\rightarrow$ นำข้อแนะนำไปปรับแผนการทดสอบและหลบกับดักเดิมได้สำเร็จโดยไม่เกิดบั๊กซ้ำ
-
Step 1: จำลอง Agent A (Claude Code) รันเทสและเจอบั๊ก/กับดัก $\rightarrow$ บันทึกบทเรียนผ่าน MCP tool
เกณฑ์การตรวจรับ (Acceptance Criteria)
- รันชุดทดสอบความปลอดภัยและการทำงานพร้อมกันทั้ง 14 ข้อแรกผ่าน 100% ในสภาพแวดล้อม CI/CD บน PostgreSQL
- รันการทดสอบจำลอง End-to-End Persona Workflow (ข้อ 15) ผ่านแบบสมบูรณ์ตั้งแต่ต้นจนจบ
- มีเอกสารสรุปผลการทดสอบ Test Run Report ยืนยันความพร้อมก่อนปล่อยฟีเจอร์ขึ้น Production