diff options
author | Fumitoshi Ukai <ukai@google.com> | 2010-03-23 18:09:24 -0700 |
---|---|---|
committer | Fumitoshi Ukai <ukai@google.com> | 2010-03-23 18:09:24 -0700 |
commit | 1c7cb5ef73e82c1a02af198d974053d4fed16f93 (patch) | |
tree | 82d41bd22791d6e207ac7b4df0c4d1855d7b86e1 /src/pkg/websocket/websocket_test.go | |
parent | d28183095a939d0342f7891cd3d4099efd5865e2 (diff) | |
download | golang-1c7cb5ef73e82c1a02af198d974053d4fed16f93.tar.gz |
websocket: implement new protocol
http://www.whatwg.org/specs/web-socket-protocol/
(draft of draft-hixie-thewebsocketprotocol-76)
draft-hixie-thewebsocketprotocol-76 will introduce new handshake
incompatible draft 75 or prior.
http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol
R=rsc
CC=golang-dev
http://codereview.appspot.com/583041
Committer: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/pkg/websocket/websocket_test.go')
-rw-r--r-- | src/pkg/websocket/websocket_test.go | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/src/pkg/websocket/websocket_test.go b/src/pkg/websocket/websocket_test.go index 92582b1ef..58065580e 100644 --- a/src/pkg/websocket/websocket_test.go +++ b/src/pkg/websocket/websocket_test.go @@ -27,23 +27,56 @@ func startServer() { serverAddr = l.Addr().String() log.Stderr("Test WebSocket server listening on ", serverAddr) http.Handle("/echo", Handler(echoServer)) + http.Handle("/echoDraft75", Draft75Handler(echoServer)) go http.Serve(l, nil) } func TestEcho(t *testing.T) { once.Do(startServer) + // websocket.Dial() client, err := net.Dial("tcp", "", serverAddr) if err != nil { t.Fatal("dialing", err) } - ws, err := newClient("/echo", "localhost", "http://localhost", - "ws://localhost/echo", "", client) + "ws://localhost/echo", "", client, handshake) + if err != nil { + t.Errorf("WebSocket handshake error", err) + return + } + + msg := []byte("hello, world\n") + if _, err := ws.Write(msg); err != nil { + t.Errorf("Write: error %v", err) + } + var actual_msg = make([]byte, 512) + n, err := ws.Read(actual_msg) + if err != nil { + t.Errorf("Read: error %v", err) + } + actual_msg = actual_msg[0:n] + if !bytes.Equal(msg, actual_msg) { + t.Errorf("Echo: expected %q got %q", msg, actual_msg) + } + ws.Close() +} + +func TestEchoDraft75(t *testing.T) { + once.Do(startServer) + + // websocket.Dial() + client, err := net.Dial("tcp", "", serverAddr) + if err != nil { + t.Fatal("dialing", err) + } + ws, err := newClient("/echoDraft75", "localhost", "http://localhost", + "ws://localhost/echoDraft75", "", client, draft75handshake) if err != nil { t.Errorf("WebSocket handshake error", err) return } + msg := []byte("hello, world\n") if _, err := ws.Write(msg); err != nil { t.Errorf("Write: error %v", err) @@ -69,7 +102,7 @@ func TestWithQuery(t *testing.T) { } ws, err := newClient("/echo?q=v", "localhost", "http://localhost", - "ws://localhost/echo?q=v", "", client) + "ws://localhost/echo?q=v", "", client, handshake) if err != nil { t.Errorf("WebSocket handshake error", err) return @@ -80,13 +113,33 @@ func TestWithQuery(t *testing.T) { func TestHTTP(t *testing.T) { once.Do(startServer) - r, _, err := http.Get(fmt.Sprintf("http://%s/echo", serverAddr)) + // If the client did not send a handshake that matches the protocol + // specification, the server should abort the WebSocket connection. + _, _, err := http.Get(fmt.Sprintf("http://%s/echo", serverAddr)) + if err == nil { + t.Errorf("Get: unexpected success") + return + } + urlerr, ok := err.(*http.URLError) + if !ok { + t.Errorf("Get: not URLError %#v", err) + return + } + if urlerr.Error != io.ErrUnexpectedEOF { + t.Errorf("Get: error %#v", err) + return + } +} + +func TestHTTPDraft75(t *testing.T) { + once.Do(startServer) + + r, _, err := http.Get(fmt.Sprintf("http://%s/echoDraft75", serverAddr)) if err != nil { - t.Errorf("Get: error %v", err) + t.Errorf("Get: error %#v", err) return } if r.StatusCode != http.StatusBadRequest { t.Errorf("Get: got status %d", r.StatusCode) - return } } |