forked from mirror/websocket
Test URL path and query
This commit is contained in:
parent
844dd6d40e
commit
9727ab9cda
|
@ -41,9 +41,16 @@ type cstServer struct {
|
||||||
URL string
|
URL string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
cstPath = "/a/b"
|
||||||
|
cstRawQuery = "x=y"
|
||||||
|
cstRequestURI = cstPath + "?" + cstRawQuery
|
||||||
|
)
|
||||||
|
|
||||||
func newServer(t *testing.T) *cstServer {
|
func newServer(t *testing.T) *cstServer {
|
||||||
var s cstServer
|
var s cstServer
|
||||||
s.Server = httptest.NewServer(cstHandler{t})
|
s.Server = httptest.NewServer(cstHandler{t})
|
||||||
|
s.Server.URL += cstRequestURI
|
||||||
s.URL = makeWsProto(s.Server.URL)
|
s.URL = makeWsProto(s.Server.URL)
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
@ -51,11 +58,22 @@ func newServer(t *testing.T) *cstServer {
|
||||||
func newTLSServer(t *testing.T) *cstServer {
|
func newTLSServer(t *testing.T) *cstServer {
|
||||||
var s cstServer
|
var s cstServer
|
||||||
s.Server = httptest.NewTLSServer(cstHandler{t})
|
s.Server = httptest.NewTLSServer(cstHandler{t})
|
||||||
|
s.Server.URL += cstRequestURI
|
||||||
s.URL = makeWsProto(s.Server.URL)
|
s.URL = makeWsProto(s.Server.URL)
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t cstHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (t cstHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.URL.Path != cstPath {
|
||||||
|
t.Logf("path=%v, want %v", r.URL.Path, cstPath)
|
||||||
|
http.Error(w, "bad path", 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if r.URL.RawQuery != cstRawQuery {
|
||||||
|
t.Logf("query=%v, want %v", r.URL.RawQuery, cstRawQuery)
|
||||||
|
http.Error(w, "bad path", 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
subprotos := Subprotocols(r)
|
subprotos := Subprotocols(r)
|
||||||
if !reflect.DeepEqual(subprotos, cstDialer.Subprotocols) {
|
if !reflect.DeepEqual(subprotos, cstDialer.Subprotocols) {
|
||||||
t.Logf("subprotols=%v, want %v", subprotos, cstDialer.Subprotocols)
|
t.Logf("subprotols=%v, want %v", subprotos, cstDialer.Subprotocols)
|
||||||
|
@ -188,7 +206,7 @@ func TestDialTLS(t *testing.T) {
|
||||||
d := cstDialer
|
d := cstDialer
|
||||||
d.NetDial = func(network, addr string) (net.Conn, error) { return net.Dial(network, u.Host) }
|
d.NetDial = func(network, addr string) (net.Conn, error) { return net.Dial(network, u.Host) }
|
||||||
d.TLSClientConfig = &tls.Config{RootCAs: certs}
|
d.TLSClientConfig = &tls.Config{RootCAs: certs}
|
||||||
ws, _, err := d.Dial("wss://example.com/", nil)
|
ws, _, err := d.Dial("wss://example.com"+cstRequestURI, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Dial: %v", err)
|
t.Fatalf("Dial: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,14 +13,16 @@ import (
|
||||||
var parseURLTests = []struct {
|
var parseURLTests = []struct {
|
||||||
s string
|
s string
|
||||||
u *url.URL
|
u *url.URL
|
||||||
|
rui string
|
||||||
}{
|
}{
|
||||||
{"ws://example.com/", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}},
|
{"ws://example.com/", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}, "/"},
|
||||||
{"ws://example.com", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}},
|
{"ws://example.com", &url.URL{Scheme: "ws", Host: "example.com", Opaque: "/"}, "/"},
|
||||||
{"ws://example.com:7777/", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/"}},
|
{"ws://example.com:7777/", &url.URL{Scheme: "ws", Host: "example.com:7777", Opaque: "/"}, "/"},
|
||||||
{"wss://example.com/", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/"}},
|
{"wss://example.com/", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/"}, "/"},
|
||||||
{"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}},
|
{"wss://example.com/a/b", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b"}, "/a/b"},
|
||||||
{"ss://example.com/a/b", nil},
|
{"ss://example.com/a/b", nil, ""},
|
||||||
{"ws://webmaster@example.com/", nil},
|
{"ws://webmaster@example.com/", nil, ""},
|
||||||
|
{"wss://example.com/a/b?x=y", &url.URL{Scheme: "wss", Host: "example.com", Opaque: "/a/b?x=y"}, "/a/b?x=y"},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseURL(t *testing.T) {
|
func TestParseURL(t *testing.T) {
|
||||||
|
@ -30,14 +32,19 @@ func TestParseURL(t *testing.T) {
|
||||||
t.Errorf("parseURL(%q) returned error %v", tt.s, err)
|
t.Errorf("parseURL(%q) returned error %v", tt.s, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if tt.u == nil && err == nil {
|
if tt.u == nil {
|
||||||
|
if err == nil {
|
||||||
t.Errorf("parseURL(%q) did not return error", tt.s)
|
t.Errorf("parseURL(%q) did not return error", tt.s)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(u, tt.u) {
|
if !reflect.DeepEqual(u, tt.u) {
|
||||||
t.Errorf("parseURL(%q) returned %v, want %v", tt.s, u, tt.u)
|
t.Errorf("parseURL(%q) = %v, want %v", tt.s, u, tt.u)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if u.RequestURI() != tt.rui {
|
||||||
|
t.Errorf("parseURL(%q).RequestURI() = %v, want %v", tt.s, u.RequestURI(), tt.rui)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue