Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mafredri committed Aug 21, 2024
1 parent 12cbf54 commit f86e67b
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
34 changes: 34 additions & 0 deletions accept_go120_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
//go:build !js && go1.20

package websocket

import (
"bufio"
"errors"
"net"
"net/http"
"net/http/httptest"
"testing"

"github.com/coder/websocket/internal/test/assert"
)

func TestAccept_hijackerHTTPResponseControllerCompatibility(t *testing.T) {
t.Parallel()

rr := httptest.NewRecorder()
w := mockUnwrapper{
ResponseWriter: rr,
unwrap: func() http.ResponseWriter {
return mockHijacker{
ResponseWriter: rr,
hijack: func() (conn net.Conn, writer *bufio.ReadWriter, err error) {
return nil, nil, errors.New("haha")
},
}
},
}

_, _, err := http.NewResponseController(w).Hijack()
assert.Contains(t, err, "haha")
}
38 changes: 38 additions & 0 deletions accept_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,33 @@ func TestAccept(t *testing.T) {
_, err := Accept(w, r, nil)
assert.Contains(t, err, `failed to hijack connection`)
})

t.Run("wrapperHijackerIsUnwrapped", func(t *testing.T) {
t.Parallel()

rr := httptest.NewRecorder()
w := mockUnwrapper{
ResponseWriter: rr,
unwrap: func() http.ResponseWriter {
return mockHijacker{
ResponseWriter: rr,
hijack: func() (conn net.Conn, writer *bufio.ReadWriter, err error) {
return nil, nil, errors.New("haha")
},
}
},
}

r := httptest.NewRequest("GET", "/", nil)
r.Header.Set("Connection", "Upgrade")
r.Header.Set("Upgrade", "websocket")
r.Header.Set("Sec-WebSocket-Version", "13")
r.Header.Set("Sec-WebSocket-Key", xrand.Base64(16))

_, err := Accept(w, r, nil)
assert.Contains(t, err, "failed to hijack connection")
})

t.Run("closeRace", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -534,3 +561,14 @@ var _ http.Hijacker = mockHijacker{}
func (mj mockHijacker) Hijack() (net.Conn, *bufio.ReadWriter, error) {
return mj.hijack()
}

type mockUnwrapper struct {
http.ResponseWriter
unwrap func() http.ResponseWriter
}

var _ rwUnwrapper = mockUnwrapper{}

func (mu mockUnwrapper) Unwrap() http.ResponseWriter {
return mu.unwrap()
}

0 comments on commit f86e67b

Please sign in to comment.