...

Source file src/github.com/google/go-containerregistry/pkg/v1/layout/image_test.go

Documentation: github.com/google/go-containerregistry/pkg/v1/layout

     1  // Copyright 2018 Google LLC All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //    http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package layout
    16  
    17  import (
    18  	"path/filepath"
    19  	"testing"
    20  
    21  	v1 "github.com/google/go-containerregistry/pkg/v1"
    22  	"github.com/google/go-containerregistry/pkg/v1/partial"
    23  	"github.com/google/go-containerregistry/pkg/v1/types"
    24  	"github.com/google/go-containerregistry/pkg/v1/validate"
    25  )
    26  
    27  var (
    28  	indexDigest = v1.Hash{
    29  		Algorithm: "sha256",
    30  		Hex:       "05f95b26ed10668b7183c1e2da98610e91372fa9f510046d4ce5812addad86b5",
    31  	}
    32  	manifestDigest = v1.Hash{
    33  		Algorithm: "sha256",
    34  		Hex:       "eebff607b1628d67459b0596643fc07de70d702eccf030f0bc7bb6fc2b278650",
    35  	}
    36  	configDigest = v1.Hash{
    37  		Algorithm: "sha256",
    38  		Hex:       "6e0b05049ed9c17d02e1a55e80d6599dbfcce7f4f4b022e3c673e685789c470e",
    39  	}
    40  	bogusDigest = v1.Hash{
    41  		Algorithm: "sha256",
    42  		Hex:       "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
    43  	}
    44  	customManifestDigest = v1.Hash{
    45  		Algorithm: "sha256",
    46  		Hex:       "b544f71ecd82372bc9a3c0dbef378abfd2734fe437df81ff6e242a0d720d8e3e",
    47  	}
    48  	bogusPath                         = filepath.Join("testdata", "does_not_exist")
    49  	testPath                          = filepath.Join("testdata", "test_index")
    50  	testPathOneImage                  = filepath.Join("testdata", "test_index_one_image")
    51  	testPathMediaType                 = filepath.Join("testdata", "test_index_media_type")
    52  	customMediaType   types.MediaType = "application/tar+gzip"
    53  )
    54  
    55  func TestImage(t *testing.T) {
    56  	lp, err := FromPath(testPath)
    57  	if err != nil {
    58  		t.Fatalf("FromPath() = %v", err)
    59  	}
    60  	img, err := lp.Image(manifestDigest)
    61  	if err != nil {
    62  		t.Fatalf("Image() = %v", err)
    63  	}
    64  
    65  	if err := validate.Image(img); err != nil {
    66  		t.Errorf("validate.Image() = %v", err)
    67  	}
    68  
    69  	mt, err := img.MediaType()
    70  	if err != nil {
    71  		t.Errorf("MediaType() = %v", err)
    72  	} else if got, want := mt, types.OCIManifestSchema1; got != want {
    73  		t.Errorf("MediaType(); want: %v got: %v", want, got)
    74  	}
    75  
    76  	cfg, err := img.LayerByDigest(configDigest)
    77  	if err != nil {
    78  		t.Fatalf("LayerByDigest(%s) = %v", configDigest, err)
    79  	}
    80  
    81  	cfgName, err := img.ConfigName()
    82  	if err != nil {
    83  		t.Fatalf("ConfigName() = %v", err)
    84  	}
    85  
    86  	cfgDigest, err := cfg.Digest()
    87  	if err != nil {
    88  		t.Fatalf("cfg.Digest() = %v", err)
    89  	}
    90  
    91  	if got, want := cfgDigest, cfgName; got != want {
    92  		t.Errorf("ConfigName(); want: %v got: %v", want, got)
    93  	}
    94  
    95  	layers, err := img.Layers()
    96  	if err != nil {
    97  		t.Fatalf("img.Layers() = %v", err)
    98  	}
    99  
   100  	mediaType, err := layers[0].MediaType()
   101  	if err != nil {
   102  		t.Fatalf("img.Layers() = %v", err)
   103  	}
   104  
   105  	// Fixture is a DockerLayer
   106  	if got, want := mediaType, types.DockerLayer; got != want {
   107  		t.Fatalf("MediaType(); want: %q got: %q", want, got)
   108  	}
   109  
   110  	if ok, err := partial.Exists(layers[0]); err != nil {
   111  		t.Fatal(err)
   112  	} else if got, want := ok, true; got != want {
   113  		t.Errorf("Exists() = %t != %t", got, want)
   114  	}
   115  }
   116  
   117  func TestImageWithEmptyHash(t *testing.T) {
   118  	lp, err := FromPath(testPathOneImage)
   119  	if err != nil {
   120  		t.Fatalf("FromPath() = %v", err)
   121  	}
   122  	img, err := lp.Image(v1.Hash{})
   123  	if err != nil {
   124  		t.Fatalf("Image() = %v", err)
   125  	}
   126  
   127  	if err := validate.Image(img); err != nil {
   128  		t.Errorf("validate.Image() = %v", err)
   129  	}
   130  }
   131  
   132  func TestImageErrors(t *testing.T) {
   133  	lp, err := FromPath(testPath)
   134  	if err != nil {
   135  		t.Fatalf("FromPath() = %v", err)
   136  	}
   137  	img, err := lp.Image(manifestDigest)
   138  	if err != nil {
   139  		t.Fatalf("Image() = %v", err)
   140  	}
   141  
   142  	if _, err := img.LayerByDigest(bogusDigest); err == nil {
   143  		t.Errorf("LayerByDigest(%s) = nil, expected err", bogusDigest)
   144  	}
   145  
   146  	if _, err := lp.Image(bogusDigest); err == nil {
   147  		t.Errorf("Image(%s) = nil, expected err", bogusDigest)
   148  	}
   149  
   150  	if _, err := lp.Image(bogusDigest); err == nil {
   151  		t.Errorf("Image(%s, %s) = nil, expected err", bogusPath, bogusDigest)
   152  	}
   153  }
   154  
   155  func TestImageCustomMediaType(t *testing.T) {
   156  	lp, err := FromPath(testPathMediaType)
   157  	if err != nil {
   158  		t.Fatalf("FromPath() = %v", err)
   159  	}
   160  	img, err := lp.Image(customManifestDigest)
   161  	if err != nil {
   162  		t.Fatalf("Image() = %v", err)
   163  	}
   164  	mt, err := img.MediaType()
   165  	if err != nil {
   166  		t.Errorf("MediaType() = %v", err)
   167  	} else if got, want := mt, types.OCIManifestSchema1; got != want {
   168  		t.Errorf("MediaType(); want: %v got: %v", want, got)
   169  	}
   170  	layers, err := img.Layers()
   171  	if err != nil {
   172  		t.Fatalf("img.Layers() = %v", err)
   173  	}
   174  	mediaType, err := layers[0].MediaType()
   175  	if err != nil {
   176  		t.Fatalf("img.Layers() = %v", err)
   177  	}
   178  	if got, want := mediaType, customMediaType; got != want {
   179  		t.Fatalf("MediaType(); want: %q got: %q", want, got)
   180  	}
   181  }
   182  

View as plain text