mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #1195 from dotcloud/tests-cleanup
* Hack: tests cleanup
This commit is contained in:
commit
2cbf2200ac
8 changed files with 67 additions and 702 deletions
349
api_test.go
349
api_test.go
|
@ -41,10 +41,8 @@ func TestGetBoolParam(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetVersion(t *testing.T) {
|
func TestGetVersion(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
var err error
|
||||||
if err != nil {
|
runtime := mkRuntime(t)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -65,10 +63,7 @@ func TestGetVersion(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetInfo(t *testing.T) {
|
func TestGetInfo(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -95,10 +90,7 @@ func TestGetInfo(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetImagesJSON(t *testing.T) {
|
func TestGetImagesJSON(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -220,10 +212,7 @@ func TestGetImagesJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetImagesViz(t *testing.T) {
|
func TestGetImagesViz(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -248,10 +237,7 @@ func TestGetImagesViz(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetImagesHistory(t *testing.T) {
|
func TestGetImagesHistory(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -272,10 +258,7 @@ func TestGetImagesHistory(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetImagesByName(t *testing.T) {
|
func TestGetImagesByName(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -295,10 +278,7 @@ func TestGetImagesByName(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetContainersJSON(t *testing.T) {
|
func TestGetContainersJSON(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -334,10 +314,7 @@ func TestGetContainersJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetContainersExport(t *testing.T) {
|
func TestGetContainersExport(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -389,10 +366,7 @@ func TestGetContainersExport(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetContainersChanges(t *testing.T) {
|
func TestGetContainersChanges(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -492,10 +466,7 @@ func TestGetContainersTop(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetContainersByName(t *testing.T) {
|
func TestGetContainersByName(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -528,10 +499,7 @@ func TestGetContainersByName(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostCommit(t *testing.T) {
|
func TestPostCommit(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -576,249 +544,8 @@ func TestPostCommit(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostImagesCreate(t *testing.T) {
|
|
||||||
// FIXME: Use the staging in order to perform tests
|
|
||||||
|
|
||||||
// runtime, err := newTestRuntime()
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// defer nuke(runtime)
|
|
||||||
|
|
||||||
// srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
// stdin, stdinPipe := io.Pipe()
|
|
||||||
// stdout, stdoutPipe := io.Pipe()
|
|
||||||
|
|
||||||
// c1 := make(chan struct{})
|
|
||||||
// go func() {
|
|
||||||
// defer close(c1)
|
|
||||||
|
|
||||||
// r := &hijackTester{
|
|
||||||
// ResponseRecorder: httptest.NewRecorder(),
|
|
||||||
// in: stdin,
|
|
||||||
// out: stdoutPipe,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// req, err := http.NewRequest("POST", "/images/create?fromImage="+unitTestImageName, bytes.NewReader([]byte{}))
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// body, err := postImagesCreate(srv, r, req, nil)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// if body != nil {
|
|
||||||
// t.Fatalf("No body expected, received: %s\n", body)
|
|
||||||
// }
|
|
||||||
// }()
|
|
||||||
|
|
||||||
// // Acknowledge hijack
|
|
||||||
// setTimeout(t, "hijack acknowledge timed out", 2*time.Second, func() {
|
|
||||||
// stdout.Read([]byte{})
|
|
||||||
// stdout.Read(make([]byte, 4096))
|
|
||||||
// })
|
|
||||||
|
|
||||||
// setTimeout(t, "Waiting for imagesCreate output", 5*time.Second, func() {
|
|
||||||
// reader := bufio.NewReader(stdout)
|
|
||||||
// line, err := reader.ReadString('\n')
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// if !strings.HasPrefix(line, "Pulling repository d from") {
|
|
||||||
// t.Fatalf("Expected Pulling repository docker-ut from..., found %s", line)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Close pipes (client disconnects)
|
|
||||||
// if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Wait for imagesCreate to finish, the client disconnected, therefore, Create finished his job
|
|
||||||
// setTimeout(t, "Waiting for imagesCreate timed out", 10*time.Second, func() {
|
|
||||||
// <-c1
|
|
||||||
// })
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPostImagesInsert(t *testing.T) {
|
|
||||||
// runtime, err := newTestRuntime()
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// defer nuke(runtime)
|
|
||||||
|
|
||||||
// srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
// stdin, stdinPipe := io.Pipe()
|
|
||||||
// stdout, stdoutPipe := io.Pipe()
|
|
||||||
|
|
||||||
// // Attach to it
|
|
||||||
// c1 := make(chan struct{})
|
|
||||||
// go func() {
|
|
||||||
// defer close(c1)
|
|
||||||
// r := &hijackTester{
|
|
||||||
// ResponseRecorder: httptest.NewRecorder(),
|
|
||||||
// in: stdin,
|
|
||||||
// out: stdoutPipe,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// req, err := http.NewRequest("POST", "/images/"+unitTestImageName+"/insert?path=%2Ftest&url=https%3A%2F%2Fraw.github.com%2Fdotcloud%2Fdocker%2Fmaster%2FREADME.md", bytes.NewReader([]byte{}))
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// if err := postContainersCreate(srv, r, req, nil); err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// }()
|
|
||||||
|
|
||||||
// // Acknowledge hijack
|
|
||||||
// setTimeout(t, "hijack acknowledge timed out", 5*time.Second, func() {
|
|
||||||
// stdout.Read([]byte{})
|
|
||||||
// stdout.Read(make([]byte, 4096))
|
|
||||||
// })
|
|
||||||
|
|
||||||
// id := ""
|
|
||||||
// setTimeout(t, "Waiting for imagesInsert output", 10*time.Second, func() {
|
|
||||||
// for {
|
|
||||||
// reader := bufio.NewReader(stdout)
|
|
||||||
// id, err = reader.ReadString('\n')
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Close pipes (client disconnects)
|
|
||||||
// if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Wait for attach to finish, the client disconnected, therefore, Attach finished his job
|
|
||||||
// setTimeout(t, "Waiting for CmdAttach timed out", 2*time.Second, func() {
|
|
||||||
// <-c1
|
|
||||||
// })
|
|
||||||
|
|
||||||
// img, err := srv.runtime.repositories.LookupImage(id)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatalf("New image %s expected but not found", id)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// layer, err := img.layer()
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if _, err := os.Stat(path.Join(layer, "test")); err != nil {
|
|
||||||
// t.Fatalf("The test file has not been found")
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if err := srv.runtime.graph.Delete(img.ID); err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPostImagesPush(t *testing.T) {
|
|
||||||
//FIXME: Use staging in order to perform tests
|
|
||||||
// runtime, err := newTestRuntime()
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// defer nuke(runtime)
|
|
||||||
|
|
||||||
// srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
// stdin, stdinPipe := io.Pipe()
|
|
||||||
// stdout, stdoutPipe := io.Pipe()
|
|
||||||
|
|
||||||
// c1 := make(chan struct{})
|
|
||||||
// go func() {
|
|
||||||
// r := &hijackTester{
|
|
||||||
// ResponseRecorder: httptest.NewRecorder(),
|
|
||||||
// in: stdin,
|
|
||||||
// out: stdoutPipe,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// req, err := http.NewRequest("POST", "/images/docker-ut/push", bytes.NewReader([]byte{}))
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// body, err := postImagesPush(srv, r, req, map[string]string{"name": "docker-ut"})
|
|
||||||
// close(c1)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// if body != nil {
|
|
||||||
// t.Fatalf("No body expected, received: %s\n", body)
|
|
||||||
// }
|
|
||||||
// }()
|
|
||||||
|
|
||||||
// // Acknowledge hijack
|
|
||||||
// setTimeout(t, "hijack acknowledge timed out", 2*time.Second, func() {
|
|
||||||
// stdout.Read([]byte{})
|
|
||||||
// stdout.Read(make([]byte, 4096))
|
|
||||||
// })
|
|
||||||
|
|
||||||
// setTimeout(t, "Waiting for imagesCreate output", 5*time.Second, func() {
|
|
||||||
// reader := bufio.NewReader(stdout)
|
|
||||||
// line, err := reader.ReadString('\n')
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// if !strings.HasPrefix(line, "Processing checksum") {
|
|
||||||
// t.Fatalf("Processing checksum..., found %s", line)
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
|
|
||||||
// // Close pipes (client disconnects)
|
|
||||||
// if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Wait for imagesPush to finish, the client disconnected, therefore, Push finished his job
|
|
||||||
// setTimeout(t, "Waiting for imagesPush timed out", 10*time.Second, func() {
|
|
||||||
// <-c1
|
|
||||||
// })
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPostImagesTag(t *testing.T) {
|
|
||||||
// FIXME: Use staging in order to perform tests
|
|
||||||
|
|
||||||
// runtime, err := newTestRuntime()
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
// defer nuke(runtime)
|
|
||||||
|
|
||||||
// srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
// r := httptest.NewRecorder()
|
|
||||||
|
|
||||||
// req, err := http.NewRequest("POST", "/images/docker-ut/tag?repo=testrepo&tag=testtag", bytes.NewReader([]byte{}))
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// body, err := postImagesTag(srv, r, req, map[string]string{"name": "docker-ut"})
|
|
||||||
// if err != nil {
|
|
||||||
// t.Fatal(err)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if body != nil {
|
|
||||||
// t.Fatalf("No body expected, received: %s\n", body)
|
|
||||||
// }
|
|
||||||
// if r.Code != http.StatusCreated {
|
|
||||||
// t.Fatalf("%d Created expected, received %d\n", http.StatusCreated, r.Code)
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestPostContainersCreate(t *testing.T) {
|
func TestPostContainersCreate(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -869,10 +596,7 @@ func TestPostContainersCreate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersKill(t *testing.T) {
|
func TestPostContainersKill(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -914,10 +638,7 @@ func TestPostContainersKill(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersRestart(t *testing.T) {
|
func TestPostContainersRestart(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -971,10 +692,7 @@ func TestPostContainersRestart(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersStart(t *testing.T) {
|
func TestPostContainersStart(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -1024,10 +742,7 @@ func TestPostContainersStart(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersStop(t *testing.T) {
|
func TestPostContainersStop(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -1074,10 +789,7 @@ func TestPostContainersStop(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersWait(t *testing.T) {
|
func TestPostContainersWait(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -1119,10 +831,7 @@ func TestPostContainersWait(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPostContainersAttach(t *testing.T) {
|
func TestPostContainersAttach(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -1208,10 +917,7 @@ func TestPostContainersAttach(t *testing.T) {
|
||||||
// FIXME: Test deleting container with volume
|
// FIXME: Test deleting container with volume
|
||||||
// FIXME: Test deleting volume in use by other container
|
// FIXME: Test deleting volume in use by other container
|
||||||
func TestDeleteContainers(t *testing.T) {
|
func TestDeleteContainers(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -1251,10 +957,7 @@ func TestDeleteContainers(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOptionsRoute(t *testing.T) {
|
func TestOptionsRoute(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime, enableCors: true}
|
srv := &Server{runtime: runtime, enableCors: true}
|
||||||
|
@ -1277,10 +980,7 @@ func TestOptionsRoute(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetEnabledCors(t *testing.T) {
|
func TestGetEnabledCors(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime, enableCors: true}
|
srv := &Server{runtime: runtime, enableCors: true}
|
||||||
|
@ -1318,10 +1018,7 @@ func TestGetEnabledCors(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteImages(t *testing.T) {
|
func TestDeleteImages(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
|
|
@ -105,10 +105,7 @@ CMD Hello world
|
||||||
|
|
||||||
func TestBuild(t *testing.T) {
|
func TestBuild(t *testing.T) {
|
||||||
for _, ctx := range testContexts {
|
for _, ctx := range testContexts {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{
|
srv := &Server{
|
||||||
|
|
301
commands_test.go
301
commands_test.go
|
@ -59,79 +59,6 @@ func assertPipe(input, output string, r io.Reader, w io.Writer, count int) error
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/*TODO
|
|
||||||
func cmdImages(srv *Server, args ...string) (string, error) {
|
|
||||||
stdout, stdoutPipe := io.Pipe()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
if err := srv.CmdImages(nil, stdoutPipe, args...); err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// force the pipe closed, so that the code below gets an EOF
|
|
||||||
stdoutPipe.Close()
|
|
||||||
}()
|
|
||||||
|
|
||||||
output, err := ioutil.ReadAll(stdout)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cleanup pipes
|
|
||||||
return string(output), closeWrap(stdout, stdoutPipe)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TestImages checks that 'docker images' displays information correctly
|
|
||||||
func TestImages(t *testing.T) {
|
|
||||||
|
|
||||||
runtime, err := newTestRuntime()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
output, err := cmdImages(srv)
|
|
||||||
|
|
||||||
if !strings.Contains(output, "REPOSITORY") {
|
|
||||||
t.Fatal("'images' should have a header")
|
|
||||||
}
|
|
||||||
if !strings.Contains(output, "docker-ut") {
|
|
||||||
t.Fatal("'images' should show the docker-ut image")
|
|
||||||
}
|
|
||||||
if !strings.Contains(output, "e9aa60c60128") {
|
|
||||||
t.Fatal("'images' should show the docker-ut image id")
|
|
||||||
}
|
|
||||||
|
|
||||||
output, err = cmdImages(srv, "-q")
|
|
||||||
|
|
||||||
if strings.Contains(output, "REPOSITORY") {
|
|
||||||
t.Fatal("'images -q' should not have a header")
|
|
||||||
}
|
|
||||||
if strings.Contains(output, "docker-ut") {
|
|
||||||
t.Fatal("'images' should not show the docker-ut image name")
|
|
||||||
}
|
|
||||||
if !strings.Contains(output, "e9aa60c60128") {
|
|
||||||
t.Fatal("'images' should show the docker-ut image id")
|
|
||||||
}
|
|
||||||
|
|
||||||
output, err = cmdImages(srv, "-viz")
|
|
||||||
|
|
||||||
if !strings.HasPrefix(output, "digraph docker {") {
|
|
||||||
t.Fatal("'images -v' should start with the dot header")
|
|
||||||
}
|
|
||||||
if !strings.HasSuffix(output, "}\n") {
|
|
||||||
t.Fatal("'images -v' should end with a '}'")
|
|
||||||
}
|
|
||||||
if !strings.Contains(output, "base -> \"e9aa60c60128\" [style=invis]") {
|
|
||||||
t.Fatal("'images -v' should have the docker-ut image id node")
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo: add checks for -a
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TestRunHostname checks that 'docker run -h' correctly sets a custom hostname
|
// TestRunHostname checks that 'docker run -h' correctly sets a custom hostname
|
||||||
func TestRunHostname(t *testing.T) {
|
func TestRunHostname(t *testing.T) {
|
||||||
|
@ -164,163 +91,6 @@ func TestRunHostname(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
func TestRunExit(t *testing.T) {
|
|
||||||
runtime, err := newTestRuntime()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
stdin, stdinPipe := io.Pipe()
|
|
||||||
stdout, stdoutPipe := io.Pipe()
|
|
||||||
c1 := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
srv.CmdRun(stdin, rcli.NewDockerLocalConn(stdoutPipe), "-i", GetTestImage(runtime).Id, "/bin/cat")
|
|
||||||
close(c1)
|
|
||||||
}()
|
|
||||||
|
|
||||||
setTimeout(t, "Read/Write assertion timed out", 2*time.Second, func() {
|
|
||||||
if err := assertPipe("hello\n", "hello", stdout, stdinPipe, 15); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
container := runtime.List()[0]
|
|
||||||
|
|
||||||
// Closing /bin/cat stdin, expect it to exit
|
|
||||||
p, err := container.StdinPipe()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
if err := p.Close(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// as the process exited, CmdRun must finish and unblock. Wait for it
|
|
||||||
setTimeout(t, "Waiting for CmdRun timed out", 2*time.Second, func() {
|
|
||||||
<-c1
|
|
||||||
cmdWait(srv, container)
|
|
||||||
})
|
|
||||||
|
|
||||||
// Make sure that the client has been disconnected
|
|
||||||
setTimeout(t, "The client should have been disconnected once the remote process exited.", 2*time.Second, func() {
|
|
||||||
// Expecting pipe i/o error, just check that read does not block
|
|
||||||
stdin.Read([]byte{})
|
|
||||||
})
|
|
||||||
|
|
||||||
// Cleanup pipes
|
|
||||||
if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Expected behaviour: the process dies when the client disconnects
|
|
||||||
func TestRunDisconnect(t *testing.T) {
|
|
||||||
runtime, err := newTestRuntime()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
stdin, stdinPipe := io.Pipe()
|
|
||||||
stdout, stdoutPipe := io.Pipe()
|
|
||||||
c1 := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
// We're simulating a disconnect so the return value doesn't matter. What matters is the
|
|
||||||
// fact that CmdRun returns.
|
|
||||||
srv.CmdRun(stdin, rcli.NewDockerLocalConn(stdoutPipe), "-i", GetTestImage(runtime).Id, "/bin/cat")
|
|
||||||
close(c1)
|
|
||||||
}()
|
|
||||||
|
|
||||||
setTimeout(t, "Read/Write assertion timed out", 2*time.Second, func() {
|
|
||||||
if err := assertPipe("hello\n", "hello", stdout, stdinPipe, 15); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Close pipes (simulate disconnect)
|
|
||||||
if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// as the pipes are close, we expect the process to die,
|
|
||||||
// therefore CmdRun to unblock. Wait for CmdRun
|
|
||||||
setTimeout(t, "Waiting for CmdRun timed out", 2*time.Second, func() {
|
|
||||||
<-c1
|
|
||||||
})
|
|
||||||
|
|
||||||
// Client disconnect after run -i should cause stdin to be closed, which should
|
|
||||||
// cause /bin/cat to exit.
|
|
||||||
setTimeout(t, "Waiting for /bin/cat to exit timed out", 2*time.Second, func() {
|
|
||||||
container := runtime.List()[0]
|
|
||||||
container.Wait()
|
|
||||||
if container.State.Running {
|
|
||||||
t.Fatalf("/bin/cat is still running after closing stdin")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Expected behaviour: the process dies when the client disconnects
|
|
||||||
func TestRunDisconnectTty(t *testing.T) {
|
|
||||||
runtime, err := newTestRuntime()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
stdin, stdinPipe := io.Pipe()
|
|
||||||
stdout, stdoutPipe := io.Pipe()
|
|
||||||
c1 := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
// We're simulating a disconnect so the return value doesn't matter. What matters is the
|
|
||||||
// fact that CmdRun returns.
|
|
||||||
srv.CmdRun(stdin, rcli.NewDockerLocalConn(stdoutPipe), "-i", "-t", GetTestImage(runtime).Id, "/bin/cat")
|
|
||||||
close(c1)
|
|
||||||
}()
|
|
||||||
|
|
||||||
setTimeout(t, "Waiting for the container to be started timed out", 2*time.Second, func() {
|
|
||||||
for {
|
|
||||||
// Client disconnect after run -i should keep stdin out in TTY mode
|
|
||||||
l := runtime.List()
|
|
||||||
if len(l) == 1 && l[0].State.Running {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
time.Sleep(10 * time.Millisecond)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Client disconnect after run -i should keep stdin out in TTY mode
|
|
||||||
container := runtime.List()[0]
|
|
||||||
|
|
||||||
setTimeout(t, "Read/Write assertion timed out", 2*time.Second, func() {
|
|
||||||
if err := assertPipe("hello\n", "hello", stdout, stdinPipe, 15); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Close pipes (simulate disconnect)
|
|
||||||
if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// In tty mode, we expect the process to stay alive even after client's stdin closes.
|
|
||||||
// Do not wait for run to finish
|
|
||||||
|
|
||||||
// Give some time to monitor to do his thing
|
|
||||||
container.WaitTimeout(500 * time.Millisecond)
|
|
||||||
if !container.State.Running {
|
|
||||||
t.Fatalf("/bin/cat should still be running after closing stdin (tty mode)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TestAttachStdin checks attaching to stdin without stdout and stderr.
|
// TestAttachStdin checks attaching to stdin without stdout and stderr.
|
||||||
// 'docker run -i -a stdin' should sends the client's stdin to the command,
|
// 'docker run -i -a stdin' should sends the client's stdin to the command,
|
||||||
|
@ -387,74 +157,3 @@ func TestRunAttachStdin(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// Expected behaviour, the process stays alive when the client disconnects
|
|
||||||
func TestAttachDisconnect(t *testing.T) {
|
|
||||||
runtime, err := newTestRuntime()
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
|
||||||
|
|
||||||
container, err := NewBuilder(runtime).Create(
|
|
||||||
&Config{
|
|
||||||
Image: GetTestImage(runtime).Id,
|
|
||||||
CpuShares: 1000,
|
|
||||||
Memory: 33554432,
|
|
||||||
Cmd: []string{"/bin/cat"},
|
|
||||||
OpenStdin: true,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer runtime.Destroy(container)
|
|
||||||
|
|
||||||
// Start the process
|
|
||||||
if err := container.Start(); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
stdin, stdinPipe := io.Pipe()
|
|
||||||
stdout, stdoutPipe := io.Pipe()
|
|
||||||
|
|
||||||
// Attach to it
|
|
||||||
c1 := make(chan struct{})
|
|
||||||
go func() {
|
|
||||||
// We're simulating a disconnect so the return value doesn't matter. What matters is the
|
|
||||||
// fact that CmdAttach returns.
|
|
||||||
srv.CmdAttach(stdin, rcli.NewDockerLocalConn(stdoutPipe), container.Id)
|
|
||||||
close(c1)
|
|
||||||
}()
|
|
||||||
|
|
||||||
setTimeout(t, "First read/write assertion timed out", 2*time.Second, func() {
|
|
||||||
if err := assertPipe("hello\n", "hello", stdout, stdinPipe, 15); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// Close pipes (client disconnects)
|
|
||||||
if err := closeWrap(stdin, stdinPipe, stdout, stdoutPipe); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for attach to finish, the client disconnected, therefore, Attach finished his job
|
|
||||||
setTimeout(t, "Waiting for CmdAttach timed out", 2*time.Second, func() {
|
|
||||||
<-c1
|
|
||||||
})
|
|
||||||
|
|
||||||
// We closed stdin, expect /bin/cat to still be running
|
|
||||||
// Wait a little bit to make sure container.monitor() did his thing
|
|
||||||
err = container.WaitTimeout(500 * time.Millisecond)
|
|
||||||
if err == nil || !container.State.Running {
|
|
||||||
t.Fatalf("/bin/cat is not running after closing stdin")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to avoid the timeoout in destroy. Best effort, don't check error
|
|
||||||
cStdin, _ := container.StdinPipe()
|
|
||||||
cStdin.Close()
|
|
||||||
container.Wait()
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
|
@ -1046,10 +1046,7 @@ func TestEnv(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEntrypoint(t *testing.T) {
|
func TestEntrypoint(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
container, err := NewBuilder(runtime).Create(
|
container, err := NewBuilder(runtime).Create(
|
||||||
&Config{
|
&Config{
|
||||||
|
@ -1125,10 +1122,7 @@ func TestLXCConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRunSequencial(b *testing.B) {
|
func BenchmarkRunSequencial(b *testing.B) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(b)
|
||||||
if err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
container, err := NewBuilder(runtime).Create(&Config{
|
container, err := NewBuilder(runtime).Create(&Config{
|
||||||
|
@ -1154,10 +1148,7 @@ func BenchmarkRunSequencial(b *testing.B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func BenchmarkRunParallel(b *testing.B) {
|
func BenchmarkRunParallel(b *testing.B) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(b)
|
||||||
if err != nil {
|
|
||||||
b.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
var tasks []chan error
|
var tasks []chan error
|
||||||
|
|
|
@ -114,26 +114,6 @@ func init() {
|
||||||
|
|
||||||
// FIXME: test that ImagePull(json=true) send correct json output
|
// FIXME: test that ImagePull(json=true) send correct json output
|
||||||
|
|
||||||
func newTestRuntime() (*Runtime, error) {
|
|
||||||
root, err := ioutil.TempDir("", "docker-test")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := os.Remove(root); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := utils.CopyDirectory(unitTestStoreBase, root); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
runtime, err := NewRuntimeFromDirectory(root, false)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
runtime.UpdateCapabilities(true)
|
|
||||||
return runtime, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetTestImage(runtime *Runtime) *Image {
|
func GetTestImage(runtime *Runtime) *Image {
|
||||||
imgs, err := runtime.graph.All()
|
imgs, err := runtime.graph.All()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -148,10 +128,7 @@ func GetTestImage(runtime *Runtime) *Image {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRuntimeCreate(t *testing.T) {
|
func TestRuntimeCreate(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
// Make sure we start we 0 containers
|
// Make sure we start we 0 containers
|
||||||
|
@ -223,10 +200,7 @@ func TestRuntimeCreate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDestroy(t *testing.T) {
|
func TestDestroy(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
container, err := NewBuilder(runtime).Create(&Config{
|
container, err := NewBuilder(runtime).Create(&Config{
|
||||||
Image: GetTestImage(runtime).ID,
|
Image: GetTestImage(runtime).ID,
|
||||||
|
@ -270,10 +244,7 @@ func TestDestroy(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGet(t *testing.T) {
|
func TestGet(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
builder := NewBuilder(runtime)
|
builder := NewBuilder(runtime)
|
||||||
|
@ -323,11 +294,8 @@ func TestGet(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func startEchoServerContainer(t *testing.T, proto string) (*Runtime, *Container, string) {
|
func startEchoServerContainer(t *testing.T, proto string) (*Runtime, *Container, string) {
|
||||||
runtime, err := newTestRuntime()
|
var err error
|
||||||
if err != nil {
|
runtime := mkRuntime(t)
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
port := 5554
|
port := 5554
|
||||||
var container *Container
|
var container *Container
|
||||||
var strPort string
|
var strPort string
|
||||||
|
|
|
@ -5,10 +5,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestContainerTagImageDelete(t *testing.T) {
|
func TestContainerTagImageDelete(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -62,10 +59,7 @@ func TestContainerTagImageDelete(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateRm(t *testing.T) {
|
func TestCreateRm(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -95,10 +89,7 @@ func TestCreateRm(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateStartRestartStopStartKillRm(t *testing.T) {
|
func TestCreateStartRestartStopStartKillRm(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
|
@ -154,11 +145,9 @@ func TestCreateStartRestartStopStartKillRm(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRunWithTooLowMemoryLimit(t *testing.T) {
|
func TestRunWithTooLowMemoryLimit(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
var err error
|
||||||
|
runtime := mkRuntime(t)
|
||||||
srv := &Server{runtime: runtime}
|
srv := &Server{runtime: runtime}
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
// Try to create a container with a memory limit of 1 byte less than the minimum allowed limit.
|
// Try to create a container with a memory limit of 1 byte less than the minimum allowed limit.
|
||||||
_, err = srv.ContainerCreate(
|
_, err = srv.ContainerCreate(
|
||||||
|
|
|
@ -5,10 +5,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLookupImage(t *testing.T) {
|
func TestLookupImage(t *testing.T) {
|
||||||
runtime, err := newTestRuntime()
|
runtime := mkRuntime(t)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
defer nuke(runtime)
|
defer nuke(runtime)
|
||||||
|
|
||||||
if img, err := runtime.repositories.LookupImage(unitTestImageName); err != nil {
|
if img, err := runtime.repositories.LookupImage(unitTestImageName); err != nil {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
"github.com/dotcloud/docker/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This file contains utility functions for docker's unit test suite.
|
// This file contains utility functions for docker's unit test suite.
|
||||||
|
@ -15,14 +16,40 @@ import (
|
||||||
|
|
||||||
// Create a temporary runtime suitable for unit testing.
|
// Create a temporary runtime suitable for unit testing.
|
||||||
// Call t.Fatal() at the first error.
|
// Call t.Fatal() at the first error.
|
||||||
func mkRuntime(t *testing.T) *Runtime {
|
func mkRuntime(f Fataler) *Runtime {
|
||||||
runtime, err := newTestRuntime()
|
runtime, err := newTestRuntime()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
f.Fatal(err)
|
||||||
}
|
}
|
||||||
return runtime
|
return runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A common interface to access the Fatal method of
|
||||||
|
// both testing.B and testing.T.
|
||||||
|
type Fataler interface {
|
||||||
|
Fatal(args ...interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTestRuntime() (*Runtime, error) {
|
||||||
|
root, err := ioutil.TempDir("", "docker-test")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := os.Remove(root); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := utils.CopyDirectory(unitTestStoreBase, root); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime, err := NewRuntimeFromDirectory(root, false)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
runtime.UpdateCapabilities(true)
|
||||||
|
return runtime, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Write `content` to the file at path `dst`, creating it if necessary,
|
// Write `content` to the file at path `dst`, creating it if necessary,
|
||||||
// as well as any missing directories.
|
// as well as any missing directories.
|
||||||
// The file is truncated if it already exists.
|
// The file is truncated if it already exists.
|
||||||
|
|
Loading…
Reference in a new issue