github.com/Axway/agent-sdk@v1.1.101/pkg/agent/handler/proxy_test.go (about) 1 package handler 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 9 "github.com/Axway/agent-sdk/pkg/watchmanager/proto" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 type customHandler struct { 14 err error 15 } 16 17 func (c *customHandler) Handle(_ context.Context, _ *proto.EventMeta, _ *v1.ResourceInstance) error { 18 return c.err 19 } 20 21 func TestProxyHandler(t *testing.T) { 22 tests := []struct { 23 name string 24 handlers []Handler 25 event proto.Event_Type 26 hasError bool 27 }{ 28 { 29 name: "should not register any handlers, and return nil when Handle is called", 30 event: proto.Event_UPDATED, 31 handlers: nil, 32 hasError: false, 33 }, 34 { 35 name: "should register a handler and return nil when Handle is called", 36 event: proto.Event_CREATED, 37 handlers: []Handler{ 38 &customHandler{}, 39 }, 40 hasError: false, 41 }, 42 { 43 name: "should register two handlers and return nil when Handle is called", 44 event: proto.Event_CREATED, 45 handlers: []Handler{ 46 &customHandler{}, 47 &customHandler{}, 48 }, 49 hasError: false, 50 }, 51 { 52 name: "should register a handler and return an error when Handle is called", 53 event: proto.Event_CREATED, 54 handlers: []Handler{ 55 &customHandler{err: fmt.Errorf("error")}, 56 }, 57 hasError: true, 58 }, 59 { 60 name: "should register two handlers and return an error when Handle is called", 61 event: proto.Event_CREATED, 62 handlers: []Handler{ 63 &customHandler{}, 64 &customHandler{err: fmt.Errorf("error")}, 65 }, 66 hasError: true, 67 }, 68 { 69 name: "should register two handlers and return an error when calling the first registered handler", 70 event: proto.Event_CREATED, 71 handlers: []Handler{ 72 &customHandler{err: fmt.Errorf("error")}, 73 &customHandler{}, 74 }, 75 hasError: true, 76 }, 77 } 78 79 for _, tc := range tests { 80 t.Run(tc.name, func(t *testing.T) { 81 ri := &v1.ResourceInstance{ 82 ResourceMeta: v1.ResourceMeta{ 83 Name: "name", 84 Title: "title", 85 }, 86 } 87 88 proxy := NewStreamWatchProxyHandler() 89 90 for i, h := range tc.handlers { 91 proxy.RegisterTargetHandler(fmt.Sprintf("%d", i), h) 92 } 93 94 err := proxy.Handle(NewEventContext(tc.event, nil, ri.Kind, ri.Name), nil, ri) 95 if tc.hasError { 96 assert.Error(t, err) 97 } else { 98 assert.Nil(t, err) 99 } 100 101 for i := range tc.handlers { 102 proxy.UnregisterTargetHandler(fmt.Sprintf("%d", i)) 103 } 104 }) 105 } 106 }