Skip to content

Commit a9a50ef

Browse files
authored
feat: implement parallel test support across the codebase (#682)
1 parent 01ad36e commit a9a50ef

39 files changed

+357
-79
lines changed

.golangci.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ linters:
7979
- errcheck
8080
- dupl
8181
- gosec
82-
- paralleltest
8382
path: (.+)_test\.go
8483
- linters:
8584
- lll

cmd/thv-operator/controllers/mcpserver_pod_template_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
)
1616

1717
func TestDeploymentForMCPServerWithPodTemplateSpec(t *testing.T) {
18+
t.Parallel()
1819
// Create a test MCPServer with a PodTemplateSpec
1920
mcpServer := &mcpv1alpha1.MCPServer{
2021
ObjectMeta: metav1.ObjectMeta{

cmd/thv-operator/controllers/mcpserver_rbac_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ func (tc *testContext) assertAllRBACResourcesExist(t *testing.T) {
107107
}
108108

109109
func TestEnsureRBACResources_ServiceAccount_Creation(t *testing.T) {
110+
t.Parallel()
110111
tc := setupTest("test-server", "default")
111112

112113
err := tc.ensureRBACResources()
@@ -116,6 +117,7 @@ func TestEnsureRBACResources_ServiceAccount_Creation(t *testing.T) {
116117
}
117118

118119
func TestEnsureRBACResources_ServiceAccount_Update(t *testing.T) {
120+
t.Parallel()
119121
tc := setupTest("test-server-sa-update", "default")
120122

121123
existingSA := &corev1.ServiceAccount{
@@ -135,6 +137,7 @@ func TestEnsureRBACResources_ServiceAccount_Update(t *testing.T) {
135137
}
136138

137139
func TestEnsureRBACResources_Role_Creation(t *testing.T) {
140+
t.Parallel()
138141
tc := setupTest("test-server", "default")
139142

140143
err := tc.ensureRBACResources()
@@ -144,6 +147,7 @@ func TestEnsureRBACResources_Role_Creation(t *testing.T) {
144147
}
145148

146149
func TestEnsureRBACResources_Role_Update(t *testing.T) {
150+
t.Parallel()
147151
tc := setupTest("test-server-role-update", "default")
148152

149153
existingRole := &rbacv1.Role{
@@ -169,6 +173,7 @@ func TestEnsureRBACResources_Role_Update(t *testing.T) {
169173
}
170174

171175
func TestEnsureRBACResources_RoleBinding_Creation(t *testing.T) {
176+
t.Parallel()
172177
tc := setupTest("test-server", "default")
173178

174179
err := tc.ensureRBACResources()
@@ -178,6 +183,7 @@ func TestEnsureRBACResources_RoleBinding_Creation(t *testing.T) {
178183
}
179184

180185
func TestEnsureRBACResources_RoleBinding_Update(t *testing.T) {
186+
t.Parallel()
181187
tc := setupTest("test-server-rb-update", "default")
182188

183189
existingRB := &rbacv1.RoleBinding{
@@ -208,6 +214,7 @@ func TestEnsureRBACResources_RoleBinding_Update(t *testing.T) {
208214
}
209215

210216
func TestEnsureRBACResources_MultipleNamespaces(t *testing.T) {
217+
t.Parallel()
211218
testCases := []struct {
212219
name string
213220
namespace string
@@ -219,6 +226,7 @@ func TestEnsureRBACResources_MultipleNamespaces(t *testing.T) {
219226

220227
for _, testCase := range testCases {
221228
t.Run(testCase.name+"-"+testCase.namespace, func(t *testing.T) {
229+
t.Parallel()
222230
tc := setupTest(testCase.name, testCase.namespace)
223231

224232
err := tc.ensureRBACResources()
@@ -230,6 +238,7 @@ func TestEnsureRBACResources_MultipleNamespaces(t *testing.T) {
230238
}
231239

232240
func TestEnsureRBACResources_ResourceNames(t *testing.T) {
241+
t.Parallel()
233242
testCases := []string{
234243
"simple-server",
235244
"mcp-server-test",
@@ -238,6 +247,7 @@ func TestEnsureRBACResources_ResourceNames(t *testing.T) {
238247

239248
for _, serverName := range testCases {
240249
t.Run(serverName, func(t *testing.T) {
250+
t.Parallel()
241251
tc := setupTest(serverName, "default")
242252

243253
err := tc.ensureRBACResources()
@@ -249,6 +259,7 @@ func TestEnsureRBACResources_ResourceNames(t *testing.T) {
249259
}
250260

251261
func TestEnsureRBACResources_NoChangesNeeded(t *testing.T) {
262+
t.Parallel()
252263
tc := setupTest("test-server-no-changes", "default")
253264

254265
sa := &corev1.ServiceAccount{
@@ -298,6 +309,7 @@ func TestEnsureRBACResources_NoChangesNeeded(t *testing.T) {
298309
}
299310

300311
func TestEnsureRBACResources_Idempotency(t *testing.T) {
312+
t.Parallel()
301313
tc := setupTest("test-server-idempotency", "default")
302314

303315
for i := 0; i < 3; i++ {

pkg/audit/auditor_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func init() {
2424
}
2525

2626
func TestNewAuditor(t *testing.T) {
27+
t.Parallel()
2728
config := &Config{}
2829
auditor := NewAuditor(config)
2930

@@ -32,6 +33,7 @@ func TestNewAuditor(t *testing.T) {
3233
}
3334

3435
func TestAuditorMiddlewareDisabled(t *testing.T) {
36+
t.Parallel()
3537
config := &Config{}
3638
auditor := NewAuditor(config)
3739

@@ -52,6 +54,7 @@ func TestAuditorMiddlewareDisabled(t *testing.T) {
5254
}
5355

5456
func TestAuditorMiddlewareWithRequestData(t *testing.T) {
57+
t.Parallel()
5558
config := &Config{
5659
IncludeRequestData: true,
5760
MaxDataSize: 1024,
@@ -80,6 +83,7 @@ func TestAuditorMiddlewareWithRequestData(t *testing.T) {
8083
}
8184

8285
func TestAuditorMiddlewareWithResponseData(t *testing.T) {
86+
t.Parallel()
8387
config := &Config{
8488
IncludeResponseData: true,
8589
MaxDataSize: 1024,
@@ -105,6 +109,7 @@ func TestAuditorMiddlewareWithResponseData(t *testing.T) {
105109
}
106110

107111
func TestDetermineEventType(t *testing.T) {
112+
t.Parallel()
108113
auditor := NewAuditor(&Config{})
109114

110115
tests := []struct {
@@ -135,6 +140,7 @@ func TestDetermineEventType(t *testing.T) {
135140

136141
for _, tt := range tests {
137142
t.Run(tt.name, func(t *testing.T) {
143+
t.Parallel()
138144
req := httptest.NewRequest(tt.method, tt.path, nil)
139145
result := auditor.determineEventType(req)
140146
assert.Equal(t, tt.expected, result)
@@ -143,6 +149,7 @@ func TestDetermineEventType(t *testing.T) {
143149
}
144150

145151
func TestMapMCPMethodToEventType(t *testing.T) {
152+
t.Parallel()
146153
tests := []struct {
147154
mcpMethod string
148155
expected string
@@ -165,13 +172,15 @@ func TestMapMCPMethodToEventType(t *testing.T) {
165172
auditor := NewAuditor(&Config{})
166173
for _, tt := range tests {
167174
t.Run(tt.mcpMethod, func(t *testing.T) {
175+
t.Parallel()
168176
result := auditor.mapMCPMethodToEventType(tt.mcpMethod)
169177
assert.Equal(t, tt.expected, result)
170178
})
171179
}
172180
}
173181

174182
func TestDetermineOutcome(t *testing.T) {
183+
t.Parallel()
175184
auditor := NewAuditor(&Config{})
176185

177186
tests := []struct {
@@ -193,13 +202,15 @@ func TestDetermineOutcome(t *testing.T) {
193202

194203
for _, tt := range tests {
195204
t.Run(string(rune(tt.statusCode)), func(t *testing.T) {
205+
t.Parallel()
196206
result := auditor.determineOutcome(tt.statusCode)
197207
assert.Equal(t, tt.expected, result)
198208
})
199209
}
200210
}
201211

202212
func TestGetClientIP(t *testing.T) {
213+
t.Parallel()
203214
auditor := NewAuditor(&Config{})
204215

205216
tests := []struct {
@@ -232,6 +243,7 @@ func TestGetClientIP(t *testing.T) {
232243

233244
for _, tt := range tests {
234245
t.Run(tt.name, func(t *testing.T) {
246+
t.Parallel()
235247
req := httptest.NewRequest("GET", "/test", nil)
236248
for key, value := range tt.headers {
237249
req.Header.Set(key, value)
@@ -247,9 +259,11 @@ func TestGetClientIP(t *testing.T) {
247259
}
248260

249261
func TestExtractSubjects(t *testing.T) {
262+
t.Parallel()
250263
auditor := NewAuditor(&Config{})
251264

252265
t.Run("with JWT claims", func(t *testing.T) {
266+
t.Parallel()
253267
claims := jwt.MapClaims{
254268
"sub": "user123",
255269
"name": "John Doe",
@@ -271,6 +285,7 @@ func TestExtractSubjects(t *testing.T) {
271285
})
272286

273287
t.Run("with preferred_username", func(t *testing.T) {
288+
t.Parallel()
274289
claims := jwt.MapClaims{
275290
"sub": "user456",
276291
"preferred_username": "johndoe",
@@ -287,6 +302,7 @@ func TestExtractSubjects(t *testing.T) {
287302
})
288303

289304
t.Run("with email fallback", func(t *testing.T) {
305+
t.Parallel()
290306
claims := jwt.MapClaims{
291307
"sub": "user789",
292308
"email": "[email protected]",
@@ -303,6 +319,7 @@ func TestExtractSubjects(t *testing.T) {
303319
})
304320

305321
t.Run("without claims", func(t *testing.T) {
322+
t.Parallel()
306323
req := httptest.NewRequest("GET", "/test", nil)
307324

308325
subjects := auditor.extractSubjects(req)
@@ -312,7 +329,9 @@ func TestExtractSubjects(t *testing.T) {
312329
}
313330

314331
func TestDetermineComponent(t *testing.T) {
332+
t.Parallel()
315333
t.Run("with configured component", func(t *testing.T) {
334+
t.Parallel()
316335
config := &Config{Component: "custom-component"}
317336
auditor := NewAuditor(config)
318337

@@ -323,6 +342,7 @@ func TestDetermineComponent(t *testing.T) {
323342
})
324343

325344
t.Run("without configured component", func(t *testing.T) {
345+
t.Parallel()
326346
config := &Config{}
327347
auditor := NewAuditor(config)
328348

@@ -334,6 +354,7 @@ func TestDetermineComponent(t *testing.T) {
334354
}
335355

336356
func TestExtractTarget(t *testing.T) {
357+
t.Parallel()
337358
auditor := NewAuditor(&Config{})
338359

339360
tests := []struct {
@@ -380,6 +401,7 @@ func TestExtractTarget(t *testing.T) {
380401

381402
for _, tt := range tests {
382403
t.Run(tt.name, func(t *testing.T) {
404+
t.Parallel()
383405
req := httptest.NewRequest(tt.method, tt.path, nil)
384406
result := auditor.extractTarget(req, tt.eventType)
385407
assert.Equal(t, tt.expected, result)
@@ -388,6 +410,7 @@ func TestExtractTarget(t *testing.T) {
388410
}
389411

390412
func TestAddMetadata(t *testing.T) {
413+
t.Parallel()
391414
auditor := NewAuditor(&Config{})
392415

393416
event := NewAuditEvent("test", EventSource{}, OutcomeSuccess, map[string]string{}, "test")
@@ -407,7 +430,9 @@ func TestAddMetadata(t *testing.T) {
407430
}
408431

409432
func TestAddEventData(t *testing.T) {
433+
t.Parallel()
410434
t.Run("with request and response data", func(t *testing.T) {
435+
t.Parallel()
411436
config := &Config{
412437
IncludeRequestData: true,
413438
IncludeResponseData: true,
@@ -439,6 +464,7 @@ func TestAddEventData(t *testing.T) {
439464
})
440465

441466
t.Run("with non-JSON data", func(t *testing.T) {
467+
t.Parallel()
442468
config := &Config{
443469
IncludeRequestData: true,
444470
IncludeResponseData: true,
@@ -465,6 +491,7 @@ func TestAddEventData(t *testing.T) {
465491
})
466492

467493
t.Run("disabled data inclusion", func(t *testing.T) {
494+
t.Parallel()
468495
config := &Config{
469496
IncludeRequestData: false,
470497
IncludeResponseData: false,
@@ -483,6 +510,7 @@ func TestAddEventData(t *testing.T) {
483510
}
484511

485512
func TestResponseWriterCapture(t *testing.T) {
513+
t.Parallel()
486514
config := &Config{
487515
IncludeResponseData: true,
488516
MaxDataSize: 10, // Small limit for testing
@@ -510,6 +538,7 @@ func TestResponseWriterCapture(t *testing.T) {
510538
}
511539

512540
func TestResponseWriterStatusCode(t *testing.T) {
541+
t.Parallel()
513542
rw := &responseWriter{
514543
ResponseWriter: httptest.NewRecorder(),
515544
statusCode: http.StatusOK, // Default
@@ -521,6 +550,7 @@ func TestResponseWriterStatusCode(t *testing.T) {
521550
}
522551

523552
func TestExtractSourceWithHeaders(t *testing.T) {
553+
t.Parallel()
524554
auditor := NewAuditor(&Config{})
525555

526556
req := httptest.NewRequest("GET", "/test", nil)

0 commit comments

Comments
 (0)