diff options
author | Daniel Baumann <daniel@debian.org> | 2024-10-20 23:07:42 +0200 |
---|---|---|
committer | Daniel Baumann <daniel@debian.org> | 2024-11-09 15:38:42 +0100 |
commit | 714c83b2736d7e308bc33c49057952490eb98be2 (patch) | |
tree | 1d9ba7035798368569cd49056f4d596efc908cd8 /pkg/container/docker_images_test.go | |
parent | Initial commit. (diff) | |
download | forgejo-act-upstream.tar.xz forgejo-act-upstream.zip |
Adding upstream version 1.21.4.HEADupstream/1.21.4upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'pkg/container/docker_images_test.go')
-rw-r--r-- | pkg/container/docker_images_test.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/pkg/container/docker_images_test.go b/pkg/container/docker_images_test.go new file mode 100644 index 0000000..cf13f43 --- /dev/null +++ b/pkg/container/docker_images_test.go @@ -0,0 +1,67 @@ +package container + +import ( + "context" + "io" + "testing" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" + log "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" +) + +func init() { + log.SetLevel(log.DebugLevel) +} + +func TestImageExistsLocally(t *testing.T) { + if testing.Short() { + t.Skip("skipping integration test") + } + ctx := context.Background() + // to help make this test reliable and not flaky, we need to have + // an image that will exist, and onew that won't exist + + // Test if image exists with specific tag + invalidImageTag, err := ImageExistsLocally(ctx, "library/alpine:this-random-tag-will-never-exist", "linux/amd64") + assert.Nil(t, err) + assert.Equal(t, false, invalidImageTag) + + // Test if image exists with specific architecture (image platform) + invalidImagePlatform, err := ImageExistsLocally(ctx, "alpine:latest", "windows/amd64") + assert.Nil(t, err) + assert.Equal(t, false, invalidImagePlatform) + + // pull an image + cli, err := client.NewClientWithOpts(client.FromEnv) + assert.Nil(t, err) + cli.NegotiateAPIVersion(context.Background()) + + // Chose alpine latest because it's so small + // maybe we should build an image instead so that tests aren't reliable on dockerhub + readerDefault, err := cli.ImagePull(ctx, "node:16-buster-slim", types.ImagePullOptions{ + Platform: "linux/amd64", + }) + assert.Nil(t, err) + defer readerDefault.Close() + _, err = io.ReadAll(readerDefault) + assert.Nil(t, err) + + imageDefaultArchExists, err := ImageExistsLocally(ctx, "node:16-buster-slim", "linux/amd64") + assert.Nil(t, err) + assert.Equal(t, true, imageDefaultArchExists) + + // Validate if another architecture platform can be pulled + readerArm64, err := cli.ImagePull(ctx, "node:16-buster-slim", types.ImagePullOptions{ + Platform: "linux/arm64", + }) + assert.Nil(t, err) + defer readerArm64.Close() + _, err = io.ReadAll(readerArm64) + assert.Nil(t, err) + + imageArm64Exists, err := ImageExistsLocally(ctx, "node:16-buster-slim", "linux/arm64") + assert.Nil(t, err) + assert.Equal(t, true, imageArm64Exists) +} |