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

     1  package handler
     2  
     3  import (
     4  	"testing"
     5  
     6  	agentcache "github.com/Axway/agent-sdk/pkg/agent/cache"
     7  	v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1"
     8  	mv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/management/v1alpha1"
     9  	"github.com/Axway/agent-sdk/pkg/config"
    10  	"github.com/Axway/agent-sdk/pkg/watchmanager/proto"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  type mockWatchTopicFeatures struct {
    15  	filterList []config.ResourceFilter
    16  }
    17  
    18  func (m *mockWatchTopicFeatures) GetWatchResourceFilters() []config.ResourceFilter {
    19  	return m.filterList
    20  }
    21  
    22  func createWatchResource(group, kind, id, name string) *v1.ResourceInstance {
    23  	return &v1.ResourceInstance{
    24  		ResourceMeta: v1.ResourceMeta{
    25  			GroupVersionKind: v1.GroupVersionKind{
    26  				GroupKind: v1.GroupKind{
    27  					Group: group,
    28  					Kind:  kind,
    29  				},
    30  			},
    31  			Metadata: v1.Metadata{
    32  				ID: id,
    33  			},
    34  			Name: name,
    35  		},
    36  	}
    37  }
    38  
    39  func TestWatchResourceHandler(t *testing.T) {
    40  	features := &mockWatchTopicFeatures{filterList: []config.ResourceFilter{
    41  		{
    42  			Group:            mv1.CredentialGVK().Group,
    43  			Kind:             mv1.CredentialGVK().Kind,
    44  			Name:             "*",
    45  			IsCachedResource: true,
    46  			EventTypes:       []config.ResourceEventType{"created"},
    47  			Scope: &config.ResourceScope{
    48  				Kind: mv1.EnvironmentGVK().Kind,
    49  				Name: "test-env",
    50  			},
    51  		},
    52  	}}
    53  
    54  	cm := agentcache.NewAgentCacheManager(&config.CentralConfiguration{}, false)
    55  	handler := NewWatchResourceHandler(cm, features)
    56  
    57  	res := createWatchResource(mv1.SecretGVK().Group, mv1.SecretGVK().Kind, "secret-id-1", "secret-name-1")
    58  	// not cached resource
    59  	err := handler.Handle(NewEventContext(proto.Event_CREATED, nil, res.Kind, res.Name), nil, res)
    60  	assert.Nil(t, err)
    61  	assert.Equal(t, []string{}, cm.GetWatchResourceCacheKeys(mv1.SecretGVK().Group, mv1.SecretGVK().Kind))
    62  	cachedRes := cm.GetWatchResourceByID(mv1.SecretGVK().Group, mv1.SecretGVK().Kind, "credential-id-1")
    63  	assert.Empty(t, cachedRes)
    64  
    65  	res = createWatchResource(mv1.CredentialGVK().Group, mv1.CredentialGVK().Kind, "credential-id-1", "credential-name-1")
    66  	err = handler.Handle(NewEventContext(proto.Event_CREATED, nil, res.Kind, res.Name), nil, res)
    67  	assert.Nil(t, err)
    68  	cachedGroupKindKeys := cm.GetWatchResourceCacheKeys(mv1.CredentialGVK().Group, mv1.CredentialGVK().Kind)
    69  	assert.NotEqual(t, []string{}, cachedGroupKindKeys)
    70  	cachedRes = cm.GetWatchResourceByID(mv1.CredentialGVK().Group, mv1.CredentialGVK().Kind, "credential-id-1")
    71  	assert.NotEmpty(t, cachedRes)
    72  
    73  	cachedRes = cm.GetWatchResourceByName(mv1.CredentialGVK().Group, mv1.CredentialGVK().Kind, "credential-name-1")
    74  	assert.NotNil(t, cachedRes)
    75  
    76  	err = handler.Handle(NewEventContext(proto.Event_DELETED, nil, res.Kind, res.Name), nil, res)
    77  	assert.Nil(t, err)
    78  
    79  	cachedRes = cm.GetWatchResourceByKey(cachedGroupKindKeys[0])
    80  	assert.Nil(t, cachedRes)
    81  }