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  }