@@ -3,7 +3,7 @@ package test
33import (
44 "context"
55 "fmt"
6- "os "
6+ "io "
77
88 "github.com/open-policy-agent/frameworks/constraint/pkg/apis"
99 constraintclient "github.com/open-policy-agent/frameworks/constraint/pkg/client"
@@ -40,20 +40,28 @@ type Opts struct {
4040 Verbose bool
4141}
4242
43- func Test (objs []* unstructured.Unstructured , tOpts Opts ) (* GatorResponses , error ) {
43+ type Opt func () ([]constraintclient.Opt , []rego.Arg , error )
44+
45+ func Test (objs []* unstructured.Unstructured , opts ... Opt ) (* GatorResponses , error ) {
4446 args := []constraintclient.Opt {constraintclient .Targets (& target.K8sValidationTarget {})}
45- if tOpts .UseK8sCEL {
46- k8sDriver , err := makeK8sCELDriver (tOpts )
47+
48+ driverArgs := []rego.Arg {}
49+
50+ for _ , opt := range opts {
51+ extraArgs , extraDriverArgs , err := opt ()
4752 if err != nil {
48- return nil , fmt . Errorf ( "creating K8s native driver: %w" , err )
53+ return nil , err
4954 }
50- args = append (args , constraintclient .Driver (k8sDriver ))
55+
56+ args = append (args , extraArgs ... )
57+ driverArgs = append (driverArgs , extraDriverArgs ... )
5158 }
5259
53- driver , err := makeRegoDriver ( tOpts )
60+ driver , err := rego . New ( driverArgs ... )
5461 if err != nil {
5562 return nil , fmt .Errorf ("creating Rego driver: %w" , err )
5663 }
64+
5765 args = append (args , constraintclient .Driver (driver ), constraintclient .EnforcementPoints (util .GatorEnforcementPoint ))
5866
5967 client , err := constraintclient .NewClient (args ... )
@@ -179,30 +187,46 @@ func Test(objs []*unstructured.Unstructured, tOpts Opts) (*GatorResponses, error
179187 return responses , nil
180188}
181189
182- func makeRegoDriver (tOpts Opts ) (* rego.Driver , error ) {
183- var args []rego.Arg
184- if tOpts .GatherStats {
185- args = append (args , rego .GatherStats ())
186- }
187- if tOpts .IncludeTrace {
188- args = append (args , rego .Tracing (tOpts .IncludeTrace ))
190+ func WithGatherStats () Opt {
191+ return func () ([]constraintclient.Opt , []rego.Arg , error ) {
192+ return []constraintclient.Opt {}, []rego.Arg {
193+ rego .GatherStats (),
194+ }, nil
189195 }
190- if tOpts .Verbose {
191- args = append (args ,
192- rego .PrintEnabled (tOpts .Verbose ),
193- rego .PrintHook (gator .NewPrintHook (os .Stdout )),
194- )
196+ }
197+
198+ func WithTrace () Opt {
199+ return func () ([]constraintclient.Opt , []rego.Arg , error ) {
200+ return []constraintclient.Opt {}, []rego.Arg {
201+ rego .Tracing (true ),
202+ }, nil
195203 }
204+ }
196205
197- return rego .New (args ... )
206+ func WithPrintHook (w io.Writer ) Opt {
207+ return func () ([]constraintclient.Opt , []rego.Arg , error ) {
208+ return []constraintclient.Opt {}, []rego.Arg {
209+ rego .PrintEnabled (true ),
210+ rego .PrintHook (gator .NewPrintHook (w )),
211+ }, nil
212+ }
198213}
199214
200- func makeK8sCELDriver (tOpts Opts ) (* k8scel.Driver , error ) {
201- var args []k8scel.Arg
215+ func WithK8sCEL (gatherStats bool ) Opt {
216+ return func () ([]constraintclient.Opt , []rego.Arg , error ) {
217+ var args []k8scel.Arg
202218
203- if tOpts . GatherStats {
204- args = append (args , k8scel .GatherStats ())
205- }
219+ if gatherStats {
220+ args = append (args , k8scel .GatherStats ())
221+ }
206222
207- return k8scel .New (args ... )
223+ k8sDriver , err := k8scel .New (args ... )
224+ if err != nil {
225+ return []constraintclient.Opt {}, []rego.Arg {}, fmt .Errorf ("creating K8s native driver: %w" , err )
226+ }
227+
228+ return []constraintclient.Opt {
229+ constraintclient .Driver (k8sDriver ),
230+ }, []rego.Arg {}, nil
231+ }
208232}
0 commit comments