Skip to content

inspect 的洩漏測試用子字串比對,隨機 UUID 就能讓它假紅 #92

Description

@CarlLee1983

Problem

tests/integration/inspect.test.ts:74-81expect(stdout).not.toContain('5432') 檢查 port 沒有洩漏。這在 PR #91 的 CI 上假紅過一次(job):--no-connect 的輸出裡根本沒有 port 欄位,但 audit_recent 的隨機 UUID 是 d234ec76-8833-4413-9d02-7c35f8435432,結尾 435432 含有子字串 5432

同一個 commit 的另一個 run 就過了,所以這不是回歸,是判準本身會誤判。粗估機率:輸出裡三個 UUID、每個 32 個 hex 字元,5432 出現在任一個裡面約每 700 次跑撞一次——低到不會被當成常態問題,高到每隔一陣子就會浪費一次 CI 與一輪追查。

'localhost' 那條同理(audit_recent 的 target 或 hints 都可能含),只是字串長不容易撞。

Solution

洩漏檢查應該對解析後的結構斷言,而不是對整份輸出做子字串掃描:port 與 host 若要出現,只會出現在 connection 物件裡,所以檢查那裡就夠,而且檢查得比現在準——現在的寫法連 "host" 這個 key 名出現在任何巢狀位置都會炸。

一個方向:JSON.parse(stdout) 後斷言 j.connection 只含 name / database / version 三個 key,這樣新增任何洩漏欄位都會失敗,而隨機 UUID 不會。原本的子字串掃描可以保留但限縮到 JSON.stringify(j.connection)

Notes

不是 #91 造成的,#91 也沒有動 inspect。發現當下用重跑解除阻塞。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions