github.com/cilium/statedb@v0.3.2/reconciler/status_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package reconciler 5 6 import ( 7 "encoding/json" 8 "errors" 9 "regexp" 10 "testing" 11 "time" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestStatusString(t *testing.T) { 17 now := time.Now() 18 19 s := Status{ 20 Kind: StatusKindPending, 21 UpdatedAt: now, 22 Error: "", 23 } 24 assert.Regexp(t, `Pending \([0-9]+\.[0-9]+.+s ago\)`, s.String()) 25 s.UpdatedAt = now.Add(-time.Hour) 26 assert.Regexp(t, `Pending \([0-9]+\.[0-9]+h ago\)`, s.String()) 27 28 s = Status{ 29 Kind: StatusKindDone, 30 UpdatedAt: now, 31 Error: "", 32 } 33 assert.Regexp(t, `Done \([0-9]+\.[0-9]+.+s ago\)`, s.String()) 34 35 s = Status{ 36 Kind: StatusKindError, 37 UpdatedAt: now, 38 Error: "hey I'm an error", 39 } 40 assert.Regexp(t, `Error: hey I'm an error \([0-9]+\.[0-9]+.+s ago\)`, s.String()) 41 } 42 43 func sanitizeAgo(s string) string { 44 r := regexp.MustCompile(`\(.* ago\)`) 45 return string(r.ReplaceAll([]byte(s), []byte("(??? ago)"))) 46 } 47 48 func TestStatusSet(t *testing.T) { 49 assertJSONRoundtrip := func(s StatusSet) { 50 data, err := json.Marshal(s) 51 assert.NoError(t, err, "Marshal") 52 var s2 StatusSet 53 err = json.Unmarshal(data, &s2) 54 assert.NoError(t, err, "Unmarshal") 55 assert.Equal(t, sanitizeAgo(s.String()), sanitizeAgo(s2.String())) 56 } 57 58 set := NewStatusSet() 59 assert.Equal(t, "Pending", set.String()) 60 assertJSONRoundtrip(set) 61 62 s := set.Get("foo") 63 assert.Equal(t, s.Kind, StatusKindPending) 64 assert.NotZero(t, s.id) 65 66 set = set.Set("foo", StatusDone()) 67 set = set.Set("bar", StatusError(errors.New("fail"))) 68 assertJSONRoundtrip(set) 69 70 assert.Equal(t, set.Get("foo").Kind, StatusKindDone) 71 assert.Equal(t, set.Get("bar").Kind, StatusKindError) 72 assert.Regexp(t, "^Errored: bar \\(fail\\), Done: foo \\(.* ago\\)", set.String()) 73 74 set = set.Pending() 75 assert.NotZero(t, set.Get("foo").id) 76 assert.Equal(t, set.Get("foo").Kind, StatusKindPending) 77 assert.Equal(t, set.Get("bar").Kind, StatusKindPending) 78 assert.Equal(t, set.Get("baz").Kind, StatusKindPending) 79 assert.Regexp(t, "^Pending: bar foo \\(.* ago\\)", set.String()) 80 assertJSONRoundtrip(set) 81 }