automation-tests/common/libimage/remove_test.go

58 lines
1.8 KiB
Go

//go:build !remote
package libimage
import (
"context"
"os"
"testing"
"github.com/containers/common/pkg/config"
"github.com/stretchr/testify/require"
)
func TestRemoveImages(t *testing.T) {
// Note: this will resolve pull from the GCR registry (see
// testdata/registries.conf).
busyboxLatest := "quay.io/libpod/busybox:latest"
runtime := testNewRuntime(t)
ctx := context.Background()
pullOptions := &PullOptions{}
pullOptions.Writer = os.Stdout
pulledImages, err := runtime.Pull(ctx, busyboxLatest, config.PullPolicyAlways, pullOptions)
require.NoError(t, err)
require.Len(t, pulledImages, 1)
err = pulledImages[0].Tag("foobar")
require.NoError(t, err)
// containers/podman/issues/10685 - force removal on image with
// multiple tags will only untag but not remove all tags including the
// image.
rmReports, rmErrors := runtime.RemoveImages(ctx, []string{"foobar"}, &RemoveImagesOptions{Force: true})
require.Nil(t, rmErrors)
require.Len(t, rmReports, 1)
require.Equal(t, pulledImages[0].ID(), rmReports[0].ID)
require.False(t, rmReports[0].Removed)
require.Equal(t, []string{"localhost/foobar:latest"}, rmReports[0].Untagged)
// "foobar" has already been removed, so we'd get an error
_, rmErrors = runtime.RemoveImages(ctx, []string{"foobar"}, nil)
require.NotNil(t, rmErrors)
// ... unless we set Ignore=true
rmReports, rmErrors = runtime.RemoveImages(ctx, []string{"foobar"}, &RemoveImagesOptions{Ignore: true})
require.Nil(t, rmErrors)
require.Len(t, rmReports, 0)
// The busybox image is still present even if foobar was force removed.
exists, err := runtime.Exists(busyboxLatest)
require.NoError(t, err)
require.True(t, exists)
rmReports, rmErrors = runtime.RemoveImages(ctx, []string{"foobar", "busybox"}, &RemoveImagesOptions{Ignore: true})
require.Nil(t, rmErrors)
require.Len(t, rmReports, 1)
}