From 92fc12b9bc51bf44d6ca5a70638e334fbaff28a2 Mon Sep 17 00:00:00 2001 From: Frank Smit Date: Sat, 6 Apr 2019 11:59:31 +0200 Subject: [PATCH 1/2] Fix handlers in test and user httptest server. --- server_test.go | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/server_test.go b/server_test.go index 17830e7..3135a3a 100644 --- a/server_test.go +++ b/server_test.go @@ -2,7 +2,7 @@ package msgkit import ( "fmt" - "net/http" + "net/http/httptest" "net/url" "sync" "sync/atomic" @@ -20,38 +20,43 @@ func TestHandler(t *testing.T) { s := NewServer(nil) // create handlers - s.Handle("h0", func(so *Socket, msg *Message) { so.Send("h0", msg.Data) }) - s.Handle("h1", func(so *Socket, msg *Message) { so.Send("h1", msg.Data) }) - s.Handle("h2", func(so *Socket, msg *Message) { so.Send("h2", msg.Data) }) + s.Handle("h0", func(so *Socket, msg *Message) (err error) { + so.Send("h0", msg.Data) + return + }) + s.Handle("h1", func(so *Socket, msg *Message) (err error) { + so.Send("h1", msg.Data) + return + }) + s.Handle("h2", func(so *Socket, msg *Message) (err error) { + so.Send("h2", msg.Data) + return + }) // count the number of opens var opened int32 - s.Handle("connected", func(_ *Socket, _ *Message) { atomic.AddInt32(&opened, 1) }) + s.Handle("connected", func(_ *Socket, _ *Message) (err error) { + atomic.AddInt32(&opened, 1) + return + }) // count/wait on all closes var cwg sync.WaitGroup cwg.Add(connsN) - s.Handle("disconnected", func(_ *Socket, _ *Message) { cwg.Done() }) + s.Handle("disconnected", func(_ *Socket, _ *Message) (err error) { + cwg.Done() + return + }) - srv := &http.Server{Addr: addr} - http.Handle("/ws", s) + ts := httptest.NewServer(s) + defer ts.Close() - var swg sync.WaitGroup - swg.Add(1) - go func() { - defer swg.Done() - if err := srv.ListenAndServe(); err != nil { - if err.Error() != "http: Server closed" { - panic(err) - } - } - }() var wg sync.WaitGroup wg.Add(connsN) for i := 0; i < connsN; i++ { go func(i int) { defer wg.Done() - u := url.URL{Scheme: "ws", Host: addr, Path: "/ws"} + u := url.URL{Scheme: "ws", Host: ts.Listener.Addr().String(), Path: "/ws"} c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { panic(err) @@ -80,12 +85,10 @@ func TestHandler(t *testing.T) { } }(i) } + wg.Wait() - if err := srv.Shutdown(nil); err != nil { - t.Fatal(err) - } - swg.Wait() cwg.Wait() + if opened != connsN { t.Fatalf("expected '%v', got '%v'", connsN, opened) } From 99db81edcd6bb1a111ec4895fa2a4701f872101b Mon Sep 17 00:00:00 2001 From: Frank Smit Date: Sat, 6 Apr 2019 12:07:19 +0200 Subject: [PATCH 2/2] Remove unused const in test. --- server_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/server_test.go b/server_test.go index 3135a3a..4728e9a 100644 --- a/server_test.go +++ b/server_test.go @@ -13,7 +13,6 @@ import ( ) func TestHandler(t *testing.T) { - const addr = "localhost:17892" const connsN = 10 // number of concurrent sockets const msgsN = 1000 // number of messages per socket