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

     1  package agent
     2  
     3  import (
     4  	"encoding/json"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/Axway/agent-sdk/pkg/agent/resource"
     9  	"github.com/Axway/agent-sdk/pkg/api"
    10  	apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1"
    11  	management "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/management/v1alpha1"
    12  	"github.com/Axway/agent-sdk/pkg/apic/mock"
    13  	"github.com/Axway/agent-sdk/pkg/config"
    14  	"github.com/Axway/agent-sdk/pkg/watchmanager/proto"
    15  	"github.com/stretchr/testify/assert"
    16  )
    17  
    18  func TestEventSync_pollMode(t *testing.T) {
    19  	cfg := createCentralCfg("https://abc.com", "mockenv")
    20  	err := Initialize(cfg)
    21  	cfg.AgentName = "Test-DA"
    22  	agentRes := createDiscoveryAgentRes("111", "Test-DA", "test-dataplane", "")
    23  
    24  	mc := &mock.Client{
    25  		ExecuteAPIMock: func(method, url string, queryParam map[string]string, buffer []byte) ([]byte, error) {
    26  			if method == api.PUT {
    27  				return buffer, nil
    28  			}
    29  			return json.Marshal(agentRes)
    30  		},
    31  		GetResourceMock: func(url string) (*apiv1.ResourceInstance, error) {
    32  			if strings.Contains(url, "/discoveryagents") {
    33  				return agentRes, nil
    34  			}
    35  			wt := management.NewWatchTopic("mock-wt")
    36  			ri, err := wt.AsInstance()
    37  			return ri, err
    38  		},
    39  	}
    40  
    41  	m, _ := resource.NewAgentResourceManager(cfg, mc, nil)
    42  	agent.agentResourceManager = m
    43  
    44  	InitializeForTest(mc)
    45  	assert.Nil(t, err)
    46  
    47  	es, err := NewEventSync()
    48  	assert.Nil(t, err)
    49  	assert.NotNil(t, es.watchTopic)
    50  	assert.NotNil(t, es.discoveryCache)
    51  	assert.NotNil(t, es.sequence)
    52  	assert.NotNil(t, es.harvester)
    53  
    54  	es.harvester = &mockHarvester{}
    55  	err = es.SyncCache()
    56  	assert.Nil(t, err)
    57  }
    58  
    59  func TestEventSync_streamMode(t *testing.T) {
    60  	cfg := createCentralCfg("https://abc.com", "mockenv")
    61  	cfg.GRPCCfg = config.GRPCConfig{
    62  		Enabled:  true,
    63  		Insecure: true,
    64  	}
    65  	err := Initialize(cfg)
    66  	agent.agentFeaturesCfg = &config.AgentFeaturesConfiguration{
    67  		ConnectToCentral:     true,
    68  		ProcessSystemSignals: true,
    69  		VersionChecker:       false,
    70  		PersistCache:         true,
    71  	}
    72  
    73  	cfg.AgentName = "Test-DA"
    74  	agentRes := createDiscoveryAgentRes("111", "Test-DA", "test-dataplane", "")
    75  	mc := &mock.Client{
    76  		ExecuteAPIMock: func(method, url string, queryParam map[string]string, buffer []byte) ([]byte, error) {
    77  			if method == api.PUT {
    78  				return buffer, nil
    79  			}
    80  			return json.Marshal(agentRes)
    81  		},
    82  		GetResourceMock: func(url string) (*apiv1.ResourceInstance, error) {
    83  			if strings.Contains(url, "/discoveryagents") {
    84  				return agentRes, nil
    85  			}
    86  			wt := management.NewWatchTopic("mock-wt")
    87  			ri, err := wt.AsInstance()
    88  			return ri, err
    89  		},
    90  	}
    91  
    92  	m, _ := resource.NewAgentResourceManager(cfg, mc, nil)
    93  	agent.agentResourceManager = m
    94  
    95  	InitializeForTest(mc)
    96  	assert.Nil(t, err)
    97  
    98  	es, err := NewEventSync()
    99  	assert.Nil(t, err)
   100  	assert.NotNil(t, es.watchTopic)
   101  	assert.NotNil(t, es.discoveryCache)
   102  	assert.NotNil(t, es.sequence)
   103  	assert.NotNil(t, es.harvester)
   104  
   105  	es.harvester = &mockHarvester{}
   106  	err = es.SyncCache()
   107  	assert.Nil(t, err)
   108  }
   109  
   110  type mockHarvester struct{}
   111  
   112  func (m mockHarvester) EventCatchUp(link string, events chan *proto.Event) error {
   113  	return nil
   114  }
   115  
   116  func (m mockHarvester) ReceiveSyncEvents(topicSelfLink string, sequenceID int64, eventCh chan *proto.Event) (int64, error) {
   117  	return 1, nil
   118  }