123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package registry
- import (
- "fmt"
- "github.com/dotcloud/docker/utils"
- "net/url"
- "strings"
- "testing"
- )
- var (
- IMAGE_ID = "42d718c941f5c532ac049bf0b0ab53f0062f09a03afd4aa4a02c098e46032b9d"
- TOKEN = []string{"fake-token"}
- REPO = "foo42/bar"
- )
- func spawnTestRegistry(t *testing.T) *Registry {
- authConfig := &AuthConfig{}
- r, err := NewRegistry(authConfig, utils.NewHTTPRequestFactory(), makeURL("/v1/"))
- if err != nil {
- t.Fatal(err)
- }
- return r
- }
- func TestPingRegistryEndpoint(t *testing.T) {
- regInfo, err := pingRegistryEndpoint(makeURL("/v1/"))
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, regInfo.Standalone, true, "Expected standalone to be true (default)")
- }
- func TestGetRemoteHistory(t *testing.T) {
- r := spawnTestRegistry(t)
- hist, err := r.GetRemoteHistory(IMAGE_ID, makeURL("/v1/"), TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, len(hist), 2, "Expected 2 images in history")
- assertEqual(t, hist[0], IMAGE_ID, "Expected "+IMAGE_ID+"as first ancestry")
- assertEqual(t, hist[1], "77dbf71da1d00e3fbddc480176eac8994025630c6590d11cfc8fe1209c2a1d20",
- "Unexpected second ancestry")
- }
- func TestLookupRemoteImage(t *testing.T) {
- r := spawnTestRegistry(t)
- found := r.LookupRemoteImage(IMAGE_ID, makeURL("/v1/"), TOKEN)
- assertEqual(t, found, true, "Expected remote lookup to succeed")
- found = r.LookupRemoteImage("abcdef", makeURL("/v1/"), TOKEN)
- assertEqual(t, found, false, "Expected remote lookup to fail")
- }
- func TestGetRemoteImageJSON(t *testing.T) {
- r := spawnTestRegistry(t)
- json, size, err := r.GetRemoteImageJSON(IMAGE_ID, makeURL("/v1/"), TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, size, 154, "Expected size 154")
- if len(json) <= 0 {
- t.Fatal("Expected non-empty json")
- }
- _, _, err = r.GetRemoteImageJSON("abcdef", makeURL("/v1/"), TOKEN)
- if err == nil {
- t.Fatal("Expected image not found error")
- }
- }
- func TestGetRemoteImageLayer(t *testing.T) {
- r := spawnTestRegistry(t)
- data, err := r.GetRemoteImageLayer(IMAGE_ID, makeURL("/v1/"), TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- if data == nil {
- t.Fatal("Expected non-nil data result")
- }
- _, err = r.GetRemoteImageLayer("abcdef", makeURL("/v1/"), TOKEN)
- if err == nil {
- t.Fatal("Expected image not found error")
- }
- }
- func TestGetRemoteTags(t *testing.T) {
- r := spawnTestRegistry(t)
- tags, err := r.GetRemoteTags([]string{makeURL("/v1/")}, REPO, TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, len(tags), 1, "Expected one tag")
- assertEqual(t, tags["latest"], IMAGE_ID, "Expected tag latest to map to "+IMAGE_ID)
- _, err = r.GetRemoteTags([]string{makeURL("/v1/")}, "foo42/baz", TOKEN)
- if err == nil {
- t.Fatal("Expected error when fetching tags for bogus repo")
- }
- }
- func TestGetRepositoryData(t *testing.T) {
- r := spawnTestRegistry(t)
- parsedUrl, err := url.Parse(makeURL("/v1/"))
- if err != nil {
- t.Fatal(err)
- }
- host := "http://" + parsedUrl.Host + "/v1/"
- data, err := r.GetRepositoryData("foo42/bar")
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, len(data.ImgList), 2, "Expected 2 images in ImgList")
- assertEqual(t, len(data.Endpoints), 2,
- fmt.Sprintf("Expected 2 endpoints in Endpoints, found %d instead", len(data.Endpoints)))
- assertEqual(t, data.Endpoints[0], host,
- fmt.Sprintf("Expected first endpoint to be %s but found %s instead", host, data.Endpoints[0]))
- assertEqual(t, data.Endpoints[1], "http://test.example.com/v1/",
- fmt.Sprintf("Expected first endpoint to be http://test.example.com/v1/ but found %s instead", data.Endpoints[1]))
- }
- func TestPushImageJSONRegistry(t *testing.T) {
- r := spawnTestRegistry(t)
- imgData := &ImgData{
- ID: "77dbf71da1d00e3fbddc480176eac8994025630c6590d11cfc8fe1209c2a1d20",
- Checksum: "sha256:1ac330d56e05eef6d438586545ceff7550d3bdcb6b19961f12c5ba714ee1bb37",
- }
- err := r.PushImageJSONRegistry(imgData, []byte{0x42, 0xdf, 0x0}, makeURL("/v1/"), TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- }
- func TestPushImageLayerRegistry(t *testing.T) {
- r := spawnTestRegistry(t)
- layer := strings.NewReader("")
- _, _, err := r.PushImageLayerRegistry(IMAGE_ID, layer, makeURL("/v1/"), TOKEN, []byte{})
- if err != nil {
- t.Fatal(err)
- }
- }
- func TestResolveRepositoryName(t *testing.T) {
- _, _, err := ResolveRepositoryName("https://github.com/dotcloud/docker")
- assertEqual(t, err, ErrInvalidRepositoryName, "Expected error invalid repo name")
- ep, repo, err := ResolveRepositoryName("fooo/bar")
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, ep, IndexServerAddress(), "Expected endpoint to be index server address")
- assertEqual(t, repo, "fooo/bar", "Expected resolved repo to be foo/bar")
- u := makeURL("")[7:]
- ep, repo, err = ResolveRepositoryName(u + "/private/moonbase")
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, ep, u, "Expected endpoint to be "+u)
- assertEqual(t, repo, "private/moonbase", "Expected endpoint to be private/moonbase")
- ep, repo, err = ResolveRepositoryName("ubuntu-12.04-base")
- if err != nil {
- t.Fatal(err)
- }
- assertEqual(t, ep, IndexServerAddress(), "Expected endpoint to be "+IndexServerAddress())
- assertEqual(t, repo, "ubuntu-12.04-base", "Expected endpoint to be ubuntu-12.04-base")
- }
- func TestPushRegistryTag(t *testing.T) {
- r := spawnTestRegistry(t)
- err := r.PushRegistryTag("foo42/bar", IMAGE_ID, "stable", makeURL("/v1/"), TOKEN)
- if err != nil {
- t.Fatal(err)
- }
- }
- func TestPushImageJSONIndex(t *testing.T) {
- r := spawnTestRegistry(t)
- imgData := []*ImgData{
- {
- ID: "77dbf71da1d00e3fbddc480176eac8994025630c6590d11cfc8fe1209c2a1d20",
- Checksum: "sha256:1ac330d56e05eef6d438586545ceff7550d3bdcb6b19961f12c5ba714ee1bb37",
- },
- {
- ID: "42d718c941f5c532ac049bf0b0ab53f0062f09a03afd4aa4a02c098e46032b9d",
- Checksum: "sha256:bea7bf2e4bacd479344b737328db47b18880d09096e6674165533aa994f5e9f2",
- },
- }
- repoData, err := r.PushImageJSONIndex("foo42/bar", imgData, false, nil)
- if err != nil {
- t.Fatal(err)
- }
- if repoData == nil {
- t.Fatal("Expected RepositoryData object")
- }
- repoData, err = r.PushImageJSONIndex("foo42/bar", imgData, true, []string{r.indexEndpoint})
- if err != nil {
- t.Fatal(err)
- }
- if repoData == nil {
- t.Fatal("Expected RepositoryData object")
- }
- }
- func TestSearchRepositories(t *testing.T) {
- r := spawnTestRegistry(t)
- results, err := r.SearchRepositories("fakequery")
- if err != nil {
- t.Fatal(err)
- }
- if results == nil {
- t.Fatal("Expected non-nil SearchResults object")
- }
- assertEqual(t, results.NumResults, 1, "Expected 1 search results")
- assertEqual(t, results.Query, "fakequery", "Expected 'fakequery' as query")
- assertEqual(t, results.Results[0].StarCount, 42, "Expected 'fakeimage' a ot hae 42 stars")
- }
- func TestValidRepositoryName(t *testing.T) {
- if err := validateRepositoryName("docker/docker"); err != nil {
- t.Fatal(err)
- }
- if err := validateRepositoryName("docker/Docker"); err == nil {
- t.Log("Repository name should be invalid")
- t.Fail()
- }
- if err := validateRepositoryName("docker///docker"); err == nil {
- t.Log("Repository name should be invalid")
- t.Fail()
- }
- }
|