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  }