1
- package rego
1
+ package rego_test
2
2
3
3
import (
4
4
"bytes"
5
5
"embed"
6
+ "io"
7
+ "strings"
6
8
"testing"
9
+ "testing/fstest"
7
10
8
- "github.com/aquasecurity/trivy/pkg/iac/types"
9
11
"github.com/stretchr/testify/assert"
10
12
"github.com/stretchr/testify/require"
13
+
14
+ "github.com/aquasecurity/trivy/pkg/iac/rego"
15
+ "github.com/aquasecurity/trivy/pkg/iac/scanners/options"
16
+ "github.com/aquasecurity/trivy/pkg/iac/types"
11
17
)
12
18
13
19
//go:embed all:testdata/policies
@@ -16,31 +22,76 @@ var testEmbedFS embed.FS
16
22
func Test_RegoScanning_WithSomeInvalidPolicies (t * testing.T ) {
17
23
t .Run ("allow no errors" , func (t * testing.T ) {
18
24
var debugBuf bytes.Buffer
19
- scanner := NewScanner (types .SourceDockerfile )
20
- scanner .SetRegoErrorLimit (0 )
21
- scanner .SetDebugWriter (& debugBuf )
22
- p , _ := LoadPoliciesFromDirs (testEmbedFS , "." )
23
- require .NotNil (t , p )
24
-
25
- scanner .policies = p
26
- err := scanner .compilePolicies (testEmbedFS , []string {"policies" })
25
+ scanner := rego .NewScanner (
26
+ types .SourceDockerfile ,
27
+ options .ScannerWithRegoErrorLimits (0 ),
28
+ options .ScannerWithDebug (& debugBuf ),
29
+ )
30
+
31
+ err := scanner .LoadPolicies (false , false , testEmbedFS , []string {"." }, nil )
27
32
require .ErrorContains (t , err , `want (one of): ["Cmd" "EndLine" "Flags" "JSON" "Original" "Path" "Stage" "StartLine" "SubCmd" "Value"]` )
28
33
assert .Contains (t , debugBuf .String (), "Error(s) occurred while loading policies" )
29
34
})
30
35
31
36
t .Run ("allow up to max 1 error" , func (t * testing.T ) {
32
37
var debugBuf bytes.Buffer
33
- scanner := NewScanner (types .SourceDockerfile )
34
- scanner .SetRegoErrorLimit (1 )
35
- scanner .SetDebugWriter (& debugBuf )
36
-
37
- p , _ := LoadPoliciesFromDirs (testEmbedFS , "." )
38
- scanner .policies = p
38
+ scanner := rego .NewScanner (
39
+ types .SourceDockerfile ,
40
+ options .ScannerWithRegoErrorLimits (1 ),
41
+ options .ScannerWithDebug (& debugBuf ),
42
+ )
39
43
40
- err := scanner .compilePolicies ( testEmbedFS , []string {"policies" } )
44
+ err := scanner .LoadPolicies ( false , false , testEmbedFS , []string {"." }, nil )
41
45
require .NoError (t , err )
42
46
43
47
assert .Contains (t , debugBuf .String (), "Error occurred while parsing: testdata/policies/invalid.rego, testdata/policies/invalid.rego:7" )
44
48
})
45
49
50
+ t .Run ("schema does not exist" , func (t * testing.T ) {
51
+ check := `# METADATA
52
+ # schemas:
53
+ # - input: schema["fooschema"]
54
+ package mypackage
55
+
56
+ deny {
57
+ input.evil == "foo bar"
58
+ }`
59
+ scanner := rego .NewScanner (types .SourceJSON )
60
+
61
+ err := scanner .LoadPolicies (false , false , fstest.MapFS {}, []string {"." }, []io.Reader {strings .NewReader (check )})
62
+ assert .ErrorContains (t , err , "could not find schema \" fooschema\" " )
63
+ })
64
+
65
+ t .Run ("schema is invalid" , func (t * testing.T ) {
66
+ check := `# METADATA
67
+ # schemas:
68
+ # - input: schema["fooschema"]
69
+ package mypackage
70
+
71
+ deny {
72
+ input.evil == "foo bar"
73
+ }`
74
+ scanner := rego .NewScanner (types .SourceJSON )
75
+
76
+ fsys := fstest.MapFS {
77
+ "schemas/fooschema.json" : & fstest.MapFile {
78
+ Data : []byte ("bad json" ),
79
+ },
80
+ }
81
+
82
+ err := scanner .LoadPolicies (false , false , fsys , []string {"." }, []io.Reader {strings .NewReader (check )})
83
+ assert .ErrorContains (t , err , "could not parse schema \" fooschema\" " )
84
+ })
85
+
86
+ t .Run ("schema is not specified" , func (t * testing.T ) {
87
+ check := `package mypackage
88
+
89
+ deny {
90
+ input.evil == "foo bar"
91
+ }`
92
+ scanner := rego .NewScanner (types .SourceJSON )
93
+ err := scanner .LoadPolicies (false , false , fstest.MapFS {}, []string {"." }, []io.Reader {strings .NewReader (check )})
94
+ assert .NoError (t , err )
95
+ })
96
+
46
97
}
0 commit comments