From 9e37a04665395cb98687cd09b05ba33736984547 Mon Sep 17 00:00:00 2001 From: "Andrew C. Bodine" Date: Fri, 16 Jan 2015 18:52:27 -0800 Subject: [PATCH] Adds test for api attach via websocket Signed-off-by: Andrew C. Bodine --- integration-cli/docker_api_attach_test.go | 66 +++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 integration-cli/docker_api_attach_test.go diff --git a/integration-cli/docker_api_attach_test.go b/integration-cli/docker_api_attach_test.go new file mode 100644 index 0000000000..191060dded --- /dev/null +++ b/integration-cli/docker_api_attach_test.go @@ -0,0 +1,66 @@ +package main + +import ( + "bytes" + "net" + "os/exec" + "testing" + + "code.google.com/p/go.net/websocket" +) + +func TestGetContainersAttachWebsocket(t *testing.T) { + runCmd := exec.Command(dockerBinary, "run", "-dit", "busybox", "cat") + out, _, err := runCommandWithOutput(runCmd) + if err != nil { + t.Fatalf(out, err) + } + defer deleteAllContainers() + + rwc, err := net.Dial("unix", "/var/run/docker.sock") + if err != nil { + t.Fatal(err) + } + + cleanedContainerID := stripTrailingCharacters(out) + config, err := websocket.NewConfig( + "/containers/"+cleanedContainerID+"/attach/ws?stream=1&stdin=1&stdout=1&stderr=1", + "http://localhost", + ) + if err != nil { + t.Fatal(err) + } + + ws, err := websocket.NewClient(config, rwc) + if err != nil { + t.Fatal(err) + } + defer ws.Close() + + expected := []byte("hello") + actual := make([]byte, len(expected)) + outChan := make(chan string) + go func() { + if _, err := ws.Read(actual); err != nil { + t.Fatal(err) + } + outChan <- "done" + }() + + inChan := make(chan string) + go func() { + if _, err := ws.Write(expected); err != nil { + t.Fatal(err) + } + inChan <- "done" + }() + + <-inChan + <-outChan + + if !bytes.Equal(expected, actual) { + t.Fatal("Expected output on websocket to match input") + } + + logDone("container attach websocket - can echo input via cat") +}