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

     1  package harvester
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"net/url"
     8  	"strconv"
     9  	"testing"
    10  
    11  	"github.com/Axway/agent-sdk/pkg/watchmanager/proto"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  type mockHTTPServer struct {
    16  	harvesterResponse interface{}
    17  	responseStatus    int
    18  
    19  	server *httptest.Server
    20  }
    21  
    22  func newMockHTTPServer() *mockHTTPServer {
    23  	mockServer := &mockHTTPServer{}
    24  	mockServer.server = httptest.NewServer(http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
    25  		if mockServer.responseStatus == 0 {
    26  			mockServer.responseStatus = 200
    27  		}
    28  
    29  		resp.WriteHeader(mockServer.responseStatus)
    30  		if mockServer.responseStatus >= 400 {
    31  			resp.WriteHeader(mockServer.responseStatus)
    32  			return
    33  		}
    34  		body, _ := json.Marshal(mockServer.harvesterResponse)
    35  		resp.Write(body)
    36  	}))
    37  	return mockServer
    38  }
    39  
    40  func TestReceiveSyncEvents(t *testing.T) {
    41  	s := newMockHTTPServer()
    42  	defer s.server.Close()
    43  	mockServerURL, _ := url.Parse(s.server.URL)
    44  	port, _ := strconv.Atoi(mockServerURL.Port())
    45  	cfg := &Config{
    46  		Protocol: mockServerURL.Scheme,
    47  		Host:     mockServerURL.Hostname(),
    48  		Port:     uint32(port),
    49  		TenantID: "12345",
    50  		TokenGetter: func() (string, error) {
    51  			return "", nil
    52  		},
    53  		PageSize: 2,
    54  	}
    55  	client := NewClient(cfg)
    56  
    57  	eventCh := make(chan *proto.Event, 1)
    58  	stopCh := make(chan bool)
    59  	events := make([]*proto.Event, 0)
    60  	go func() {
    61  		for {
    62  			select {
    63  			case <-stopCh:
    64  				return
    65  			case event := <-eventCh:
    66  				events = append(events, event)
    67  			}
    68  		}
    69  	}()
    70  	s.responseStatus = 200
    71  	s.harvesterResponse = []resourceEntryExternalEvent{}
    72  	_, err := client.ReceiveSyncEvents("/test", 1, eventCh)
    73  	assert.Nil(t, err)
    74  	stopCh <- true
    75  	assert.Equal(t, 0, len(events))
    76  }