Skip to content

Commit

Permalink
Upgrade dependencies and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
slytomcat committed Sep 26, 2024
1 parent 792a522 commit 51cc40e
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 41 deletions.
4 changes: 3 additions & 1 deletion echo-server/echo-server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package main

import (
"encoding/json"
"errors"
"fmt"
"net/http"
"net/url"
"os"
"os/signal"
Expand Down Expand Up @@ -89,7 +91,7 @@ func DoMain(args []string) {
}()
fmt.Printf("starting echo server on %s...\n", u.Host)
err = srv.ListenAndServe()
if err.Error() != "http: Server closed" {
if !errors.Is(err, http.ErrServerClosed) {
fmt.Println(err)
os.Exit(1)
}
Expand Down
10 changes: 5 additions & 5 deletions echo-server/echo-server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ func TestEchoServer(t *testing.T) {
require.NoError(t, err)
cmd.Env = append(os.Environ(), envName+"=1")
require.NoError(t, cmd.Start())
time.Sleep(50 * time.Millisecond)
dialer := websocket.Dialer{}
conn, _, err := dialer.Dial(defaultUrl, nil)
if err != nil {
panic(err)
}
var conn *websocket.Conn
require.Eventually(t, func() bool {
conn, _, err = dialer.Dial(defaultUrl, nil)
return err == nil
}, 50*time.Millisecond, 5*time.Millisecond)
testCases := []struct {
name string
toSend string
Expand Down
9 changes: 4 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ go 1.22.1

require (
github.com/chzyer/readline v1.5.1
github.com/fatih/color v1.16.0
github.com/gorilla/websocket v1.5.1
github.com/spf13/cobra v1.8.0
github.com/fatih/color v1.17.0
github.com/gorilla/websocket v1.5.3
github.com/spf13/cobra v1.8.1
github.com/stretchr/testify v1.9.0
)

Expand All @@ -17,7 +17,6 @@ require (
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/net v0.20.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/sys v0.25.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
20 changes: 9 additions & 11 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04=
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
Expand All @@ -21,19 +21,17 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
Expand Down
1 change: 0 additions & 1 deletion mockServer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ func TestMockServerPing(t *testing.T) {
conn.ReadMessage()
require.Greater(t, atomic.LoadInt64(&pingCount), int64(3))
s.Close()
time.Sleep(20 * time.Millisecond)
}

func TestMockServerDoubleStart(t *testing.T) {
Expand Down
71 changes: 53 additions & 18 deletions server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,18 @@ func TestHandshakeServerError(t *testing.T) {
s := NewServer(":8080")
require.NotNil(t, s)
s.Upgrader.CheckOrigin = func(r *http.Request) bool { return false }
defer s.WSHandleFunc("/", EchoHandler)
go func() { s.ListenAndServe() }()
time.Sleep(50 * time.Millisecond)
s.WSHandleFunc("/", EchoHandler)
errCh := make(chan error, 2)
go func() { errCh <- s.ListenAndServe() }()
require.Never(t, func() bool {
select {
case e := <-errCh:
t.Log(e)
return true
default:
return false
}
}, 50*time.Millisecond, 10*time.Millisecond)
defer s.Close()
dialer := websocket.Dialer{}
ctx, cancel := context.WithCancel(context.Background())
Expand All @@ -70,15 +79,23 @@ func TestHandshakeClientError(t *testing.T) {
require.NotNil(t, s)
s.Upgrader.CheckOrigin = func(r *http.Request) bool { return false }
s.WSHandleFunc("/", EchoHandler)
go func() { s.ListenAndServe() }()
time.Sleep(50 * time.Millisecond)
errCh := make(chan error, 2)
go func() { errCh <- s.ListenAndServe() }()
require.Never(t, func() bool {
select {
case e := <-errCh:
t.Log(e)
return true
default:
return false
}
}, 50*time.Millisecond, 10*time.Millisecond)
defer s.Close()
dialer := websocket.Dialer{HandshakeTimeout: time.Nanosecond}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
_, _, err := dialer.DialContext(ctx, fullURL, nil)
require.EqualError(t, err, "dial tcp :8080: i/o timeout")

}

func TestRegularHandler(t *testing.T) {
Expand All @@ -88,12 +105,20 @@ func TestRegularHandler(t *testing.T) {
s.HandleFunc("/ok", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
go func() { s.ListenAndServe() }()
time.Sleep(50 * time.Millisecond)
errCh := make(chan error, 2)
go func() { errCh <- s.ListenAndServe() }()
require.Never(t, func() bool {
select {
case e := <-errCh:
t.Log(e)
return true
default:
return false
}
}, 50*time.Millisecond, 10*time.Millisecond)
resp, err := http.DefaultClient.Get("http://localhost:8080/ok")
require.NoError(t, err)
require.Equal(t, http.StatusOK, resp.StatusCode)

}

func TestForEachConnection(t *testing.T) {
Expand All @@ -102,16 +127,25 @@ func TestForEachConnection(t *testing.T) {
require.NotNil(t, s)
defer s.Close()
s.WSHandleFunc("/", EchoHandler)
go func() { s.ListenAndServe() }()
time.Sleep(50 * time.Millisecond)
errCh := make(chan error, 2)
go func() { errCh <- s.ListenAndServe() }()
require.Never(t, func() bool {
select {
case e := <-errCh:
t.Log(e)
return true
default:
return false
}
}, 50*time.Millisecond, 10*time.Millisecond)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sentMsg := []byte("ping")
readers := 7
readCh := make(chan []byte, readers)
wg := sync.WaitGroup{}
wg.Add(readers)
for i := 0; i < readers; i++ {
for range readers {
go func() {
defer wg.Done()
dialer := websocket.Dialer{}
Expand All @@ -122,23 +156,24 @@ func TestForEachConnection(t *testing.T) {
readCh <- msg
}()
}
time.Sleep(50 * time.Millisecond)
require.Eventually(t, func() bool {
cnt := 0
s.connections.Range(func(_, _ any) bool { cnt++; return true })
return cnt == readers
}, 10*time.Millisecond, 2*time.Millisecond)
s.ForEachConnection(func(c *websocket.Conn) {
err := c.WriteMessage(websocket.TextMessage, sentMsg)
assert.NoError(t, err)
})
wg.Wait()
close(readCh)
cnt := 0
require.Len(t, readCh, readers)
for msg := range readCh {
assert.Equal(t, sentMsg, msg)
cnt++
}
require.Equal(t, readers, cnt)
err := s.Close()
require.NoError(t, err)
time.Sleep(5 * time.Millisecond)
cnt = 0
cnt := 0
s.connections.Range(func(_, _ any) bool {
cnt++
return true
Expand Down

0 comments on commit 51cc40e

Please sign in to comment.