github.com/vmware/transport-go@v1.3.4/plank/pkg/server/initialize_rest_bridge_override_test.go (about) 1 package server 2 3 import ( 4 "fmt" 5 "github.com/google/uuid" 6 "github.com/sirupsen/logrus" 7 "github.com/stretchr/testify/assert" 8 "github.com/vmware/transport-go/bus" 9 "github.com/vmware/transport-go/model" 10 "github.com/vmware/transport-go/plank/services" 11 "github.com/vmware/transport-go/plank/utils" 12 "github.com/vmware/transport-go/service" 13 "net/http" 14 "os" 15 "path/filepath" 16 "sync" 17 "syscall" 18 "testing" 19 "time" 20 ) 21 22 func TestInitialize_DebugLogging(t *testing.T) { 23 // arrange 24 testRoot := filepath.Join(os.TempDir(), "plank-tests") 25 _ = os.MkdirAll(testRoot, 0755) 26 defer os.RemoveAll(testRoot) 27 28 cfg := GetBasicTestServerConfig(testRoot, "stdout", "stdout", "stderr", GetTestPort(), true) 29 cfg.Debug = true 30 31 // act 32 _, _, _ = CreateTestServer(cfg) 33 34 // assert 35 assert.EqualValues(t, logrus.DebugLevel, utils.Log.GetLevel()) 36 } 37 38 func TestInitialize_RestBridgeOverride(t *testing.T) { 39 // arrange 40 newBus := bus.ResetBus() 41 service.ResetServiceRegistry() 42 testRoot := filepath.Join(os.TempDir(), "plank-tests") 43 _ = os.MkdirAll(testRoot, 0755) 44 defer os.RemoveAll(testRoot) 45 defer service.GetServiceRegistry().UnregisterService(services.PingPongServiceChan) 46 47 cfg := GetBasicTestServerConfig(testRoot, "stdout", "stdout", "stderr", GetTestPort(), true) 48 baseUrl, _, testServerInterface := CreateTestServer(cfg) 49 testServer := testServerInterface.(*platformServer) 50 testServer.eventbus = newBus 51 52 // register ping pong service with default bridge points of /rest/ping-pong, /rest/ping-pong2 and /rest/ping-pong/{from}/{to}/{message} 53 testServerInterface.RegisterService(services.NewPingPongService(), services.PingPongServiceChan) 54 55 // start server 56 syschan := make(chan os.Signal) 57 wg := sync.WaitGroup{} 58 wg.Add(1) 59 go testServerInterface.StartServer(syschan) 60 61 // act 62 // replace existing rest bridges with a new config 63 oldRouter := testServer.router 64 65 // assert 66 RunWhenServerReady(t, newBus, func(t2 *testing.T) { 67 _ = newBus.SendResponseMessage(service.LifecycleManagerChannelName, &service.SetupRESTBridgeRequest{ 68 ServiceChannel: services.PingPongServiceChan, 69 Override: true, 70 Config: []*service.RESTBridgeConfig{ 71 { 72 ServiceChannel: services.PingPongServiceChan, 73 Uri: "/ping-new", 74 Method: "GET", 75 FabricRequestBuilder: func(w http.ResponseWriter, r *http.Request) model.Request { 76 return model.Request{Id: &uuid.UUID{}, Request: "ping-get", Payload: r.URL.Query().Get("message")} 77 }, 78 }, 79 }, 80 }, newBus.GetId()) 81 82 // router instance should have been swapped 83 time.Sleep(1 * time.Second) 84 assert.NotEqual(t, testServer.router, oldRouter) 85 86 // old endpoints should 404 87 rsp, err := http.Get(fmt.Sprintf("%s/rest/ping-pong", baseUrl)) 88 assert.Nil(t, err) 89 assert.EqualValues(t, 404, rsp.StatusCode) 90 91 rsp, err = http.Get(fmt.Sprintf("%s/rest/ping-pong2", baseUrl)) 92 assert.Nil(t, err) 93 assert.EqualValues(t, 404, rsp.StatusCode) 94 95 rsp, err = http.Get(fmt.Sprintf("%s/rest/ping-pong/a/b/c", baseUrl)) 96 assert.Nil(t, err) 97 assert.EqualValues(t, 404, rsp.StatusCode) 98 99 // new endpoints should respond successfully 100 rsp, err = http.Get(fmt.Sprintf("%s/ping-new", baseUrl)) 101 assert.Nil(t, err) 102 assert.EqualValues(t, 200, rsp.StatusCode) 103 104 syschan <- syscall.SIGINT 105 wg.Done() 106 }) 107 108 wg.Wait() 109 }