github.com/prebid/prebid-server@v0.275.0/server/server_test.go (about)

     1  package server
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  	"net/http"
     7  	"os"
     8  	"strconv"
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/prebid/prebid-server/config"
    13  	metricsconfig "github.com/prebid/prebid-server/metrics/config"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestServerShutdown(t *testing.T) {
    18  	server := &http.Server{}
    19  	ln := &mockListener{}
    20  
    21  	stopper := make(chan os.Signal)
    22  	done := make(chan struct{})
    23  	go shutdownAfterSignals(server, stopper, done)
    24  	go server.Serve(ln)
    25  
    26  	stopper <- os.Interrupt
    27  	<-done
    28  
    29  	// If the test didn't hang, then we know server.Shutdown really _did_ return, and shutdownAfterSignals
    30  	// passed the message along as expected.
    31  }
    32  
    33  func TestWait(t *testing.T) {
    34  	inbound := make(chan os.Signal)
    35  	chan1 := make(chan os.Signal)
    36  	chan2 := make(chan os.Signal)
    37  	chan3 := make(chan os.Signal)
    38  	done := make(chan struct{})
    39  
    40  	go forwardSignal(t, done, chan1)
    41  	go forwardSignal(t, done, chan2)
    42  	go forwardSignal(t, done, chan3)
    43  
    44  	go func(chan os.Signal) {
    45  		inbound <- os.Interrupt
    46  	}(inbound)
    47  
    48  	wait(inbound, done, chan1, chan2, chan3)
    49  	// If this doesn't hang, then wait() is sending and receiving messages as expected.
    50  }
    51  
    52  // forwardSignal is basically a working mock for shutdownAfterSignals().
    53  // It is used to test wait() effectively
    54  func forwardSignal(t *testing.T, outbound chan<- struct{}, inbound <-chan os.Signal) {
    55  	var s struct{}
    56  	sig := <-inbound
    57  	if sig != os.Interrupt {
    58  		t.Errorf("Unexpected signal: %s", sig.String())
    59  	}
    60  	outbound <- s
    61  }
    62  
    63  func TestNewSocketServer(t *testing.T) {
    64  	const mockSocket = "socket_addr:socket_port"
    65  	cfg := new(config.Configuration)
    66  	cfg.UnixSocketName = mockSocket
    67  
    68  	mockServer := &http.Server{
    69  		Addr:         cfg.UnixSocketName,
    70  		Handler:      nil,
    71  		ReadTimeout:  15 * time.Second,
    72  		WriteTimeout: 15 * time.Second,
    73  	}
    74  
    75  	ret := newSocketServer(cfg, nil)
    76  	assert.NotEqual(t, nil, ret, "ret : isNil()")
    77  	assert.Equal(t, mockServer.Addr, ret.Addr, fmt.Sprintf("Addr invalide: %v != %v",
    78  		ret.Addr, mockServer.Addr))
    79  	assert.Equal(t, mockServer.ReadTimeout, ret.ReadTimeout, fmt.Sprintf("ReadTimeout invalide: %v != %v",
    80  		ret.ReadTimeout, mockServer.ReadTimeout))
    81  	assert.Equal(t, mockServer.WriteTimeout, ret.WriteTimeout, fmt.Sprintf("WriteTimeout invalide: %v != %v",
    82  		ret.WriteTimeout, mockServer.WriteTimeout))
    83  
    84  	if ret != nil {
    85  		ret.Close()
    86  	}
    87  }
    88  
    89  func TestNewMainServer(t *testing.T) {
    90  	const (
    91  		mockPort    = 8000         // chose your socket_port
    92  		mockAddress = "prebid.com" // chose your socket_address
    93  	)
    94  	cfg := new(config.Configuration)
    95  	cfg.Port = mockPort
    96  	cfg.Host = mockAddress
    97  
    98  	mockServer := &http.Server{
    99  		Addr:         fmt.Sprintf("%s:%d", mockAddress, mockPort),
   100  		Handler:      nil,
   101  		ReadTimeout:  15 * time.Second,
   102  		WriteTimeout: 15 * time.Second,
   103  	}
   104  
   105  	ret := newMainServer(cfg, nil)
   106  	assert.NotEqual(t, nil, ret, "ret : isNil()")
   107  	assert.Equal(t, ret.Addr, mockServer.Addr, fmt.Sprintf("Addr invalide: %v != %v",
   108  		ret.Addr, mockServer.Addr))
   109  	assert.Equal(t, ret.ReadTimeout, mockServer.ReadTimeout,
   110  		fmt.Sprintf("ReadTimeout invalide: %v != %v", ret.ReadTimeout, mockServer.ReadTimeout))
   111  	assert.Equal(t, ret.WriteTimeout, mockServer.WriteTimeout,
   112  		fmt.Sprintf("WriteTimeout invalide: %v != %v", ret.WriteTimeout, mockServer.WriteTimeout))
   113  
   114  	if ret != nil {
   115  		ret.Close()
   116  	}
   117  }
   118  
   119  func TestNewTCPListener(t *testing.T) {
   120  	const mockAddress = ":8000" //:chose your socket_port
   121  
   122  	ret, err := newTCPListener(mockAddress, nil)
   123  	assert.Equal(t, nil, err, fmt.Sprintf("err_ : %v", err))
   124  	assert.NotEqual(t, nil, ret, "ret : isNil()")
   125  
   126  	if ret != nil {
   127  		ret.Close()
   128  	}
   129  }
   130  
   131  func TestNewUnixListener(t *testing.T) {
   132  	const mockFile = "file_referer" // chose your file_referer
   133  
   134  	ret, err := newUnixListener(mockFile, nil)
   135  	assert.Equal(t, nil, err, "err_ : NOT-Nil()")
   136  	assert.NotEqual(t, nil, ret, "ret : isNil()")
   137  
   138  	if ret != nil {
   139  		ret.Close()
   140  	}
   141  }
   142  
   143  func TestNewAdminServer(t *testing.T) {
   144  	const (
   145  		mockHost  = "prebid.com" // chose your host
   146  		mockAdmin = 6060         // chose your admin_port
   147  	)
   148  	cfg := new(config.Configuration)
   149  	cfg.Host = mockHost
   150  	cfg.AdminPort = mockAdmin
   151  
   152  	mockServer := &http.Server{
   153  		Addr:    cfg.Host + ":" + strconv.Itoa(cfg.AdminPort),
   154  		Handler: nil,
   155  	}
   156  
   157  	ret := newAdminServer(cfg, nil)
   158  	assert.NotEqual(t, nil, ret, "ret : isNil()")
   159  	assert.Equal(t, mockServer.Addr, ret.Addr, fmt.Sprintf("Addr invalide: %v != %v",
   160  		ret.Addr, mockServer.Addr))
   161  
   162  	if ret != nil {
   163  		ret.Close()
   164  	}
   165  }
   166  
   167  func TestRunServer(t *testing.T) {
   168  	const mockName = "mockServer_name"
   169  
   170  	err := runServer(nil, mockName, nil)
   171  	assert.NotEqual(t, nil, err, "runServer(nil, 'mockName', nil) : didn't trigger any error.")
   172  
   173  	s := http.Server{}
   174  	err = runServer(&s, mockName, nil)
   175  	assert.NotEqual(t, nil, err, "runServer(not_nil, 'mockName', nil) : didn't trigger any error.")
   176  
   177  	var l net.Listener
   178  	l, _ = net.Listen("error", ":8000")
   179  	err = runServer(&s, mockName, l)
   180  	assert.NotEqual(t, nil, err, "Listen('error', ':8000') : didn't trigger any error.")
   181  }
   182  
   183  func TestListen(t *testing.T) {
   184  	const name = "TestListen"
   185  	var (
   186  		handler, adminHandler http.Handler
   187  
   188  		metrics = new(metricsconfig.DetailedMetricsEngine)
   189  		cfg     = &config.Configuration{
   190  			Host:             "prebid.com",
   191  			AdminPort:        6060,
   192  			Port:             8000,
   193  			UnixSocketEnable: false,
   194  			UnixSocketName:   "prebid_socket",
   195  			EnableGzip:       false,
   196  		}
   197  	)
   198  
   199  	err := Listen(cfg, handler, adminHandler, metrics)
   200  	assert.NotEqual(t, nil, err, "err : isNil()")
   201  }