X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fconfig%2Fgroups_test.go;h=57176079bc0782ebfc0a76fb2f59bc84d0a27391;hb=4473e968425319e6beae558643bb047a6b01c17a;hp=cf6cd6e088cd48d3789fb2f618f903eb1e420dcc;hpb=641203fda8f7da72c74562c9dc910ca108116f11;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/config/groups_test.go b/cmd/safcm/config/groups_test.go index cf6cd6e..5717607 100644 --- a/cmd/safcm/config/groups_test.go +++ b/cmd/safcm/config/groups_test.go @@ -19,10 +19,9 @@ import ( "fmt" "os" "path/filepath" - "reflect" "testing" - "github.com/google/go-cmp/cmp" + "ruderich.org/simon/safcm/testutil" ) func TestLoadGroups(t *testing.T) { @@ -78,6 +77,12 @@ func TestLoadGroups(t *testing.T) { "group2:remove": { "remove", }, + "group3": { + "host1.example.org", + }, + "group3:remove": { + "host2", + }, "all_except_some": { "all", }, @@ -193,15 +198,8 @@ func TestLoadGroups(t *testing.T) { } res, err := LoadGroups(tc.cfg, tc.hosts) - - if !reflect.DeepEqual(tc.exp, res) { - t.Errorf("res: %s", cmp.Diff(tc.exp, res)) - } - // Ugly but the simplest way to compare errors (including nil) - if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tc.expErr) { - t.Errorf("err = %#v, want %#v", - err, tc.expErr) - } + testutil.AssertEqual(t, "res", res, tc.exp) + testutil.AssertErrorEqual(t, "err", err, tc.expErr) }) } } @@ -241,6 +239,7 @@ func TestResolveHostGroups(t *testing.T) { []string{ "all", "group", + "group3", "host1.example.org", "remove", }, @@ -290,6 +289,7 @@ func TestResolveHostGroups(t *testing.T) { []string{ "all", "detected_mips", + "group3", "host1.example.org", "remove", }, @@ -315,14 +315,151 @@ func TestResolveHostGroups(t *testing.T) { t.Run(tc.name, func(t *testing.T) { res, err := ResolveHostGroups(tc.host, allGroups, tc.detected) - if !reflect.DeepEqual(tc.exp, res) { - t.Errorf("res: %s", cmp.Diff(tc.exp, res)) - } - // Ugly but the simplest way to compare errors (including nil) - if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tc.expErr) { - t.Errorf("err = %#v, want %#v", - err, tc.expErr) - } + testutil.AssertEqual(t, "res", res, tc.exp) + testutil.AssertErrorEqual(t, "err", err, tc.expErr) + }) + } +} + +func TestTransitivelyDetectedGroups(t *testing.T) { + tests := []struct { + name string + groups map[string][]string + exp []string + }{ + + { + "no detected", + map[string][]string{ + "group-a": { + "a", + "b", + "group-b", + }, + "group-a:remove": { + "d", + }, + "group-b": { + "c", + "d", + }, + }, + nil, + }, + + { + "detected as direct member", + map[string][]string{ + "group-a": { + "a", + "b", + "detected_foo", + }, + "group-b": { + "c", + "d", + }, + }, + []string{ + "group-a", + }, + }, + + { + "detected as direct :remove member", + map[string][]string{ + "group-a": { + "a", + "b", + "group-b", + }, + "group-a:remove": { + "d", + "detected_foo", + }, + "group-b": { + "c", + "d", + }, + }, + []string{ + "group-a", + }, + }, + + { + "detected as transitive member", + map[string][]string{ + "group-a": { + "group-b", + }, + "group-b": { + "group-c", + }, + "group-c": { + "group-d", + "detected_bar", + }, + "group-d": { + "group-e", + }, + "group-e": { + "detected_foo", + }, + "group-f": { + "a", + "b", + }, + }, + []string{ + "group-a", + "group-b", + "group-c", + "group-d", + "group-e", + }, + }, + + { + "detected as transitive :remove member", + map[string][]string{ + "group-a": { + "group-b", + }, + "group-b": { + "group-c", + }, + "group-c": { + "group-d", + }, + "group-d": { + "group-e", + }, + "group-e": { + "all", + }, + "group-e:remove": { + "detected_foo", + }, + "group-f": { + "a", + "b", + }, + }, + []string{ + "group-a", + "group-b", + "group-c", + "group-d", + "group-e", + }, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + res := TransitivelyDetectedGroups(tc.groups) + testutil.AssertEqual(t, "res", res, tc.exp) }) } }