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  }