@@ -23,6 +23,7 @@ import (
2323 "github.com/packethost/pkg/internal/testenv"
2424 "github.com/packethost/pkg/log"
2525 "github.com/stretchr/testify/require"
26+ assert "github.com/stretchr/testify/require"
2627 "google.golang.org/grpc"
2728 "google.golang.org/grpc/credentials"
2829 pb "google.golang.org/grpc/examples/helloworld/helloworld"
@@ -65,7 +66,7 @@ func TestDefaultsAndOrdering(t *testing.T) {
6566 s , err := NewServer (l , srv , pre1 , Register (reg1 ), pre2 , Register (reg2 ))
6667 assert .NoError (err )
6768 assert .NotNil (s )
68- assert .Equal (s .port , 8080 )
69+ assert .Equal (s .Port () , 8080 )
6970
7071 // ensure order
7172 assert .True (pre1I > 0 )
@@ -84,7 +85,7 @@ func TestPort(t *testing.T) {
8485 s , err := NewServer (l , defSrv )
8586 assert .NoError (err )
8687 assert .NotNil (s )
87- assert .Equal (s .port , 8080 )
88+ assert .Equal (s .Port () , 8080 )
8889 assert .Equal (s .Port (), 8080 )
8990
9091 os .Setenv ("GRPC_PORT" , "4242" )
@@ -93,13 +94,13 @@ func TestPort(t *testing.T) {
9394 s , err = NewServer (l , defSrv )
9495 assert .NoError (err )
9596 assert .NotNil (s )
96- assert .Equal (s .port , 4242 )
97+ assert .Equal (s .Port () , 4242 )
9798 assert .Equal (s .Port (), 4242 )
9899
99100 s , err = NewServer (l , defSrv , Port (2424 ))
100101 assert .NoError (err )
101102 assert .NotNil (s )
102- assert .Equal (s .port , 2424 )
103+ assert .Equal (s .Port () , 2424 )
103104 assert .Equal (s .Port (), 2424 )
104105
105106 os .Setenv ("GRPC_PORT" , "0" )
@@ -245,7 +246,7 @@ func TestX509(t *testing.T) {
245246 assert .NoError (err )
246247 assert .NotNil (s )
247248 serve (t , s , func () {
248- assert .NoError (connectGRPC (t , s .port , "" ))
249+ assert .NoError (connectGRPC (t , s .Port () , "" ))
249250 })
250251 })
251252
@@ -262,8 +263,8 @@ func TestX509(t *testing.T) {
262263 assert .NoError (err )
263264 assert .NotNil (s )
264265 serve (t , s , func () {
265- assert .Error (connectGRPC (t , s .port , "" ))
266- assert .NoError (connectGRPC (t , s .port , certE ))
266+ assert .Error (connectGRPC (t , s .Port () , "" ))
267+ assert .NoError (connectGRPC (t , s .Port () , certE ))
267268 })
268269 })
269270
@@ -276,9 +277,9 @@ func TestX509(t *testing.T) {
276277 assert .NoError (err )
277278 assert .NotNil (s )
278279 serve (t , s , func () {
279- assert .Error (connectGRPC (t , s .port , "" ))
280- assert .Error (connectGRPC (t , s .port , certE ))
281- assert .NoError (connectGRPC (t , s .port , certKP ))
280+ assert .Error (connectGRPC (t , s .Port () , "" ))
281+ assert .Error (connectGRPC (t , s .Port () , certE ))
282+ assert .NoError (connectGRPC (t , s .Port () , certKP ))
282283 })
283284 })
284285
@@ -292,10 +293,10 @@ func TestX509(t *testing.T) {
292293 assert .NoError (err )
293294 assert .NotNil (s )
294295 serve (t , s , func () {
295- assert .Error (connectGRPC (t , s .port , "" ))
296- assert .Error (connectGRPC (t , s .port , certE ))
297- assert .Error (connectGRPC (t , s .port , certKP ))
298- assert .NoError (connectGRPC (t , s .port , certLKP ))
296+ assert .Error (connectGRPC (t , s .Port () , "" ))
297+ assert .Error (connectGRPC (t , s .Port () , certE ))
298+ assert .Error (connectGRPC (t , s .Port () , certKP ))
299+ assert .NoError (connectGRPC (t , s .Port () , certLKP ))
299300 })
300301 })
301302
@@ -308,3 +309,52 @@ func TestX509(t *testing.T) {
308309 assert .Nil (s )
309310 })
310311}
312+
313+ func TestListen (t * testing.T ) {
314+ t .Run ("invalid port fails" , func (t * testing.T ) {
315+ s := Server {port : - 1 }
316+ assert .Error (t , s .listen ())
317+ assert .Nil (t , s .listener )
318+ })
319+ t .Run ("port 0 updates .port" , func (t * testing.T ) {
320+ s := Server {}
321+ assert .NoError (t , s .listen ())
322+ assert .NotNil (t , s .listener )
323+ defer s .listener .Close ()
324+
325+ assert .NotZero (t , s .Port ())
326+ })
327+ t .Run ("can run 2 servers by using port 0" , func (t * testing.T ) {
328+ s1 := Server {}
329+ assert .NoError (t , s1 .listen ())
330+ assert .NotNil (t , s1 .listener )
331+ defer s1 .listener .Close ()
332+ assert .NotZero (t , s1 .port )
333+
334+ s2 := Server {}
335+ assert .NoError (t , s2 .listen ())
336+ assert .NotNil (t , s2 .listener )
337+ defer s2 .listener .Close ()
338+ assert .NotZero (t , s2 .port )
339+
340+ assert .NotEqual (t , s1 .port , s2 .port )
341+ })
342+ t .Run ("Serve calls s.listen if necessary" , func (t * testing.T ) {
343+ l := log .Test (t , t .Name ())
344+
345+ s , err := NewServer (l , defSrv )
346+ assert .NoError (t , err )
347+ assert .NotNil (t , s )
348+
349+ go func () {
350+ if err := s .Serve (); err != nil {
351+ panic (err )
352+ }
353+ }()
354+
355+ for port := s .Port (); port == 0 ; port = s .Port () {
356+ time .Sleep (100 * time .Microsecond )
357+ }
358+ assert .NoError (t , connectGRPC (t , s .Port (), "" ))
359+ })
360+ }
0 commit comments