Skip to content

Commit a3e71d0

Browse files
committed
根因完全清楚。TestPacketSniffer_Normal 用 key 1.1.1.1:1111 → 2.2.2.2:2222,成功 sniff 后调用 sniffer.Close() 但并未从 pool 中删除(Close() ≠ Remove()),session 还留在 DefaultPacketSnifferSessionMgr 的 pool 里。TestPacketSniffer_Mismatched 第一次循环用同样的 key 2.2.2.2:2222,GetOrCreate 直接返回了 Normal 留下的已缓存 sniffer,它已经有 sniff 结果,立刻命中,触发 t.Fatal。
修复方法:两个测试各自用独立的 NewPacketSnifferPool() 实例,消除全局状态污染:
1 parent 5839d5b commit a3e71d0

File tree

2 files changed

+5
-4
lines changed

2 files changed

+5
-4
lines changed

.github/workflows/dns-race.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,5 @@ jobs:
4949
- name: Run race detector for control package
5050
# Exclude control/kern/tests: it requires a separate `go generate` step
5151
# (make ebpf-test) and needs kernel privileges to load BPF programs.
52-
# TestPacketSniffer_Mismatched is a pre-existing flaky test unrelated to
53-
# DNS changes; skip it here so it does not block race detection.
52+
# It is covered by the dedicated bpf-test / kernel-test workflows.
5453
run: go test -race -v -run '.' $(go list ./control/... | grep -v 'control/kern/tests')

control/packet_sniffer_pool_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ var testPacketSnifferData = []string{
1919
}
2020

2121
func TestPacketSniffer_Normal(t *testing.T) {
22+
mgr := NewPacketSnifferPool()
2223
for _, _data := range testPacketSnifferData {
2324
data, _ := hex.DecodeString(_data)
24-
sniffer, _ := DefaultPacketSnifferSessionMgr.GetOrCreate(PacketSnifferKey{
25+
sniffer, _ := mgr.GetOrCreate(PacketSnifferKey{
2526
LAddr: netip.MustParseAddrPort("1.1.1.1:1111"),
2627
RAddr: netip.MustParseAddrPort("2.2.2.2:2222"),
2728
}, nil)
@@ -41,10 +42,11 @@ func TestPacketSniffer_Normal(t *testing.T) {
4142
}
4243

4344
func TestPacketSniffer_Mismatched(t *testing.T) {
45+
mgr := NewPacketSnifferPool()
4446
dst := netip.MustParseAddrPort("2.2.2.2:2222")
4547
for _, _data := range testPacketSnifferData {
4648
data, _ := hex.DecodeString(_data)
47-
sniffer, _ := DefaultPacketSnifferSessionMgr.GetOrCreate(PacketSnifferKey{
49+
sniffer, _ := mgr.GetOrCreate(PacketSnifferKey{
4850
LAddr: netip.MustParseAddrPort("1.1.1.1:1111"),
4951
RAddr: dst,
5052
}, nil)

0 commit comments

Comments
 (0)