github.com/titanous/docker@v1.4.1/graph/tags_unit_test.go (about) 1 package graph 2 3 import ( 4 "bytes" 5 "io" 6 "os" 7 "path" 8 "testing" 9 10 "github.com/docker/docker/daemon/graphdriver" 11 _ "github.com/docker/docker/daemon/graphdriver/vfs" // import the vfs driver so it is used in the tests 12 "github.com/docker/docker/image" 13 "github.com/docker/docker/utils" 14 "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" 15 ) 16 17 const ( 18 testImageName = "myapp" 19 testImageID = "1a2d3c4d4e5fa2d2a21acea242a5e2345d3aefc3e7dfa2a2a2a21a2a2ad2d234" 20 ) 21 22 func fakeTar() (io.Reader, error) { 23 uid := os.Getuid() 24 gid := os.Getgid() 25 26 content := []byte("Hello world!\n") 27 buf := new(bytes.Buffer) 28 tw := tar.NewWriter(buf) 29 for _, name := range []string{"/etc/postgres/postgres.conf", "/etc/passwd", "/var/log/postgres/postgres.conf"} { 30 hdr := new(tar.Header) 31 32 // Leaving these fields blank requires root privileges 33 hdr.Uid = uid 34 hdr.Gid = gid 35 36 hdr.Size = int64(len(content)) 37 hdr.Name = name 38 if err := tw.WriteHeader(hdr); err != nil { 39 return nil, err 40 } 41 tw.Write([]byte(content)) 42 } 43 tw.Close() 44 return buf, nil 45 } 46 47 func mkTestTagStore(root string, t *testing.T) *TagStore { 48 driver, err := graphdriver.New(root, nil) 49 if err != nil { 50 t.Fatal(err) 51 } 52 graph, err := NewGraph(root, driver) 53 if err != nil { 54 t.Fatal(err) 55 } 56 store, err := NewTagStore(path.Join(root, "tags"), graph, nil, nil) 57 if err != nil { 58 t.Fatal(err) 59 } 60 archive, err := fakeTar() 61 if err != nil { 62 t.Fatal(err) 63 } 64 img := &image.Image{ID: testImageID} 65 if err := graph.Register(img, archive); err != nil { 66 t.Fatal(err) 67 } 68 if err := store.Set(testImageName, "", testImageID, false); err != nil { 69 t.Fatal(err) 70 } 71 return store 72 } 73 74 func TestLookupImage(t *testing.T) { 75 tmp, err := utils.TestDirectory("") 76 if err != nil { 77 t.Fatal(err) 78 } 79 defer os.RemoveAll(tmp) 80 store := mkTestTagStore(tmp, t) 81 defer store.graph.driver.Cleanup() 82 83 if img, err := store.LookupImage(testImageName); err != nil { 84 t.Fatal(err) 85 } else if img == nil { 86 t.Errorf("Expected 1 image, none found") 87 } 88 if img, err := store.LookupImage(testImageName + ":" + DEFAULTTAG); err != nil { 89 t.Fatal(err) 90 } else if img == nil { 91 t.Errorf("Expected 1 image, none found") 92 } 93 94 if img, err := store.LookupImage(testImageName + ":" + "fail"); err == nil { 95 t.Errorf("Expected error, none found") 96 } else if img != nil { 97 t.Errorf("Expected 0 image, 1 found") 98 } 99 100 if img, err := store.LookupImage("fail:fail"); err == nil { 101 t.Errorf("Expected error, none found") 102 } else if img != nil { 103 t.Errorf("Expected 0 image, 1 found") 104 } 105 106 if img, err := store.LookupImage(testImageID); err != nil { 107 t.Fatal(err) 108 } else if img == nil { 109 t.Errorf("Expected 1 image, none found") 110 } 111 112 if img, err := store.LookupImage(testImageName + ":" + testImageID); err != nil { 113 t.Fatal(err) 114 } else if img == nil { 115 t.Errorf("Expected 1 image, none found") 116 } 117 } 118 119 func TestValidTagName(t *testing.T) { 120 validTags := []string{"9", "foo", "foo-test", "bar.baz.boo"} 121 for _, tag := range validTags { 122 if err := ValidateTagName(tag); err != nil { 123 t.Errorf("'%s' should've been a valid tag", tag) 124 } 125 } 126 } 127 128 func TestInvalidTagName(t *testing.T) { 129 validTags := []string{"-9", ".foo", "-test", ".", "-"} 130 for _, tag := range validTags { 131 if err := ValidateTagName(tag); err == nil { 132 t.Errorf("'%s' shouldn't have been a valid tag", tag) 133 } 134 } 135 } 136 137 func TestOfficialName(t *testing.T) { 138 names := map[string]bool{ 139 "library/ubuntu": true, 140 "nonlibrary/ubuntu": false, 141 "ubuntu": true, 142 "other/library": false, 143 } 144 for name, isOfficial := range names { 145 result := isOfficialName(name) 146 if result != isOfficial { 147 t.Errorf("Unexpected result for %s\n\tExpecting: %v\n\tActual: %v", name, isOfficial, result) 148 } 149 } 150 }