summaryrefslogtreecommitdiff
path: root/src/pkg/websocket/websocket_test.go
diff options
context:
space:
mode:
authorFumitoshi Ukai <ukai@google.com>2010-03-23 18:09:24 -0700
committerFumitoshi Ukai <ukai@google.com>2010-03-23 18:09:24 -0700
commit1c7cb5ef73e82c1a02af198d974053d4fed16f93 (patch)
tree82d41bd22791d6e207ac7b4df0c4d1855d7b86e1 /src/pkg/websocket/websocket_test.go
parentd28183095a939d0342f7891cd3d4099efd5865e2 (diff)
downloadgolang-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.go65
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
}
}