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 }