"encoding/json"
"fmt"
"io"
- "net"
- "net/http"
"net/url"
"os"
"time"
return lg
}
-func (s *v0Suite) testClient() (*testServer, *websocket.Conn, *json.Decoder, *json.Encoder) {
+func (s *v0Suite) testClient() (*server, *websocket.Conn, *json.Decoder, *json.Encoder) {
srv := newTestServer()
- conn, err := websocket.Dial("ws://"+srv.addr+"/websocket?api_token="+s.token, "", "http://"+srv.addr)
+ conn, err := websocket.Dial("ws://"+srv.listener.Addr().String()+"/websocket?api_token="+s.token, "", "http://"+srv.listener.Addr().String())
if err != nil {
panic(err)
}
r := json.NewDecoder(conn)
return srv, conn, r, w
}
-
-type testServer struct {
- http.Server
- addr string
- stop chan bool
-}
-
-func (srv *testServer) Close() {
- close(srv.stop)
-}
-
-func newTestServer() *testServer {
- ln, err := net.Listen("tcp", ":")
- if err != nil {
- panic(err)
- }
- cfg := defaultConfig()
- cfg.Client = *(arvados.NewClientFromEnv())
- es := &pgEventSource{
- DataSource: testDBConfig().ConnectionString(),
- QueueSize: 4,
- }
- srv := &testServer{
- Server: http.Server{
- Addr: ":",
- ReadTimeout: 10 * time.Second,
- WriteTimeout: 10 * time.Second,
- Handler: &router{
- Config: &cfg,
- eventSource: es,
- newPermChecker: func() permChecker { return newPermChecker(cfg.Client) },
- },
- },
- addr: ln.Addr().String(),
- stop: make(chan bool),
- }
- go es.Run()
- go srv.Serve(ln)
- go func() {
- <-srv.stop
- ln.Close()
- es.cancel()
- }()
- es.waitReady()
- return srv
-}