...

Source file src/github.com/linkerd/linkerd2/controller/api/destination/watcher/test_util.go

Documentation: github.com/linkerd/linkerd2/controller/api/destination/watcher

     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  // DeletingProfileListener implements ProfileUpdateListener and registers
    13  // deletions. Useful for unit testing
    14  type DeletingProfileListener struct {
    15  	NumDeletes int
    16  }
    17  
    18  // NewDeletingProfileListener creates a new NewDeletingProfileListener.
    19  func NewDeletingProfileListener() *DeletingProfileListener {
    20  	return &DeletingProfileListener{
    21  		NumDeletes: 0,
    22  	}
    23  }
    24  
    25  // Update registers a deletion
    26  func (dpl *DeletingProfileListener) Update(profile *sp.ServiceProfile) {
    27  	if profile == nil {
    28  		dpl.NumDeletes++
    29  	}
    30  }
    31  
    32  // BufferingProfileListener implements ProfileUpdateListener and stores updates
    33  // in a slice.  Useful for unit tests.
    34  type BufferingProfileListener struct {
    35  	Profiles []*sp.ServiceProfile
    36  	mu       sync.RWMutex
    37  }
    38  
    39  // NewBufferingProfileListener creates a new BufferingProfileListener.
    40  func NewBufferingProfileListener() *BufferingProfileListener {
    41  	return &BufferingProfileListener{
    42  		Profiles: []*sp.ServiceProfile{},
    43  	}
    44  }
    45  
    46  func CreateMockDecoder(configs ...string) configDecoder {
    47  	// Create a mock decoder with some random objs to satisfy client creation
    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  // Update stores the update in the internal buffer.
    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