// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package websocket import ( "bytes"; "http"; "io"; "log"; "net"; "once"; "strings"; "testing"; ) var serverAddr string func echoServer(ws *Conn) { io.Copy(ws, ws) } func startServer() { l, e := net.Listen("tcp", ":0"); // any available address if e != nil { log.Exitf("net.Listen tcp :0 %v", e) } serverAddr = l.Addr().String(); log.Stderr("Test WebSocket server listening on ", serverAddr); http.Handle("/echo", Handler(echoServer)); go http.Serve(l, nil); } func TestEcho(t *testing.T) { once.Do(startServer); client, err := net.Dial("tcp", "", serverAddr); if err != nil { t.Fatal("dialing", err) } ws, err := newClient("/echo", "localhost", "http://localhost", "ws://localhost/echo", "", client); if err != nil { t.Errorf("WebSocket handshake error", err); return; } msg := strings.Bytes("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(); }