Skip to content

Commit

Permalink
Merge pull request #410 from vania-pooh/master
Browse files Browse the repository at this point in the history
Added tests for /vnc and /log API (related to #404)
  • Loading branch information
aandryashin committed Apr 1, 2018
2 parents 5116c58 + e7025d5 commit e707a8b
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 4 deletions.
4 changes: 2 additions & 2 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion selenoid.go
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ func logs(wsconn *websocket.Conn) {
sid, _ := splitRequestPath(wsconn.Request().URL.Path)
sess, ok := sessions.Get(sid)
if ok && sess.Container != nil {
log.Printf("[%d] [CONTAINER_LOGS] [%s]", requestId, sess.Container)
log.Printf("[%d] [CONTAINER_LOGS] [%s]", requestId, sess.Container.ID)
r, err := cli.ContainerLogs(wsconn.Request().Context(), sess.Container.ID, types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: true,
Expand Down
79 changes: 78 additions & 1 deletion service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ import (
"sync"
"testing"
"time"
"golang.org/x/net/websocket"
"github.com/aerokube/util"
"bytes"
"net"
"io"
)

var (
Expand All @@ -36,6 +41,7 @@ func updateMux(mux http.Handler) {
mockServer = httptest.NewServer(mux)
os.Setenv("DOCKER_HOST", "tcp://"+hostPort(mockServer.URL))
os.Setenv("DOCKER_API_VERSION", "1.29")
cli, _ = client.NewEnvClient()
}

func testMux() http.Handler {
Expand Down Expand Up @@ -66,7 +72,19 @@ func testMux() http.Handler {
w.WriteHeader(http.StatusNoContent)
},
))
mux.HandleFunc("/v1.29/containers/e90e34656806", http.HandlerFunc(
mux.HandleFunc("/v1.29/containers/e90e34656806/logs", http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Content-Type", "text/plain; charset=utf-8")
w.Header().Add("Transfer-Encoding", "chunked")
w.WriteHeader(http.StatusOK)
const streamTypeStderr = 2
header := []byte{streamTypeStderr, 0, 0, 0, 0, 0, 0, 9}
w.Write(header)
data := []byte("test-data")
w.Write(data)
},
))
mux.HandleFunc("/v%s/containers/e90e34656806", http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNoContent)
},
Expand Down Expand Up @@ -304,3 +322,62 @@ func TestFindDriver(t *testing.T) {
AssertThat(t, success, Is{true})
AssertThat(t, starter, Not{nil})
}

func TestGetVNC(t *testing.T) {

srv := httptest.NewServer(handler())
defer srv.Close()

testTcpServer := testTCPServer("test-data")
sessions.Put("test-session", &session.Session{
VNC: testTcpServer.Addr().String(),
})
defer sessions.Remove("test-session")

u := fmt.Sprintf("ws://%s/vnc/test-session", util.HostPort(srv.URL))
AssertThat(t, readDataFromWebSocket(t, u), EqualTo{"test-data"})
}

func testTCPServer(data string) net.Listener {
l, _ := net.Listen("tcp", "127.0.0.1:0")
go func() {
for {
conn, err := l.Accept()
if err != nil {
continue
}
io.WriteString(conn, data)
conn.Close()
return
}
}()
return l
}

func readDataFromWebSocket(t * testing.T, wsURL string) string {
ws, err := websocket.Dial(wsURL, "", "http://localhost")
AssertThat(t, err, Is{nil})

var msg = make([]byte, 512)
_, err = ws.Read(msg)
msg = bytes.Trim(msg, "\x00")
//AssertThat(t, err, Is{nil})
return string(msg)
}

func TestGetLogs(t *testing.T) {

srv := httptest.NewServer(handler())
defer srv.Close()

sessions.Put("test-session", &session.Session{
Container: &session.Container{
ID: "e90e34656806",
IPAddress: "127.0.0.1",
},
})
defer sessions.Remove("test-session")

u := fmt.Sprintf("ws://%s/logs/test-session", util.HostPort(srv.URL))
AssertThat(t, readDataFromWebSocket(t, u), EqualTo{"test-data"})
}

0 comments on commit e707a8b

Please sign in to comment.