55 "encoding/json"
66 "errors"
77 "fmt"
8- "github.com/ncode/vault-audit-filter/pkg/forwarder"
9- "github.com/ncode/vault-audit-filter/pkg/messaging"
8+ "github.com/expr-lang/expr/vm"
109 "github.com/stretchr/testify/require"
1110 "io"
1211 "io/ioutil"
@@ -829,22 +828,18 @@ func auditFrame() []byte {
829828 return []byte (`{"type":"request","time":"2000-01-01T00:00:00Z","auth":{},"request":{},"response":{}}` )
830829}
831830
832- // rule‑group factory: match=true → no rules (auto‑match); match=false → 1 rule that always fails.
833- func newRuleGroup (match bool , msgr messaging.Messenger , fwd forwarder.Forwarder ) RuleGroup {
834- var compiled []CompiledRule
835- if ! match {
836- compiled = []CompiledRule {{Program : nil }} // any non‑nil slice forces shouldLog=false
837- }
838- return RuleGroup {
839- Name : "grp" ,
840- CompiledRules : compiled ,
841- Messenger : msgr ,
842- Forwarder : fwd ,
843- Writer : new (bytes.Buffer ), // satisfies io.Writer, avoids disk I/O
844- }
831+ // returns a compiled rule that always evaluates to false
832+ func falseProgram (t * testing.T ) * vm.Program {
833+ t .Helper ()
834+ p , err := expr .Compile ("false" )
835+ require .NoError (t , err )
836+ return p
845837}
846838
847839func TestReact_Branches (t * testing.T ) {
840+ logger := slog .New (slog .NewTextHandler (io .Discard , & slog.HandlerOptions {Level : slog .LevelDebug }))
841+ frame := auditFrame ()
842+
848843 tests := []struct {
849844 name string
850845 group RuleGroup
@@ -853,43 +848,70 @@ func TestReact_Branches(t *testing.T) {
853848 wantFwdCalls int
854849 }{
855850 {
856- name : "match_no_side_effects_returns_None" ,
857- group : newRuleGroup (true , nil , nil ),
851+ name : "match_no_side_effects_returns_None" ,
852+ group : RuleGroup {
853+ Name : "matchOnly" ,
854+ // len==0 => always matches
855+ CompiledRules : nil ,
856+ Writer : new (bytes.Buffer ),
857+ },
858858 wantAction : gnet .None ,
859859 },
860860 {
861- name : "forwarder_ok_triggers_Close" ,
862- group : newRuleGroup (true , nil , & dummyForwarder {}),
861+ name : "forwarder_ok_triggers_Close" ,
862+ group : RuleGroup {
863+ Name : "forwardOK" ,
864+ CompiledRules : nil ,
865+ Writer : new (bytes.Buffer ),
866+ Forwarder : & dummyForwarder {},
867+ },
863868 wantAction : gnet .Close ,
864869 wantFwdCalls : 1 ,
865870 },
866871 {
867- name : "forwarder_error_triggers_Close" ,
868- group : newRuleGroup (true , nil , & dummyForwarder {forwardErr : errors .New ("x" )}),
872+ name : "forwarder_error_triggers_Close" ,
873+ group : RuleGroup {
874+ Name : "forwardErr" ,
875+ CompiledRules : nil ,
876+ Writer : new (bytes.Buffer ),
877+ Forwarder : & dummyForwarder {forwardErr : errors .New ("boom" )},
878+ },
869879 wantAction : gnet .Close ,
870880 wantFwdCalls : 1 ,
871881 },
872882 {
873- name : "messenger_error_triggers_Close" ,
874- group : newRuleGroup (true , & dummyMessenger {sendErr : errors .New ("x" )}, nil ),
883+ name : "messenger_error_triggers_Close" ,
884+ group : RuleGroup {
885+ Name : "msgErr" ,
886+ CompiledRules : nil ,
887+ Writer : new (bytes.Buffer ),
888+ Messenger : & dummyMessenger {sendErr : errors .New ("boom" )},
889+ },
875890 wantAction : gnet .Close ,
876891 wantMsgCalls : 1 ,
877892 },
878893 {
879- name : "no_match_triggers_Close" ,
880- group : newRuleGroup (false , nil , nil ),
894+ name : "no_match_triggers_Close" ,
895+ group : RuleGroup {
896+ Name : "noMatch" ,
897+ CompiledRules : []CompiledRule {{
898+ Program : falseProgram (t ),
899+ }},
900+ Writer : new (bytes.Buffer ),
901+ },
881902 wantAction : gnet .Close ,
882903 },
883904 }
884905
885- frame := auditFrame ()
886-
887906 for _ , tc := range tests {
888907 tc := tc // capture range variable
889908 t .Run (tc .name , func (t * testing.T ) {
890- srv := & AuditServer {ruleGroups : []RuleGroup {tc .group }}
891- _ , act := srv .React (frame , nil )
909+ srv := & AuditServer {
910+ logger : logger ,
911+ ruleGroups : []RuleGroup {tc .group },
912+ }
892913
914+ _ , act := srv .React (frame , nil )
893915 require .Equal (t , tc .wantAction , act )
894916
895917 if dm , ok := tc .group .Messenger .(* dummyMessenger ); ok {
0 commit comments