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  }