server/protocol_test.go

70 lines
1.4 KiB
Go

package main
import (
"code.google.com/p/go.net/websocket"
"encoding/json"
"log"
"net/http"
"testing"
)
type result struct {
b bool
msg string
}
type clientIDTest struct {
clientid ClientID
expected result
}
var clientIDTests = []clientIDTest{
{ClientID{Type: "robot"}, result{true, ""}},
{ClientID{Type: "spectator"}, result{true, ""}},
{ClientID{Type: "schmarglenoggler"}, result{false, "usergent must be 'robot' or 'spectator'"}},
}
func TestClientIDs(t *testing.T) {
for _, tt := range clientIDTests {
v, msg := tt.clientid.Valid()
actual := result{v, msg}
if actual.b != tt.expected.b || actual.msg != tt.expected.msg {
t.Errorf("%+v: expected %v, actual %v", tt.clientid, tt.expected, actual)
}
}
}
func TestClientIDParse(t *testing.T) {
var s ClientID
err := json.Unmarshal(
[]byte(`{
"type": "robot",
"name": "dummy",
"id": "24601",
"useragent": "gorobots.js"
}`), &s)
if err != nil {
t.Errorf("fail to parse: %v", err)
}
}
func TestProtocol(t *testing.T) {
http.Handle("/ws/", websocket.Handler(addPlayer))
g = NewGame()
go g.run()
go http.ListenAndServe(*addr, nil)
origin := "http://localhost/"
url := "ws://localhost:8666/ws/"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
t.Errorf("fail: %v", err)
}
conf, err := Negociate(ws, "robot0", 800, 400)
if err != nil {
t.Errorf("fail: %v", err)
}
log.Printf("%+v", conf)
}