Skip to content

Commit 9307d95

Browse files
leodidoona-agent
andcommitted
test(slsa): add comprehensive tests for RequireAttestation configuration
Add test coverage for the new RequireAttestation configuration: - Extend TestBuildCommandFlags with 3 test cases for --slsa-require-attestation flag - Default value (false) - Enabled via flag - Explicitly disabled via flag - Add TestParseSLSAConfig with 6 test cases for configuration parsing logic - Verification disabled - Verification enabled without source URI (error case) - Verification enabled with source URI - RequireAttestation via environment variable - RequireAttestation via CLI flag (overrides env var) - CLI flag disables RequireAttestation (overrides env var) Tests follow existing patterns in build_test.go and verify: - Flag parsing and default values - Environment variable handling - CLI flag precedence over environment variables - Configuration object creation with correct RequireAttestation value All tests pass successfully. Co-authored-by: Ona <no-reply@ona.com>
1 parent aa90eac commit 9307d95

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed

cmd/build_test.go

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ func TestBuildCommandFlags(t *testing.T) {
3232
wantFlag: "in-flight-checksums",
3333
wantVal: false,
3434
},
35+
{
36+
name: "slsa-require-attestation flag default",
37+
args: []string{},
38+
wantFlag: "slsa-require-attestation",
39+
wantVal: false,
40+
},
41+
{
42+
name: "slsa-require-attestation flag enabled",
43+
args: []string{"--slsa-require-attestation"},
44+
wantFlag: "slsa-require-attestation",
45+
wantVal: true,
46+
},
47+
{
48+
name: "slsa-require-attestation flag explicitly disabled",
49+
args: []string{"--slsa-require-attestation=false"},
50+
wantFlag: "slsa-require-attestation",
51+
wantVal: false,
52+
},
3553
}
3654

3755
for _, tt := range tests {
@@ -240,3 +258,137 @@ func TestGetBuildOptsWithInFlightChecksums(t *testing.T) {
240258
})
241259
}
242260
}
261+
262+
func TestParseSLSAConfig(t *testing.T) {
263+
tests := []struct {
264+
name string
265+
envVerification string
266+
envSourceURI string
267+
envRequireAttestation string
268+
flagVerification *bool
269+
flagSourceURI *string
270+
flagRequireAttestation *bool
271+
wantConfig bool
272+
wantRequireAttestation bool
273+
wantError bool
274+
}{
275+
{
276+
name: "verification disabled",
277+
wantConfig: false,
278+
},
279+
{
280+
name: "verification enabled via env, no source URI",
281+
envVerification: "true",
282+
wantError: true,
283+
},
284+
{
285+
name: "verification enabled via env with source URI",
286+
envVerification: "true",
287+
envSourceURI: "https://github.com/gitpod-io/leeway",
288+
wantConfig: true,
289+
},
290+
{
291+
name: "require attestation via env",
292+
envVerification: "true",
293+
envSourceURI: "https://github.com/gitpod-io/leeway",
294+
envRequireAttestation: "true",
295+
wantConfig: true,
296+
wantRequireAttestation: true,
297+
},
298+
{
299+
name: "require attestation via flag overrides env",
300+
envVerification: "true",
301+
envSourceURI: "https://github.com/gitpod-io/leeway",
302+
envRequireAttestation: "false",
303+
flagRequireAttestation: boolPtr(true),
304+
wantConfig: true,
305+
wantRequireAttestation: true,
306+
},
307+
{
308+
name: "flag disables require attestation",
309+
envVerification: "true",
310+
envSourceURI: "https://github.com/gitpod-io/leeway",
311+
envRequireAttestation: "true",
312+
flagRequireAttestation: boolPtr(false),
313+
wantConfig: true,
314+
wantRequireAttestation: false,
315+
},
316+
}
317+
318+
for _, tt := range tests {
319+
t.Run(tt.name, func(t *testing.T) {
320+
// Set environment variables
321+
if tt.envVerification != "" {
322+
t.Setenv(EnvvarSLSACacheVerification, tt.envVerification)
323+
}
324+
if tt.envSourceURI != "" {
325+
t.Setenv(EnvvarSLSASourceURI, tt.envSourceURI)
326+
}
327+
if tt.envRequireAttestation != "" {
328+
t.Setenv(EnvvarSLSARequireAttestation, tt.envRequireAttestation)
329+
}
330+
331+
// Create test command
332+
cmd := &cobra.Command{
333+
Use: "build",
334+
Run: func(cmd *cobra.Command, args []string) {},
335+
}
336+
addBuildFlags(cmd)
337+
338+
// Set flags if specified
339+
if tt.flagVerification != nil {
340+
if err := cmd.Flags().Set("slsa-cache-verification", boolToString(*tt.flagVerification)); err != nil {
341+
t.Fatalf("failed to set verification flag: %v", err)
342+
}
343+
}
344+
if tt.flagSourceURI != nil {
345+
if err := cmd.Flags().Set("slsa-source-uri", *tt.flagSourceURI); err != nil {
346+
t.Fatalf("failed to set source URI flag: %v", err)
347+
}
348+
}
349+
if tt.flagRequireAttestation != nil {
350+
if err := cmd.Flags().Set("slsa-require-attestation", boolToString(*tt.flagRequireAttestation)); err != nil {
351+
t.Fatalf("failed to set require attestation flag: %v", err)
352+
}
353+
}
354+
355+
// Test parseSLSAConfig
356+
config, err := parseSLSAConfig(cmd)
357+
358+
if tt.wantError {
359+
if err == nil {
360+
t.Error("expected error but got none")
361+
}
362+
return
363+
}
364+
365+
if err != nil {
366+
t.Fatalf("unexpected error: %v", err)
367+
}
368+
369+
if tt.wantConfig {
370+
if config == nil {
371+
t.Fatal("expected config but got nil")
372+
}
373+
if config.RequireAttestation != tt.wantRequireAttestation {
374+
t.Errorf("expected RequireAttestation=%v, got %v", tt.wantRequireAttestation, config.RequireAttestation)
375+
}
376+
} else {
377+
if config != nil {
378+
t.Errorf("expected nil config but got %+v", config)
379+
}
380+
}
381+
})
382+
}
383+
}
384+
385+
func boolPtr(b bool) *bool {
386+
return &b
387+
}
388+
389+
func boolToString(b bool) string {
390+
if b {
391+
return "true"
392+
}
393+
return "false"
394+
}

0 commit comments

Comments
 (0)