From 4073c5dfb0439d5ebd6e50d66a09732f66337ab0 Mon Sep 17 00:00:00 2001 From: Anton Schirg Date: Mon, 27 Aug 2018 16:17:39 +0200 Subject: [PATCH] change pruning testing function to use set compare on names --- cmd/pruning/pruning_test.go | 66 +++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/cmd/pruning/pruning_test.go b/cmd/pruning/pruning_test.go index cd97311..4cdeb45 100644 --- a/cmd/pruning/pruning_test.go +++ b/cmd/pruning/pruning_test.go @@ -1,6 +1,7 @@ package pruning import ( + "fmt" "github.com/stretchr/testify/assert" "testing" "time" @@ -18,14 +19,40 @@ func (s stubSnap) Replicated() bool { return s.replicated } func (s stubSnap) Date() time.Time { return s.date } -func TestPruneSnapshots(t *testing.T) { +type testCase struct { + inputs []Snapshot + rules []KeepRule + exp, eff map[string]bool +} - type testCase struct { - inputs []Snapshot - rules []KeepRule - exp, eff []Snapshot +func testTable(tcs map[string]testCase, t *testing.T) { + mapEqual := func(a, b map[string]bool) bool { + if len(a) != len(b) { + return false + } + for k, v := range a { + if w, ok := b[k]; !ok || v != w { + return false + } + } + return true } + for name := range tcs { + t.Run(name, func(t *testing.T) { + tc := tcs[name] + remove := PruneSnapshots(tc.inputs, tc.rules) + tc.eff = make(map[string]bool) + for _, s := range remove { + tc.eff[s.Name()] = true + } + assert.True(t, mapEqual(tc.exp, tc.eff), fmt.Sprintf("is %v but should be %v", tc.eff, tc.exp)) + }) + } +} + +func TestPruneSnapshots(t *testing.T) { + inputs := map[string][]Snapshot{ "s1": []Snapshot{ stubSnap{name: "foo_123"}, @@ -40,8 +67,8 @@ func TestPruneSnapshots(t *testing.T) { rules: []KeepRule{ MustKeepRegex("foo_"), }, - exp: []Snapshot{ - stubSnap{name: "bar_123"}, + exp: map[string]bool{ + "bar_123": true, }, }, "multipleRules": { @@ -50,7 +77,7 @@ func TestPruneSnapshots(t *testing.T) { MustKeepRegex("foo_"), MustKeepRegex("bar_"), }, - exp: []Snapshot{}, + exp: map[string]bool{}, }, "onlyThoseRemovedByAllAreRemoved": { inputs: inputs["s1"], @@ -58,31 +85,28 @@ func TestPruneSnapshots(t *testing.T) { MustKeepRegex("notInS1"), // would remove all MustKeepRegex("bar_"), // would remove all but bar_, i.e. foo_.* }, - exp: []Snapshot{ - stubSnap{name: "foo_123"}, - stubSnap{name: "foo_456"}, + exp: map[string]bool{ + "foo_123": true, + "foo_456": true, }, }, "noRulesKeepsAll": { inputs: inputs["s1"], rules: []KeepRule{}, - exp: inputs["s1"], + exp: map[string]bool{ + "foo_123": true, + "foo_456": true, + "bar_123": true, + }, }, "noSnaps": { inputs: []Snapshot{}, rules: []KeepRule{ MustKeepRegex("foo_"), }, - exp: []Snapshot{}, + exp: map[string]bool{}, }, } - for name := range tcs { - t.Run(name, func(t *testing.T) { - tc := tcs[name] - tc.eff = PruneSnapshots(tc.inputs, tc.rules) - assert.Equal(t, tc.exp, tc.eff) - }) - } - + testTable(tcs, t) }