@@ -32,6 +32,18 @@ func TestAddToWhitespaceSeparatedStringList(t *testing.T) {
3232 item : "item1" ,
3333 expected : "item1 item2" ,
3434 },
35+ {
36+ name : "Add scanner ID with colon" ,
37+ input : "scanner1" ,
38+ item : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
39+ expected : "scanner1 github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
40+ },
41+ {
42+ name : "Should not add duplicate scanner ID with colon" ,
43+ input : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
44+ item : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
45+ expected : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
46+ },
3547 }
3648
3749 for _ , tt := range tests {
@@ -75,6 +87,18 @@ func TestRemoveFromWhitespaceSeparatedStringList(t *testing.T) {
7587 item : "item1" ,
7688 expected : "" ,
7789 },
90+ {
91+ name : "Remove scanner ID with colon from list" ,
92+ input : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
93+ item : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
94+ expected : "" ,
95+ },
96+ {
97+ name : "Should not remove partial match with colon" ,
98+ input : "container-scanning github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
99+ item : "container-scanning:scanner" ,
100+ expected : "container-scanning github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
101+ },
78102 }
79103
80104 for _ , tt := range tests {
@@ -86,6 +110,68 @@ func TestRemoveFromWhitespaceSeparatedStringList(t *testing.T) {
86110 })
87111 }
88112}
113+
114+ func TestContainsInWhitespaceSeparatedStringList (t * testing.T ) {
115+ tests := []struct {
116+ name string
117+ input string
118+ item string
119+ expected bool
120+ }{
121+ {
122+ name : "Item exists in list" ,
123+ input : "item1 item2 item3" ,
124+ item : "item2" ,
125+ expected : true ,
126+ },
127+ {
128+ name : "Item does not exist in list" ,
129+ input : "item1 item2 item3" ,
130+ item : "item4" ,
131+ expected : false ,
132+ },
133+ {
134+ name : "Item exists in single-item list" ,
135+ input : "item1" ,
136+ item : "item1" ,
137+ expected : true ,
138+ },
139+ {
140+ name : "Item does not exist in empty list" ,
141+ input : "" ,
142+ item : "item1" ,
143+ expected : false ,
144+ },
145+ {
146+ name : "Scanner ID with colon exists in list" ,
147+ input : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
148+ item : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
149+ expected : true ,
150+ },
151+ {
152+ name : "Should not match partial scanner ID with colon" ,
153+ input : "github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
154+ item : "container-scanning" ,
155+ expected : false ,
156+ },
157+ {
158+ name : "Should not match partial scanner ID with colon (reverse)" ,
159+ input : "container-scanning github.com/l3montree-dev/devguard/cmd/devguard-scanner/container-scanning:scanner" ,
160+ item : "container-scanning:scanner" ,
161+ expected : false ,
162+ },
163+ }
164+
165+ for _ , tt := range tests {
166+ t .Run (tt .name , func (t * testing.T ) {
167+ result := ContainsInWhitespaceSeparatedStringList (tt .input , tt .item )
168+ if result != tt .expected {
169+ t .Errorf ("expected %t, got %t" , tt .expected , result )
170+ }
171+ })
172+ }
173+ }
174+
89175func TestShannonEntropy (t * testing.T ) {
90176 tests := []struct {
91177 name string
0 commit comments