github.com/cilium/cilium@v1.16.2/pkg/resiliency/errorset_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package resiliency_test
     5  
     6  import (
     7  	"errors"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  
    12  	"github.com/cilium/cilium/pkg/resiliency"
    13  )
    14  
    15  func TestErrorJoin(t *testing.T) {
    16  	uu := map[string]struct {
    17  		errs  []error
    18  		total int
    19  		e     string
    20  	}{
    21  		"none": {},
    22  		"nils": {
    23  			errs: []error{nil, nil},
    24  		},
    25  		"plain": {
    26  			errs:  []error{errors.New("e1"), errors.New("e2"), errors.New("e3")},
    27  			total: 3,
    28  			e:     "test (3/3) failed\ne1\ne2\ne3",
    29  		},
    30  		"dups": {
    31  			errs:  []error{errors.New("e1"), errors.New("e2"), errors.New("e1")},
    32  			total: 3,
    33  			e:     "test (2/3) failed\ne1\ne2",
    34  		},
    35  		"mix": {
    36  			errs:  []error{errors.New("e1"), errors.New("e2"), errors.New("e1"), nil, errors.New("e2")},
    37  			total: 5,
    38  			e:     "test (2/5) failed\ne1\ne2",
    39  		},
    40  	}
    41  
    42  	for k := range uu {
    43  		u := uu[k]
    44  		t.Run(k, func(t *testing.T) {
    45  			es := resiliency.NewErrorSet("test", len(u.errs))
    46  			es.Add(u.errs...)
    47  			if es.Error() != nil {
    48  				assert.Equal(t, u.e, errors.Join(es.Error()).Error())
    49  			}
    50  		})
    51  	}
    52  }
    53  
    54  func TestErrorSetAdd(t *testing.T) {
    55  	uu := map[string]struct {
    56  		errs []error
    57  		e    string
    58  	}{
    59  		"none": {},
    60  		"nils": {
    61  			errs: []error{nil, nil},
    62  		},
    63  		"plain": {
    64  			errs: []error{errors.New("e1"), errors.New("e2"), errors.New("e3")},
    65  			e:    "test (3/3) failed\ne1\ne2\ne3",
    66  		},
    67  		"dups": {
    68  			errs: []error{errors.New("e1"), errors.New("e2"), errors.New("e1")},
    69  			e:    "test (2/3) failed\ne1\ne2",
    70  		},
    71  		"mix": {
    72  			errs: []error{errors.New("e1"), errors.New("e2"), errors.New("e1"), nil, errors.New("e2")},
    73  			e:    "test (2/5) failed\ne1\ne2",
    74  		},
    75  	}
    76  
    77  	for k := range uu {
    78  		u := uu[k]
    79  		t.Run(k, func(t *testing.T) {
    80  			es := resiliency.NewErrorSet("test", len(u.errs))
    81  			es.Add(u.errs...)
    82  			if es.Error() != nil {
    83  				assert.Equal(t, u.e, es.Error().Error())
    84  			}
    85  		})
    86  	}
    87  }