diff options
-rw-r--r-- | libpod/image/image.go | 11 | ||||
-rw-r--r-- | libpod/image/image_test.go | 12 | ||||
-rw-r--r-- | test/e2e/images_test.go | 14 |
3 files changed, 35 insertions, 2 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go index 5413c4e6b..c79844f7f 100644 --- a/libpod/image/image.go +++ b/libpod/image/image.go @@ -102,7 +102,6 @@ func (ir *Runtime) newFromStorage(img *storage.Image) *Image { // to only deal with local images already in the store (or // its aliases) func (ir *Runtime) NewFromLocal(name string) (*Image, error) { - image := Image{ InputName: name, Local: true, @@ -166,6 +165,14 @@ func (i *Image) reloadImage() error { return nil } +// stringSha256 strips sha256 from user input +func stripSha256(name string) string { + if strings.HasPrefix(name, "sha256:") && len(name) > 7 { + return name[7:] + } + return name +} + // getLocalImage resolves an unknown input describing an image and // returns a storage.Image or an error. It is used by NewFromLocal. func (i *Image) getLocalImage() (*storage.Image, error) { @@ -174,7 +181,7 @@ func (i *Image) getLocalImage() (*storage.Image, error) { return nil, errors.Errorf("input name is blank") } var taggedName string - img, err := i.imageruntime.getImage(i.InputName) + img, err := i.imageruntime.getImage(stripSha256(i.InputName)) if err == nil { return img.image, err } diff --git a/libpod/image/image_test.go b/libpod/image/image_test.go index 5c7cc191d..cb32b6cae 100644 --- a/libpod/image/image_test.go +++ b/libpod/image/image_test.go @@ -165,6 +165,7 @@ func TestImage_MatchRepoTag(t *testing.T) { } // Test against tagged images of busybox + // foo should resolve to foo:latest repoTag, err := newImage.MatchRepoTag("foo") assert.NoError(t, err) @@ -185,3 +186,14 @@ func Test_splitString(t *testing.T) { assert.Equal(t, splitString("a/foo/bar"), "bar") assert.Equal(t, splitString("bar"), "bar") } + +// Test_stripSha256 tests test the stripSha256 function which removes +// the prefix "sha256:" from a string if it is present +func Test_stripSha256(t *testing.T) { + assert.Equal(t, stripSha256(""), "") + assert.Equal(t, stripSha256("test1"), "test1") + assert.Equal(t, stripSha256("sha256:9110ae7f579f35ee0c3938696f23fe0f5fbe641738ea52eb83c2df7e9995fa17"), "9110ae7f579f35ee0c3938696f23fe0f5fbe641738ea52eb83c2df7e9995fa17") + assert.Equal(t, stripSha256("sha256:9110ae7f"), "9110ae7f") + assert.Equal(t, stripSha256("sha256:"), "sha256:") + assert.Equal(t, stripSha256("sha256:a"), "a") +} diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go index e05281ac9..8b9b889aa 100644 --- a/test/e2e/images_test.go +++ b/test/e2e/images_test.go @@ -3,6 +3,7 @@ package integration import ( "os" + "fmt" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) @@ -129,4 +130,17 @@ var _ = Describe("Podman images", func() { Expect(result.ExitCode()).To(Equal(0)) Expect(len(result.OutputToStringArray())).To(Equal(1)) }) + + It("podman check for image with sha256: prefix", func() { + session := podmanTest.Podman([]string{"inspect", "--format=json", ALPINE}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + Expect(session.IsJSONOutputValid()).To(BeTrue()) + imageData := session.InspectImageJSON() + + result := podmanTest.Podman([]string{"images", fmt.Sprintf("sha256:%s", imageData[0].ID)}) + result.WaitWithDefaultTimeout() + Expect(result.ExitCode()).To(Equal(0)) + }) + }) |