github.com/Axway/agent-sdk@v1.1.101/pkg/agent/handler/agentresource_test.go (about)

     1  package handler
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/Axway/agent-sdk/pkg/agent/resource"
     7  	"github.com/Axway/agent-sdk/pkg/apic"
     8  	v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1"
     9  	catalog "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/catalog/v1alpha1"
    10  	"github.com/Axway/agent-sdk/pkg/config"
    11  	"github.com/Axway/agent-sdk/pkg/watchmanager/proto"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestAgentResourceHandler(t *testing.T) {
    16  	tests := []struct {
    17  		name     string
    18  		hasError bool
    19  		resource *v1.ResourceInstance
    20  		action   proto.Event_Type
    21  	}{
    22  		{
    23  			name:     "should save DiscoveryAgent",
    24  			hasError: false,
    25  			action:   proto.Event_UPDATED,
    26  			resource: &v1.ResourceInstance{
    27  				ResourceMeta: v1.ResourceMeta{
    28  					Name:  "name",
    29  					Title: "title",
    30  					Metadata: v1.Metadata{
    31  						ID: "123",
    32  					},
    33  					GroupVersionKind: v1.GroupVersionKind{
    34  						GroupKind: v1.GroupKind{
    35  							Kind: discoveryAgent,
    36  						},
    37  					},
    38  				},
    39  			},
    40  		},
    41  		{
    42  			name:     "should save TraceabilityAgent",
    43  			hasError: false,
    44  			action:   proto.Event_UPDATED,
    45  			resource: &v1.ResourceInstance{
    46  				ResourceMeta: v1.ResourceMeta{
    47  					Name:  "name",
    48  					Title: "title",
    49  					Metadata: v1.Metadata{
    50  						ID: "123",
    51  					},
    52  					GroupVersionKind: v1.GroupVersionKind{
    53  						GroupKind: v1.GroupKind{
    54  							Kind: traceabilityAgent,
    55  						},
    56  					},
    57  				},
    58  			},
    59  		},
    60  		{
    61  			name:     "should save GovernanceAgent",
    62  			hasError: false,
    63  			action:   proto.Event_UPDATED,
    64  			resource: &v1.ResourceInstance{
    65  				ResourceMeta: v1.ResourceMeta{
    66  					Name:  "name",
    67  					Title: "title",
    68  					Metadata: v1.Metadata{
    69  						ID: "123",
    70  					},
    71  					GroupVersionKind: v1.GroupVersionKind{
    72  						GroupKind: v1.GroupKind{
    73  							Kind: governanceAgent,
    74  						},
    75  					},
    76  				},
    77  			},
    78  		},
    79  		{
    80  			name:     "should ignore processing agent resource",
    81  			hasError: true,
    82  			action:   proto.Event_UPDATED,
    83  			resource: &v1.ResourceInstance{
    84  				ResourceMeta: v1.ResourceMeta{
    85  					Name:  "name",
    86  					Title: "title",
    87  					Metadata: v1.Metadata{
    88  						ID: "123",
    89  					},
    90  					GroupVersionKind: v1.GroupVersionKind{
    91  						GroupKind: v1.GroupKind{
    92  							Kind: catalog.CategoryGVK().Kind,
    93  						},
    94  					},
    95  				},
    96  			},
    97  		},
    98  	}
    99  
   100  	for _, tc := range tests {
   101  		t.Run(tc.name, func(t *testing.T) {
   102  			resourceManager := &mockResourceManager{}
   103  
   104  			handler := NewAgentResourceHandler(resourceManager)
   105  
   106  			err := handler.Handle(NewEventContext(tc.action, nil, tc.resource.Kind, tc.resource.Name), nil, tc.resource)
   107  			if tc.hasError {
   108  				assert.Nil(t, err)
   109  				assert.Nil(t, resourceManager.resource)
   110  			} else {
   111  				assert.Nil(t, err)
   112  				assert.Equal(t, resourceManager.resource, tc.resource)
   113  			}
   114  		})
   115  	}
   116  
   117  }
   118  
   119  type EventSyncCache interface {
   120  	RebuildCache()
   121  }
   122  
   123  type mockResourceManager struct {
   124  	resource     *v1.ResourceInstance
   125  	rebuildCache resource.EventSyncCache
   126  }
   127  
   128  func (m *mockResourceManager) SetAgentResource(agentResource *v1.ResourceInstance) {
   129  	m.resource = agentResource
   130  }
   131  
   132  func (m *mockResourceManager) GetAgentResource() *v1.ResourceInstance {
   133  	return m.resource
   134  }
   135  
   136  func (m *mockResourceManager) OnConfigChange(_ config.CentralConfig, _ apic.Client) {}
   137  
   138  func (m *mockResourceManager) FetchAgentResource() error { return nil }
   139  
   140  func (m *mockResourceManager) UpdateAgentStatus(_, _, _ string) error { return nil }
   141  
   142  func (m *mockResourceManager) GetAgentResourceVersion() (string, error) {
   143  	return "", nil
   144  }
   145  
   146  func (m *mockResourceManager) AddUpdateAgentDetails(key, value string) {}
   147  
   148  func (m *mockResourceManager) SetRebuildCacheFunc(rebuildCache resource.EventSyncCache) {
   149  	m.rebuildCache = rebuildCache
   150  }