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 }