github.com/vmware/transport-go@v1.3.4/service/service_lifecycle_manager_test.go (about)

     1  package service
     2  
     3  import (
     4  	"github.com/stretchr/testify/assert"
     5  	"github.com/vmware/transport-go/model"
     6  	"net/http"
     7  	"sync"
     8  	"testing"
     9  )
    10  
    11  func TestServiceLifecycleManager(t *testing.T) {
    12  	// arrange
    13  	sr := newTestServiceRegistry()
    14  
    15  	// act
    16  	lcm := newTestServiceLifecycleManager(sr)
    17  
    18  	// assert
    19  	assert.NotNil(t, lcm)
    20  }
    21  
    22  func TestServiceLifecycleManager_GetServiceHooks(t *testing.T) {
    23  	// arrange
    24  	sr := newTestServiceRegistry()
    25  	lcm := newTestServiceLifecycleManager(sr)
    26  	svc := &mockLifecycleHookEnabledService{}
    27  	sr.RegisterService(svc, "another-test-channel")
    28  
    29  	// act
    30  	hooks := lcm.GetServiceHooks("another-test-channel")
    31  
    32  	// assert
    33  	assert.NotNil(t, hooks)
    34  }
    35  
    36  func TestServiceLifecycleManager_GetServiceHooks_NoSuchService(t *testing.T) {
    37  	// arrange
    38  	sr := newTestServiceRegistry()
    39  	lcm := newTestServiceLifecycleManager(sr)
    40  
    41  	// act
    42  	hooks := lcm.GetServiceHooks("i-don-t-exist")
    43  
    44  	// assert
    45  	assert.Nil(t, hooks)
    46  }
    47  
    48  func TestServiceLifecycleManager_GetServiceHooks_LifecycleHooksNotImplemented(t *testing.T) {
    49  	// arrange
    50  	sr := newTestServiceRegistry()
    51  	lcm := newTestServiceLifecycleManager(sr)
    52  	svc := &mockInitializableService{}
    53  	sr.RegisterService(svc, "test-channel")
    54  
    55  	// act
    56  	hooks := lcm.GetServiceHooks("test-channel")
    57  
    58  	// assert
    59  	assert.Nil(t, hooks)
    60  }
    61  
    62  func TestServiceLifecycleManager_OverrideRESTBridgeConfig_NoSuchService(t *testing.T) {
    63  	// arrange
    64  	sr := newTestServiceRegistry()
    65  	lcm := newTestServiceLifecycleManager(sr)
    66  
    67  	// act
    68  	err := lcm.OverrideRESTBridgeConfig("no-such-service", []*RESTBridgeConfig{})
    69  
    70  	// assert
    71  	assert.NotNil(t, err)
    72  }
    73  
    74  func TestServiceLifecycleManager_OverrideRESTBridgeConfig(t *testing.T) {
    75  	// arrange
    76  	wg := sync.WaitGroup{}
    77  	sr := newTestServiceRegistry()
    78  	lcm := newTestServiceLifecycleManager(sr)
    79  	sr.lifecycleManager = lcm.(*serviceLifecycleManager)
    80  	_ = sr.RegisterService(&mockLifecycleHookEnabledService{}, "another-test-channel")
    81  
    82  	// arrange: test payload
    83  	payload := &RESTBridgeConfig{
    84  		ServiceChannel:       "another-test-channel",
    85  		Uri:                  "/rest/new-uri",
    86  		Method:               http.MethodGet,
    87  		AllowHead:            false,
    88  		AllowOptions:         false,
    89  		FabricRequestBuilder: nil,
    90  	}
    91  
    92  	// arrange: set up a handler to expect to receive a payload that matches the test payload set above
    93  	stream, err := sr.bus.ListenStreamForDestination(LifecycleManagerChannelName, sr.bus.GetId())
    94  	assert.Nil(t, err)
    95  	defer stream.Close()
    96  
    97  	wg.Add(1)
    98  	stream.Handle(func(message *model.Message) {
    99  		req, parsed := message.Payload.(*SetupRESTBridgeRequest)
   100  		if !parsed {
   101  			assert.Fail(t, "should have expected *SetupRESTBridgeRequest payload")
   102  		}
   103  		// assert
   104  		assert.True(t, req.Override)
   105  		assert.EqualValues(t, "another-test-channel", req.ServiceChannel)
   106  		assert.EqualValues(t, payload, req.Config[0])
   107  		wg.Done()
   108  	}, func(err error) {
   109  		assert.Fail(t, "should not have errored", err)
   110  	})
   111  
   112  	// act
   113  	err = lcm.OverrideRESTBridgeConfig("another-test-channel", []*RESTBridgeConfig{payload})
   114  	assert.Nil(t, err)
   115  	wg.Wait()
   116  }