package registry

// 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)
// 	}
// }