summaryrefslogtreecommitdiffstats
path: root/pkg/v1/partial/with_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/v1/partial/with_test.go')
-rw-r--r--pkg/v1/partial/with_test.go246
1 files changed, 246 insertions, 0 deletions
diff --git a/pkg/v1/partial/with_test.go b/pkg/v1/partial/with_test.go
new file mode 100644
index 0000000..7796bd9
--- /dev/null
+++ b/pkg/v1/partial/with_test.go
@@ -0,0 +1,246 @@
+// Copyright 2019 Google LLC All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package partial_test
+
+import (
+ "testing"
+
+ "github.com/google/go-cmp/cmp"
+ v1 "github.com/google/go-containerregistry/pkg/v1"
+ "github.com/google/go-containerregistry/pkg/v1/partial"
+ "github.com/google/go-containerregistry/pkg/v1/random"
+ "github.com/google/go-containerregistry/pkg/v1/types"
+)
+
+func TestRawConfigFile(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ part, err := partial.RawConfigFile(img)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ method, err := img.RawConfigFile()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if string(part) != string(method) {
+ t.Errorf("mismatched config file: %s vs %s", part, method)
+ }
+}
+
+func TestDigest(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ part, err := partial.Digest(img)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ method, err := img.Digest()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if part != method {
+ t.Errorf("mismatched digest: %s vs %s", part, method)
+ }
+}
+
+func TestManifest(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ part, err := partial.Manifest(img)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ method, err := img.Manifest()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if diff := cmp.Diff(part, method); diff != "" {
+ t.Errorf("mismatched manifest: %v", diff)
+ }
+}
+
+func TestSize(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ part, err := partial.Size(img)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ method, err := img.Size()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if diff := cmp.Diff(part, method); diff != "" {
+ t.Errorf("mismatched size: %v", diff)
+ }
+}
+
+func TestDiffIDToBlob(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+ cf, err := img.ConfigFile()
+ if err != nil {
+ t.Fatal(err)
+ }
+ layers, err := img.Layers()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want, err := layers[0].Digest()
+ if err != nil {
+ t.Fatal(err)
+ }
+ got, err := partial.DiffIDToBlob(img, cf.RootFS.DiffIDs[0])
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if diff := cmp.Diff(got, want); diff != "" {
+ t.Errorf("mismatched digest: %v", diff)
+ }
+
+ if _, err := partial.DiffIDToBlob(img, want); err == nil {
+ t.Errorf("expected err, got nil")
+ }
+}
+
+func TestBlobToDiffID(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+ cf, err := img.ConfigFile()
+ if err != nil {
+ t.Fatal(err)
+ }
+ layers, err := img.Layers()
+ if err != nil {
+ t.Fatal(err)
+ }
+ d, err := layers[0].Digest()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := cf.RootFS.DiffIDs[0]
+ got, err := partial.BlobToDiffID(img, d)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if diff := cmp.Diff(got, want); diff != "" {
+ t.Errorf("mismatched digest: %v", diff)
+ }
+
+ if _, err := partial.BlobToDiffID(img, want); err == nil {
+ t.Errorf("expected err, got nil")
+ }
+}
+
+func TestBlobSize(t *testing.T) {
+ img, err := random.Image(1024, 1)
+ if err != nil {
+ t.Fatal(err)
+ }
+ m, err := img.Manifest()
+ if err != nil {
+ t.Fatal(err)
+ }
+ want := m.Layers[0].Size
+ got, err := partial.BlobSize(img, m.Layers[0].Digest)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if diff := cmp.Diff(got, want); diff != "" {
+ t.Errorf("mismatched blob size: %v", diff)
+ }
+
+ if _, err := partial.BlobSize(img, v1.Hash{}); err == nil {
+ t.Errorf("expected err, got nil")
+ }
+}
+
+type fastpathLayer struct {
+ v1.Layer
+}
+
+func (l *fastpathLayer) UncompressedSize() (int64, error) {
+ return 100, nil
+}
+
+func (l *fastpathLayer) Exists() (bool, error) {
+ return true, nil
+}
+
+func TestUncompressedSize(t *testing.T) {
+ randLayer, err := random.Layer(1024, types.DockerLayer)
+ if err != nil {
+ t.Fatal(err)
+ }
+ fpl := &fastpathLayer{randLayer}
+ us, err := partial.UncompressedSize(fpl)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := us, int64(100); got != want {
+ t.Errorf("UncompressedSize() = %d != %d", got, want)
+ }
+}
+
+func TestExists(t *testing.T) {
+ randLayer, err := random.Layer(1024, types.DockerLayer)
+ if err != nil {
+ t.Fatal(err)
+ }
+ fpl := &fastpathLayer{randLayer}
+ ok, err := partial.Exists(fpl)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := ok, true; got != want {
+ t.Errorf("Exists() = %t != %t", got, want)
+ }
+
+ ok, err = partial.Exists(randLayer)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if got, want := ok, true; got != want {
+ t.Errorf("Exists() = %t != %t", got, want)
+ }
+}