|
@@ -1,151 +1,168 @@
|
|
package registry
|
|
package registry
|
|
|
|
|
|
-import (
|
|
|
|
- "crypto/rand"
|
|
|
|
- "encoding/hex"
|
|
|
|
- "github.com/dotcloud/docker/auth"
|
|
|
|
- "io/ioutil"
|
|
|
|
- "os"
|
|
|
|
- "path"
|
|
|
|
- "testing"
|
|
|
|
-)
|
|
|
|
-
|
|
|
|
-func TestPull(t *testing.T) {
|
|
|
|
- os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
- runtime, err := newTestRuntime()
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- defer nuke(runtime)
|
|
|
|
-
|
|
|
|
- err = runtime.graph.PullRepository(ioutil.Discard, "busybox", "", runtime.repositories, nil)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- img, err := runtime.repositories.LookupImage("busybox")
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Try to run something on this image to make sure the layer's been downloaded properly.
|
|
|
|
- config, _, err := ParseRun([]string{img.Id, "echo", "Hello World"}, runtime.capabilities)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- b := NewBuilder(runtime)
|
|
|
|
- container, err := b.Create(config)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- if err := container.Start(); err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if status := container.Wait(); status != 0 {
|
|
|
|
- t.Fatalf("Expected status code 0, found %d instead", status)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestPullTag(t *testing.T) {
|
|
|
|
- os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
- runtime, err := newTestRuntime()
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- defer nuke(runtime)
|
|
|
|
-
|
|
|
|
- err = runtime.graph.PullRepository(ioutil.Discard, "ubuntu", "12.04", runtime.repositories, nil)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- _, err = runtime.repositories.LookupImage("ubuntu:12.04")
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- img2, err := runtime.repositories.LookupImage("ubuntu:12.10")
|
|
|
|
- if img2 != nil {
|
|
|
|
- t.Fatalf("Expected nil image but found %v instead", img2.Id)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func login(runtime *Runtime) error {
|
|
|
|
- authConfig := auth.NewAuthConfig("unittester", "surlautrerivejetattendrai", "noise+unittester@dotcloud.com", runtime.root)
|
|
|
|
- runtime.authConfig = authConfig
|
|
|
|
- _, err := auth.Login(authConfig)
|
|
|
|
- return err
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-func TestPush(t *testing.T) {
|
|
|
|
- os.Setenv("DOCKER_INDEX_URL", "https://indexstaging-docker.dotcloud.com")
|
|
|
|
- defer os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
- runtime, err := newTestRuntime()
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- defer nuke(runtime)
|
|
|
|
-
|
|
|
|
- err = login(runtime)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- err = runtime.graph.PullRepository(ioutil.Discard, "joffrey/busybox", "", runtime.repositories, nil)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- tokenBuffer := make([]byte, 16)
|
|
|
|
- _, err = rand.Read(tokenBuffer)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- token := hex.EncodeToString(tokenBuffer)[:29]
|
|
|
|
- config, _, err := ParseRun([]string{"joffrey/busybox", "touch", "/" + token}, runtime.capabilities)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- b := NewBuilder(runtime)
|
|
|
|
- container, err := b.Create(config)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- if err := container.Start(); err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if status := container.Wait(); status != 0 {
|
|
|
|
- t.Fatalf("Expected status code 0, found %d instead", status)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- img, err := b.Commit(container, "unittester/"+token, "", "", "", nil)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- repo := runtime.repositories.Repositories["unittester/"+token]
|
|
|
|
- err = runtime.graph.PushRepository(ioutil.Discard, "unittester/"+token, repo, runtime.authConfig)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Remove image so we can pull it again
|
|
|
|
- if err := runtime.graph.Delete(img.Id); err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- err = runtime.graph.PullRepository(ioutil.Discard, "unittester/"+token, "", runtime.repositories, runtime.authConfig)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- layerPath, err := img.layer()
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if _, err := os.Stat(path.Join(layerPath, token)); err != nil {
|
|
|
|
- t.Fatalf("Error while trying to retrieve token file: %v", err)
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+// import (
|
|
|
|
+// "crypto/rand"
|
|
|
|
+// "encoding/hex"
|
|
|
|
+// "github.com/dotcloud/docker"
|
|
|
|
+// "github.com/dotcloud/docker/auth"
|
|
|
|
+// "io/ioutil"
|
|
|
|
+// "os"
|
|
|
|
+// "path"
|
|
|
|
+// "testing"
|
|
|
|
+// )
|
|
|
|
+
|
|
|
|
+// 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 := os.MkdirAll(root, 0700); err != nil && !os.IsExist(err) {
|
|
|
|
+// return nil, err
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// return runtime, nil
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// func TestPull(t *testing.T) {
|
|
|
|
+// os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
+// runtime, err := newTestRuntime()
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// defer nuke(runtime)
|
|
|
|
+
|
|
|
|
+// err = runtime.graph.PullRepository(ioutil.Discard, "busybox", "", runtime.repositories, nil)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// img, err := runtime.repositories.LookupImage("busybox")
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// // Try to run something on this image to make sure the layer's been downloaded properly.
|
|
|
|
+// config, _, err := docker.ParseRun([]string{img.Id, "echo", "Hello World"}, runtime.capabilities)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// b := NewBuilder(runtime)
|
|
|
|
+// container, err := b.Create(config)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// if err := container.Start(); err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// if status := container.Wait(); status != 0 {
|
|
|
|
+// t.Fatalf("Expected status code 0, found %d instead", status)
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// func TestPullTag(t *testing.T) {
|
|
|
|
+// os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
+// runtime, err := newTestRuntime()
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// defer nuke(runtime)
|
|
|
|
+
|
|
|
|
+// err = runtime.graph.PullRepository(ioutil.Discard, "ubuntu", "12.04", runtime.repositories, nil)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// _, err = runtime.repositories.LookupImage("ubuntu:12.04")
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// img2, err := runtime.repositories.LookupImage("ubuntu:12.10")
|
|
|
|
+// if img2 != nil {
|
|
|
|
+// t.Fatalf("Expected nil image but found %v instead", img2.Id)
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// func login(runtime *Runtime) error {
|
|
|
|
+// authConfig := auth.NewAuthConfig("unittester", "surlautrerivejetattendrai", "noise+unittester@dotcloud.com", runtime.root)
|
|
|
|
+// runtime.authConfig = authConfig
|
|
|
|
+// _, err := auth.Login(authConfig)
|
|
|
|
+// return err
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// func TestPush(t *testing.T) {
|
|
|
|
+// os.Setenv("DOCKER_INDEX_URL", "https://indexstaging-docker.dotcloud.com")
|
|
|
|
+// defer os.Setenv("DOCKER_INDEX_URL", "")
|
|
|
|
+// runtime, err := newTestRuntime()
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// defer nuke(runtime)
|
|
|
|
+
|
|
|
|
+// err = login(runtime)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// err = runtime.graph.PullRepository(ioutil.Discard, "joffrey/busybox", "", runtime.repositories, nil)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// tokenBuffer := make([]byte, 16)
|
|
|
|
+// _, err = rand.Read(tokenBuffer)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// token := hex.EncodeToString(tokenBuffer)[:29]
|
|
|
|
+// config, _, err := ParseRun([]string{"joffrey/busybox", "touch", "/" + token}, runtime.capabilities)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// b := NewBuilder(runtime)
|
|
|
|
+// container, err := b.Create(config)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+// if err := container.Start(); err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// if status := container.Wait(); status != 0 {
|
|
|
|
+// t.Fatalf("Expected status code 0, found %d instead", status)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// img, err := b.Commit(container, "unittester/"+token, "", "", "", nil)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// repo := runtime.repositories.Repositories["unittester/"+token]
|
|
|
|
+// err = runtime.graph.PushRepository(ioutil.Discard, "unittester/"+token, repo, runtime.authConfig)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// // Remove image so we can pull it again
|
|
|
|
+// if err := runtime.graph.Delete(img.Id); err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// err = runtime.graph.PullRepository(ioutil.Discard, "unittester/"+token, "", runtime.repositories, runtime.authConfig)
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// layerPath, err := img.layer()
|
|
|
|
+// if err != nil {
|
|
|
|
+// t.Fatal(err)
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+// if _, err := os.Stat(path.Join(layerPath, token)); err != nil {
|
|
|
|
+// t.Fatalf("Error while trying to retrieve token file: %v", err)
|
|
|
|
+// }
|
|
|
|
+// }
|