diff options
Diffstat (limited to 'internal/cmd/edit_test.go')
-rw-r--r-- | internal/cmd/edit_test.go | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/internal/cmd/edit_test.go b/internal/cmd/edit_test.go new file mode 100644 index 0000000..df18c45 --- /dev/null +++ b/internal/cmd/edit_test.go @@ -0,0 +1,174 @@ +// Copyright 2022 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 cmd + +import ( + "bytes" + "io" + "net/http/httptest" + "net/url" + "path" + "strings" + "testing" + + "github.com/google/go-containerregistry/pkg/crane" + "github.com/google/go-containerregistry/pkg/registry" + "github.com/google/go-containerregistry/pkg/v1/random" +) + +func mustRegistry(t *testing.T) (*httptest.Server, string) { + t.Helper() + s := httptest.NewServer(registry.New()) + u, err := url.Parse(s.URL) + if err != nil { + t.Fatal(err) + } + return s, u.Host +} + +func TestEditConfig(t *testing.T) { + reg, host := mustRegistry(t) + defer reg.Close() + src := path.Join(host, "crane/edit/config") + + img, err := random.Image(1024, 1) + if err != nil { + t.Fatal(err) + } + if err := crane.Push(img, src); err != nil { + t.Fatal(err) + } + + cmd := NewCmdEditConfig(&[]crane.Option{}) + cmd.SetArgs([]string{src}) + cmd.SetIn(strings.NewReader("{}")) + + if err := cmd.Execute(); err != nil { + t.Fatal(err) + } +} + +func TestEditManifest(t *testing.T) { + reg, host := mustRegistry(t) + defer reg.Close() + src := path.Join(host, "crane/edit/manifest") + + img, err := random.Image(1024, 1) + if err != nil { + t.Fatal(err) + } + if err := crane.Push(img, src); err != nil { + t.Fatal(err) + } + + cmd := NewCmdEditManifest(&[]crane.Option{}) + cmd.SetArgs([]string{src}) + cmd.SetIn(strings.NewReader("{}")) + if err := cmd.Execute(); err != nil { + t.Fatal(err) + } +} + +func TestEditFilesystem(t *testing.T) { + reg, host := mustRegistry(t) + defer reg.Close() + src := path.Join(host, "crane/edit/fs") + + img, err := random.Image(1024, 1) + if err != nil { + t.Fatal(err) + } + if err := crane.Push(img, src); err != nil { + t.Fatal(err) + } + + cmd := NewCmdEditFs(&[]crane.Option{}) + cmd.SetArgs([]string{src}) + cmd.Flags().Set("filename", "/foo/bar") + cmd.SetIn(strings.NewReader("baz")) + if err := cmd.Execute(); err != nil { + t.Fatal(err) + } + + img, err = crane.Pull(src) + if err != nil { + t.Fatal(err) + } + + r, _, err := findFile(img, "/foo/bar") + if err != nil { + t.Fatal(err) + } + + got, err := io.ReadAll(r) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(got, []byte("baz")) { + t.Fatalf("got: %s, want %s", got, "baz") + } + + // Edit the same file to make sure we can edit existing files. + cmd = NewCmdEditFs(&[]crane.Option{}) + cmd.SetArgs([]string{src}) + cmd.Flags().Set("filename", "/foo/bar") + cmd.SetIn(strings.NewReader("quux")) + if err := cmd.Execute(); err != nil { + t.Fatal(err) + } + + img, err = crane.Pull(src) + if err != nil { + t.Fatal(err) + } + + r, _, err = findFile(img, "/foo/bar") + if err != nil { + t.Fatal(err) + } + + got, err = io.ReadAll(r) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(got, []byte("quux")) { + t.Fatalf("got: %s, want %s", got, "quux") + } +} + +func TestFindFile(t *testing.T) { + img, err := random.Image(1024, 1) + if err != nil { + t.Fatal(err) + } + r, h, err := findFile(img, "/does-not-exist") + if err != nil { + t.Fatal(err) + } + + b, err := io.ReadAll(r) + if err != nil { + t.Fatal(err) + } + if len(b) != 0 { + t.Errorf("expected empty reader, got: %s", string(b)) + } + + if h.Name != "/does-not-exist" { + t.Errorf("tar.Header has wrong name: %v", h) + } +} |