...
1 package watcher
2
3 import (
4 "sync"
5 "testing"
6
7 "github.com/go-test/deep"
8 sp "github.com/linkerd/linkerd2/controller/gen/apis/serviceprofile/v1alpha2"
9 "github.com/linkerd/linkerd2/controller/k8s"
10 )
11
12
13
14 type DeletingProfileListener struct {
15 NumDeletes int
16 }
17
18
19 func NewDeletingProfileListener() *DeletingProfileListener {
20 return &DeletingProfileListener{
21 NumDeletes: 0,
22 }
23 }
24
25
26 func (dpl *DeletingProfileListener) Update(profile *sp.ServiceProfile) {
27 if profile == nil {
28 dpl.NumDeletes++
29 }
30 }
31
32
33
34 type BufferingProfileListener struct {
35 Profiles []*sp.ServiceProfile
36 mu sync.RWMutex
37 }
38
39
40 func NewBufferingProfileListener() *BufferingProfileListener {
41 return &BufferingProfileListener{
42 Profiles: []*sp.ServiceProfile{},
43 }
44 }
45
46 func CreateMockDecoder(configs ...string) configDecoder {
47
48 return func(data []byte, cluster string, enableEndpointSlices bool) (*k8s.API, *k8s.MetadataAPI, error) {
49 remoteAPI, err := k8s.NewFakeAPI(configs...)
50 if err != nil {
51 return nil, nil, err
52 }
53
54 metadataAPI, err := k8s.NewFakeMetadataAPI(nil)
55 if err != nil {
56 return nil, nil, err
57 }
58
59 return remoteAPI, metadataAPI, nil
60 }
61
62 }
63
64
65 func (bpl *BufferingProfileListener) Update(profile *sp.ServiceProfile) {
66 bpl.mu.Lock()
67 defer bpl.mu.Unlock()
68 bpl.Profiles = append(bpl.Profiles, profile)
69 }
70
71 func testCompare(t *testing.T, expected interface{}, actual interface{}) {
72 t.Helper()
73 if diff := deep.Equal(expected, actual); diff != nil {
74 t.Fatalf("%v", diff)
75 }
76 }
77
View as plain text