summaryrefslogtreecommitdiffstats
path: root/pkg/v1/partial/configlayer_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/v1/partial/configlayer_test.go')
-rw-r--r--pkg/v1/partial/configlayer_test.go139
1 files changed, 139 insertions, 0 deletions
diff --git a/pkg/v1/partial/configlayer_test.go b/pkg/v1/partial/configlayer_test.go
new file mode 100644
index 0000000..decdcab
--- /dev/null
+++ b/pkg/v1/partial/configlayer_test.go
@@ -0,0 +1,139 @@
+// Copyright 2018 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
+
+import (
+ "fmt"
+ "io"
+ "testing"
+
+ v1 "github.com/google/go-containerregistry/pkg/v1"
+ "github.com/google/go-containerregistry/pkg/v1/types"
+)
+
+type testUIC struct {
+ UncompressedImageCore
+ configFile []byte
+}
+
+func (t testUIC) RawConfigFile() ([]byte, error) {
+ return t.configFile, nil
+}
+
+type testCIC struct {
+ CompressedImageCore
+ configFile []byte
+}
+
+func (t testCIC) LayerByDigest(h v1.Hash) (CompressedLayer, error) {
+ return nil, fmt.Errorf("no layer by diff ID %v", h)
+}
+
+func (t testCIC) RawConfigFile() ([]byte, error) {
+ return t.configFile, nil
+}
+
+func TestConfigLayer(t *testing.T) {
+ cases := []v1.Image{
+ &compressedImageExtender{
+ CompressedImageCore: testCIC{
+ configFile: []byte("{}"),
+ },
+ },
+ &uncompressedImageExtender{
+ UncompressedImageCore: testUIC{
+ configFile: []byte("{}"),
+ },
+ },
+ }
+
+ for _, image := range cases {
+ hash, err := image.ConfigName()
+ if err != nil {
+ t.Fatalf("Error getting config name: %v", err)
+ }
+
+ if _, err := image.LayerByDigest(hash); err == nil {
+ t.Error("LayerByDigest(config hash) returned nil error, wanted error")
+ }
+
+ layer, err := ConfigLayer(image)
+ if err != nil {
+ t.Fatalf("ConfigLayer: %v", err)
+ }
+ lr, err := layer.Uncompressed()
+ if err != nil {
+ t.Fatalf("Error getting uncompressed layer: %v", err)
+ }
+ zr, err := layer.Compressed()
+ if err != nil {
+ t.Fatalf("Error getting compressed layer: %v", err)
+ }
+
+ cfgLayerBytes, err := io.ReadAll(lr)
+ if err != nil {
+ t.Fatalf("Error reading config layer bytes: %v", err)
+ }
+ zcfgLayerBytes, err := io.ReadAll(zr)
+ if err != nil {
+ t.Fatalf("Error reading config layer bytes: %v", err)
+ }
+
+ cfgFile, err := image.RawConfigFile()
+ if err != nil {
+ t.Fatalf("Error getting raw config file: %v", err)
+ }
+
+ if string(cfgFile) != string(cfgLayerBytes) {
+ t.Errorf("Config file layer doesn't match raw config file")
+ }
+ if string(cfgFile) != string(zcfgLayerBytes) {
+ t.Errorf("Config file layer doesn't match raw config file")
+ }
+
+ size, err := layer.Size()
+ if err != nil {
+ t.Fatalf("Error getting config layer size: %v", err)
+ }
+ if size != int64(len(cfgFile)) {
+ t.Errorf("Size() = %d, want %d", size, len(cfgFile))
+ }
+
+ digest, err := layer.Digest()
+ if err != nil {
+ t.Fatalf("Digest() = %v", err)
+ }
+ if digest != hash {
+ t.Errorf("ConfigLayer().Digest() != ConfigName(); %v, %v", digest, hash)
+ }
+
+ diffid, err := layer.DiffID()
+ if err != nil {
+ t.Fatalf("DiffId() = %v", err)
+ }
+ if diffid != hash {
+ t.Errorf("ConfigLayer().DiffID() != ConfigName(); %v, %v", diffid, hash)
+ }
+
+ mt, err := layer.MediaType()
+ if err != nil {
+ t.Fatalf("Error getting config layer media type: %v", err)
+ }
+
+ if mt != types.OCIConfigJSON {
+ t.Errorf("MediaType() = %v, want %v", mt, types.OCIConfigJSON)
+ }
+ }
+}