...

Source file src/github.com/google/go-containerregistry/pkg/v1/partial/with_test.go

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

     1  // Copyright 2019 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 partial_test
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/google/go-cmp/cmp"
    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/random"
    24  	"github.com/google/go-containerregistry/pkg/v1/types"
    25  )
    26  
    27  func TestRawConfigFile(t *testing.T) {
    28  	img, err := random.Image(1024, 1)
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  
    33  	part, err := partial.RawConfigFile(img)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  
    38  	method, err := img.RawConfigFile()
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  
    43  	if string(part) != string(method) {
    44  		t.Errorf("mismatched config file: %s vs %s", part, method)
    45  	}
    46  }
    47  
    48  func TestDigest(t *testing.T) {
    49  	img, err := random.Image(1024, 1)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  
    54  	part, err := partial.Digest(img)
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  
    59  	method, err := img.Digest()
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  
    64  	if part != method {
    65  		t.Errorf("mismatched digest: %s vs %s", part, method)
    66  	}
    67  }
    68  
    69  func TestManifest(t *testing.T) {
    70  	img, err := random.Image(1024, 1)
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  
    75  	part, err := partial.Manifest(img)
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  
    80  	method, err := img.Manifest()
    81  	if err != nil {
    82  		t.Fatal(err)
    83  	}
    84  
    85  	if diff := cmp.Diff(part, method); diff != "" {
    86  		t.Errorf("mismatched manifest: %v", diff)
    87  	}
    88  }
    89  
    90  func TestSize(t *testing.T) {
    91  	img, err := random.Image(1024, 1)
    92  	if err != nil {
    93  		t.Fatal(err)
    94  	}
    95  
    96  	part, err := partial.Size(img)
    97  	if err != nil {
    98  		t.Fatal(err)
    99  	}
   100  
   101  	method, err := img.Size()
   102  	if err != nil {
   103  		t.Fatal(err)
   104  	}
   105  
   106  	if diff := cmp.Diff(part, method); diff != "" {
   107  		t.Errorf("mismatched size: %v", diff)
   108  	}
   109  }
   110  
   111  func TestDiffIDToBlob(t *testing.T) {
   112  	img, err := random.Image(1024, 1)
   113  	if err != nil {
   114  		t.Fatal(err)
   115  	}
   116  	cf, err := img.ConfigFile()
   117  	if err != nil {
   118  		t.Fatal(err)
   119  	}
   120  	layers, err := img.Layers()
   121  	if err != nil {
   122  		t.Fatal(err)
   123  	}
   124  	want, err := layers[0].Digest()
   125  	if err != nil {
   126  		t.Fatal(err)
   127  	}
   128  	got, err := partial.DiffIDToBlob(img, cf.RootFS.DiffIDs[0])
   129  	if err != nil {
   130  		t.Fatal(err)
   131  	}
   132  
   133  	if diff := cmp.Diff(got, want); diff != "" {
   134  		t.Errorf("mismatched digest: %v", diff)
   135  	}
   136  
   137  	if _, err := partial.DiffIDToBlob(img, want); err == nil {
   138  		t.Errorf("expected err, got nil")
   139  	}
   140  }
   141  
   142  func TestBlobToDiffID(t *testing.T) {
   143  	img, err := random.Image(1024, 1)
   144  	if err != nil {
   145  		t.Fatal(err)
   146  	}
   147  	cf, err := img.ConfigFile()
   148  	if err != nil {
   149  		t.Fatal(err)
   150  	}
   151  	layers, err := img.Layers()
   152  	if err != nil {
   153  		t.Fatal(err)
   154  	}
   155  	d, err := layers[0].Digest()
   156  	if err != nil {
   157  		t.Fatal(err)
   158  	}
   159  	want := cf.RootFS.DiffIDs[0]
   160  	got, err := partial.BlobToDiffID(img, d)
   161  	if err != nil {
   162  		t.Fatal(err)
   163  	}
   164  
   165  	if diff := cmp.Diff(got, want); diff != "" {
   166  		t.Errorf("mismatched digest: %v", diff)
   167  	}
   168  
   169  	if _, err := partial.BlobToDiffID(img, want); err == nil {
   170  		t.Errorf("expected err, got nil")
   171  	}
   172  }
   173  
   174  func TestBlobSize(t *testing.T) {
   175  	img, err := random.Image(1024, 1)
   176  	if err != nil {
   177  		t.Fatal(err)
   178  	}
   179  	m, err := img.Manifest()
   180  	if err != nil {
   181  		t.Fatal(err)
   182  	}
   183  	want := m.Layers[0].Size
   184  	got, err := partial.BlobSize(img, m.Layers[0].Digest)
   185  	if err != nil {
   186  		t.Fatal(err)
   187  	}
   188  
   189  	if diff := cmp.Diff(got, want); diff != "" {
   190  		t.Errorf("mismatched blob size: %v", diff)
   191  	}
   192  
   193  	if _, err := partial.BlobSize(img, v1.Hash{}); err == nil {
   194  		t.Errorf("expected err, got nil")
   195  	}
   196  }
   197  
   198  type fastpathLayer struct {
   199  	v1.Layer
   200  }
   201  
   202  func (l *fastpathLayer) UncompressedSize() (int64, error) {
   203  	return 100, nil
   204  }
   205  
   206  func (l *fastpathLayer) Exists() (bool, error) {
   207  	return true, nil
   208  }
   209  
   210  func TestUncompressedSize(t *testing.T) {
   211  	randLayer, err := random.Layer(1024, types.DockerLayer)
   212  	if err != nil {
   213  		t.Fatal(err)
   214  	}
   215  	fpl := &fastpathLayer{randLayer}
   216  	us, err := partial.UncompressedSize(fpl)
   217  	if err != nil {
   218  		t.Fatal(err)
   219  	}
   220  	if got, want := us, int64(100); got != want {
   221  		t.Errorf("UncompressedSize() = %d != %d", got, want)
   222  	}
   223  }
   224  
   225  func TestExists(t *testing.T) {
   226  	randLayer, err := random.Layer(1024, types.DockerLayer)
   227  	if err != nil {
   228  		t.Fatal(err)
   229  	}
   230  	fpl := &fastpathLayer{randLayer}
   231  	ok, err := partial.Exists(fpl)
   232  	if err != nil {
   233  		t.Fatal(err)
   234  	}
   235  	if got, want := ok, true; got != want {
   236  		t.Errorf("Exists() = %t != %t", got, want)
   237  	}
   238  
   239  	ok, err = partial.Exists(randLayer)
   240  	if err != nil {
   241  		t.Fatal(err)
   242  	}
   243  	if got, want := ok, true; got != want {
   244  		t.Errorf("Exists() = %t != %t", got, want)
   245  	}
   246  }
   247  

View as plain text