policy_test.go 2.16 KB
package actionlog

import (
	"testing"
)

func TestPolicyMatchers(t *testing.T) {
	tests := []struct {
		name string
		actn *Action
		mtch policyMatcher
		want bool
	}{
		{
			"simple any",
			&Action{},
			NewPolicyAny(),
			false,
		},
		{
			"simple all",
			&Action{},
			NewPolicyAll(),
			true,
		},
		{
			"should match resource",
			&Action{Resource: "foo"},
			NewPolicyMatchResource("foo"),
			true,
		},
		{
			"should not match resource",
			&Action{Resource: "bar"},
			NewPolicyMatchResource("foo"),
			false,
		},
		{
			"should match one of resource",
			&Action{Resource: "baz"},
			NewPolicyMatchResource("foo", "bar", "baz"),
			true,
		},
		{
			"should match action",
			&Action{Action: "foo"},
			NewPolicyMatchAction("foo"),
			true,
		},
		{
			"should not match action",
			&Action{Action: "bar"},
			NewPolicyMatchAction("foo"),
			false,
		},
		{
			"should match one of action",
			&Action{Action: "baz"},
			NewPolicyMatchAction("foo", "bar", "baz"),
			true,
		},
		{
			"should match severity",
			&Action{Severity: Emergency},
			NewPolicyMatchSeverity(Emergency),
			true,
		},
		{
			"should not match severity",
			&Action{Severity: Debug},
			NewPolicyMatchSeverity(Alert),
			false,
		},
		{
			"should match one of severity",
			&Action{Severity: Warning},
			NewPolicyMatchSeverity(Emergency, Debug, Warning),
			true,
		},
		{
			"should not match one of severity",
			&Action{Severity: Info},
			NewPolicyNegate(NewPolicyMatchSeverity(Emergency, Debug, Warning)),
			true,
		},
		{
			"complex match",
			&Action{Severity: Warning, Resource: "foo", Action: "do"},
			NewPolicyAll(
				NewPolicyMatchResource("foo"),
				NewPolicyMatchAction("do"),
				NewPolicyMatchSeverity(Warning),
			),
			true,
		},
		{
			"complex miss",
			&Action{Severity: Warning, Resource: "bar", Action: "do"},
			NewPolicyAll(
				NewPolicyMatchResource("foo"),
				NewPolicyMatchAction("do"),
				NewPolicyMatchSeverity(Warning),
			),
			false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if tt.want != tt.mtch.Match(tt.actn) {
				if tt.want {
					t.Errorf("expecting to match")
				} else {
					t.Errorf("expecting not to match ")
				}
			}
		})
	}
}