github.com/apcera/util@v0.0.0-20180322191801-7a50bc84ee48/docker/v1/registry_test.go (about)

     1  // Copyright 2014 Apcera Inc. All rights reserved.
     2  // Borrowing general test structure from Docker mock registry test.
     3  
     4  package v1
     5  
     6  import (
     7  	"io/ioutil"
     8  	"sort"
     9  	"testing"
    10  
    11  	"github.com/apcera/util/dockertest/v1"
    12  
    13  	tt "github.com/apcera/util/testtool"
    14  )
    15  
    16  func init() {
    17  	registry := v1.RunMockRegistry()
    18  	DockerHubRegistryURL = registry.URL
    19  }
    20  
    21  func TestGetImage(t *testing.T) {
    22  	testHelper := tt.StartTest(t)
    23  	defer testHelper.FinishTest()
    24  
    25  	img, statusCode, err := GetImage("", "")
    26  	tt.TestExpectError(t, err)
    27  	tt.TestEqual(t, statusCode, -1)
    28  	tt.TestEqual(t, err.Error(), "image name is empty")
    29  
    30  	img, statusCode, err = GetImage("foo/bar", "")
    31  	tt.TestExpectSuccess(t, err)
    32  	tt.TestEqual(t, statusCode, 200)
    33  	tt.TestEqual(t, img.Name, "foo/bar")
    34  
    35  	img, statusCode, err = GetImage("base", "")
    36  	tt.TestExpectSuccess(t, err)
    37  	tt.TestEqual(t, statusCode, 200)
    38  	tt.TestEqual(t, img.Name, "base")
    39  }
    40  
    41  func TestGetImageHistory(t *testing.T) {
    42  	testHelper := tt.StartTest(t)
    43  	defer testHelper.FinishTest()
    44  
    45  	img, statusCode, err := GetImage("foo/bar", "")
    46  	tt.TestExpectSuccess(t, err)
    47  	tt.TestEqual(t, statusCode, 200)
    48  
    49  	h, err := img.History("tag2")
    50  	tt.TestExpectError(t, err)
    51  	tt.TestEqual(t, err.Error(), "can't find tag 'tag2' for image 'foo/bar'")
    52  
    53  	h, err = img.History("latest")
    54  	tt.TestExpectSuccess(t, err)
    55  	tt.TestEqual(t, len(h), 2)
    56  	tt.TestEqual(t, h[0], "deadbeef")
    57  	tt.TestEqual(t, h[1], "badcafe")
    58  }
    59  
    60  func TestGetImageTags(t *testing.T) {
    61  	testHelper := tt.StartTest(t)
    62  	defer testHelper.FinishTest()
    63  
    64  	img, statusCode, err := GetImage("foo/bar", "")
    65  	tt.TestExpectSuccess(t, err)
    66  	tt.TestEqual(t, statusCode, 200)
    67  
    68  	tags := img.Tags()
    69  	sort.Strings(tags)
    70  	tt.TestEqual(t, tags, []string{"base", "latest"})
    71  }
    72  
    73  func TestGetImageTagLayerID(t *testing.T) {
    74  	testHelper := tt.StartTest(t)
    75  	defer testHelper.FinishTest()
    76  
    77  	img, statusCode, err := GetImage("foo/bar", "")
    78  	tt.TestExpectSuccess(t, err)
    79  	tt.TestEqual(t, statusCode, 200)
    80  
    81  	_, err = img.TagLayerID("tag2")
    82  	tt.TestExpectError(t, err)
    83  	tt.TestEqual(t, err.Error(), "can't find tag 'tag2' for image 'foo/bar'")
    84  
    85  	id, err := img.TagLayerID("latest")
    86  	tt.TestExpectSuccess(t, err)
    87  	tt.TestEqual(t, id, "deadbeef")
    88  
    89  	id, err = img.TagLayerID("base")
    90  	tt.TestExpectSuccess(t, err)
    91  	tt.TestEqual(t, id, "badcafe")
    92  }
    93  
    94  func TestGetImageMetadata(t *testing.T) {
    95  	testHelper := tt.StartTest(t)
    96  	defer testHelper.FinishTest()
    97  
    98  	img, statusCode, err := GetImage("foo/bar", "")
    99  	tt.TestExpectSuccess(t, err)
   100  	tt.TestEqual(t, statusCode, 200)
   101  
   102  	var m1 map[string]interface{}
   103  	err = img.Metadata("tag2", &m1)
   104  	tt.TestExpectError(t, err)
   105  	tt.TestEqual(t, err.Error(), "can't find tag 'tag2' for image 'foo/bar'")
   106  
   107  	var m2 map[string]interface{}
   108  	err = img.Metadata("latest", &m2)
   109  	tt.TestExpectSuccess(t, err)
   110  	tt.TestEqual(t, len(m2), 2)
   111  	tt.TestEqual(t, m2["id"], "deadbeef")
   112  	tt.TestEqual(t, m2["k2"], "v2")
   113  
   114  	var m3 map[string]interface{}
   115  	err = img.Metadata("base", &m3)
   116  	tt.TestExpectSuccess(t, err)
   117  	tt.TestEqual(t, len(m3), 2)
   118  	tt.TestEqual(t, m3["id"], "badcafe")
   119  	tt.TestEqual(t, m3["k1"], "v1")
   120  }
   121  
   122  func TestReadLayer(t *testing.T) {
   123  	testHelper := tt.StartTest(t)
   124  	defer testHelper.FinishTest()
   125  
   126  	img, statusCode, err := GetImage("foo/bar", "")
   127  	tt.TestExpectSuccess(t, err)
   128  	tt.TestEqual(t, statusCode, 200)
   129  
   130  	r, err := img.LayerReader("deadbeef")
   131  	tt.TestExpectSuccess(t, err)
   132  	body, err := ioutil.ReadAll(r)
   133  	tt.TestExpectSuccess(t, err)
   134  	tt.TestEqual(t, body, []byte{0xd4, 0xe5, 0xf6})
   135  
   136  	r, err = img.LayerReader("badcafe")
   137  	tt.TestExpectSuccess(t, err)
   138  	body, err = ioutil.ReadAll(r)
   139  	tt.TestExpectSuccess(t, err)
   140  	tt.TestEqual(t, body, []byte{0xa1, 0xb2, 0xc3})
   141  
   142  	r, err = img.LayerReader("badbad")
   143  	tt.TestExpectError(t, err)
   144  }