From 2b92c70fa4ef9999c90132a6d32146660656a69c Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Mon, 25 Jul 2022 14:19:40 -0700 Subject: [PATCH] Fix command line parsing for image list Signed-off-by: Maksym Pavlenko --- integration/client/client_test.go | 2 +- integration/client/image_test.go | 4 +-- integration/client/lease_test.go | 2 +- integration/container_restart_test.go | 12 +++++---- integration/container_stats_test.go | 25 +++++++++++-------- .../container_update_resources_test.go | 10 +++++--- integration/duplicate_name_test.go | 5 ++-- integration/images/image_list.go | 18 +++++++------ integration/main_test.go | 1 + integration/restart_test.go | 5 ++-- integration/windows_hostprocess_test.go | 2 +- 11 files changed, 50 insertions(+), 36 deletions(-) diff --git a/integration/client/client_test.go b/integration/client/client_test.go index 12b612e07..35d4278b3 100644 --- a/integration/client/client_test.go +++ b/integration/client/client_test.go @@ -334,7 +334,7 @@ func TestImagePullAllPlatforms(t *testing.T) { defer cancel() cs := client.ContentStore() - img, err := client.Fetch(ctx, imagelist.PauseImage) + img, err := client.Fetch(ctx, imagelist.Get(imagelist.Pause)) if err != nil { t.Fatal(err) } diff --git a/integration/client/image_test.go b/integration/client/image_test.go index b3654e549..faa1cae33 100644 --- a/integration/client/image_test.go +++ b/integration/client/image_test.go @@ -32,7 +32,7 @@ import ( ) func TestImageIsUnpacked(t *testing.T) { - imageName := imagelist.PauseImage + imageName := imagelist.Get(imagelist.Pause) ctx, cancel := testContext(t) defer cancel() @@ -138,7 +138,7 @@ func TestImageUsage(t *testing.T) { t.Skip() } - imageName := imagelist.PauseImage + imageName := imagelist.Get(imagelist.Pause) ctx, cancel := testContext(t) defer cancel() diff --git a/integration/client/lease_test.go b/integration/client/lease_test.go index 036bd1341..455e12814 100644 --- a/integration/client/lease_test.go +++ b/integration/client/lease_test.go @@ -56,7 +56,7 @@ func TestLeaseResources(t *testing.T) { defer ls.Delete(ctx, l, leases.SynchronousDelete) // step 1: download image - imageName := imagelist.PauseImage + imageName := imagelist.Get(imagelist.Pause) image, err := client.Pull(ctx, imageName, WithPullUnpack, WithPullSnapshotter(snapshotterName)) if err != nil { diff --git a/integration/container_restart_test.go b/integration/container_restart_test.go index 0f97c5952..5fb6b69dc 100644 --- a/integration/container_restart_test.go +++ b/integration/container_restart_test.go @@ -29,12 +29,13 @@ func TestContainerRestart(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox1", "restart") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config and run container in a pod") containerConfig := ContainerConfig( "container1", - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) @@ -63,12 +64,13 @@ func TestFailedContainerRestart(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox1", "restart") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config in a pod with a command that fails") containerConfig := ContainerConfig( "container1", - images.PauseImage, + pauseImage, WithCommand("something-that-doesnt-exist"), WithTestLabels(), WithTestAnnotations(), @@ -89,7 +91,7 @@ func TestFailedContainerRestart(t *testing.T) { containerConfig = ContainerConfig( "container1", - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) diff --git a/integration/container_stats_test.go b/integration/container_stats_test.go index da09a05c7..469ce253c 100644 --- a/integration/container_stats_test.go +++ b/integration/container_stats_test.go @@ -34,12 +34,13 @@ func TestContainerStats(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox1", "stats") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config and run container in a pod") containerConfig := ContainerConfig( "container1", - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) @@ -146,7 +147,8 @@ func TestContainerListStats(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "running-pod", "statsls") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config and run containers in a pod") containerConfigMap := make(map[string]*runtime.ContainerConfig) @@ -154,7 +156,7 @@ func TestContainerListStats(t *testing.T) { cName := fmt.Sprintf("container%d", i) containerConfig := ContainerConfig( cName, - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) @@ -200,7 +202,8 @@ func TestContainerListStatsWithIdFilter(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "running-pod", "statsls") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config and run containers in a pod") containerConfigMap := make(map[string]*runtime.ContainerConfig) @@ -208,7 +211,7 @@ func TestContainerListStatsWithIdFilter(t *testing.T) { cName := fmt.Sprintf("container%d", i) containerConfig := ContainerConfig( cName, - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) @@ -259,7 +262,8 @@ func TestContainerListStatsWithSandboxIdFilter(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "running-pod", "statsls") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container config and run containers in a pod") containerConfigMap := make(map[string]*runtime.ContainerConfig) @@ -267,7 +271,7 @@ func TestContainerListStatsWithSandboxIdFilter(t *testing.T) { cName := fmt.Sprintf("container%d", i) containerConfig := ContainerConfig( cName, - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) @@ -319,7 +323,8 @@ func TestContainerListStatsWithIdSandboxIdFilter(t *testing.T) { t.Logf("Create a pod config and run sandbox container") sb, sbConfig := PodSandboxConfigWithCleanup(t, "running-pod", "statsls") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create container config and run containers in a pod") containerConfigMap := make(map[string]*runtime.ContainerConfig) @@ -327,7 +332,7 @@ func TestContainerListStatsWithIdSandboxIdFilter(t *testing.T) { cName := fmt.Sprintf("container%d", i) containerConfig := ContainerConfig( cName, - images.PauseImage, + pauseImage, WithTestLabels(), WithTestAnnotations(), ) diff --git a/integration/container_update_resources_test.go b/integration/container_update_resources_test.go index b59b2423e..9e8873668 100644 --- a/integration/container_update_resources_test.go +++ b/integration/container_update_resources_test.go @@ -152,7 +152,8 @@ func TestUpdateContainerResources_MemorySwap(t *testing.T) { t.Log("Create a sandbox") sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "update-container-swap-resources") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) memoryLimit := int64(128 * 1024 * 1024) baseSwapLimit := int64(200 * 1024 * 1024) @@ -169,7 +170,7 @@ func TestUpdateContainerResources_MemorySwap(t *testing.T) { t.Log("Create a container with memory limit but no swap") cnConfig := ContainerConfig( "container", - images.PauseImage, + pauseImage, WithResources(&runtime.LinuxContainerResources{ MemoryLimitInBytes: memoryLimit, MemorySwapLimitInBytes: baseSwapLimit, @@ -224,12 +225,13 @@ func TestUpdateContainerResources_MemoryLimit(t *testing.T) { t.Log("Create a sandbox") sb, sbConfig := PodSandboxConfigWithCleanup(t, "sandbox", "update-container-resources") - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Log("Create a container with memory limit") cnConfig := ContainerConfig( "container", - images.PauseImage, + pauseImage, WithResources(&runtime.LinuxContainerResources{ MemoryLimitInBytes: 200 * 1024 * 1024, }), diff --git a/integration/duplicate_name_test.go b/integration/duplicate_name_test.go index 0f4e41103..1037d5fae 100644 --- a/integration/duplicate_name_test.go +++ b/integration/duplicate_name_test.go @@ -31,12 +31,13 @@ func TestDuplicateName(t *testing.T) { _, err := runtimeService.RunPodSandbox(sbConfig, *runtimeHandler) require.Error(t, err) - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) t.Logf("Create a container") cnConfig := ContainerConfig( "container", - images.PauseImage, + pauseImage, ) _, err = runtimeService.CreateContainer(sb, cnConfig, sbConfig) require.NoError(t, err) diff --git a/integration/images/image_list.go b/integration/images/image_list.go index 2adda269a..6a4f3527a 100644 --- a/integration/images/image_list.go +++ b/integration/images/image_list.go @@ -20,6 +20,7 @@ import ( "flag" "fmt" "os" + "sync" "github.com/pelletier/go-toml" "github.com/sirupsen/logrus" @@ -38,14 +39,11 @@ type ImageList struct { } var ( - imageMap map[int]string - imageList ImageList - PauseImage string // This is the same with default sandbox image + imageMap map[int]string + imageList ImageList ) -func init() { - initImages(*imageListFile) -} +var initOnce sync.Once func initImages(imageListFile string) { imageList = ImageList{ @@ -58,6 +56,8 @@ func initImages(imageListFile string) { } if imageListFile != "" { + logrus.Infof("loading image list from file: %s", imageListFile) + fileContent, err := os.ReadFile(imageListFile) if err != nil { panic(fmt.Errorf("error reading '%v' file contents: %v", imageList, err)) @@ -70,9 +70,7 @@ func initImages(imageListFile string) { } logrus.Infof("Using the following image list: %+v", imageList) - imageMap = initImageMap(imageList) - PauseImage = Get(Pause) } const ( @@ -105,5 +103,9 @@ func initImageMap(imageList ImageList) map[int]string { // Get returns the fully qualified URI to an image (including version) func Get(image int) string { + initOnce.Do(func() { + initImages(*imageListFile) + }) + return imageMap[image] } diff --git a/integration/main_test.go b/integration/main_test.go index ef780f70a..7befa4a9b 100644 --- a/integration/main_test.go +++ b/integration/main_test.go @@ -32,6 +32,7 @@ import ( "github.com/containerd/containerd" cri "github.com/containerd/containerd/integration/cri-api/pkg/apis" + _ "github.com/containerd/containerd/integration/images" // Keep this around to parse `imageListFile` command line var "github.com/containerd/containerd/integration/remote" dialer "github.com/containerd/containerd/integration/remote/util" criconfig "github.com/containerd/containerd/pkg/cri/config" diff --git a/integration/restart_test.go b/integration/restart_test.go index e4151eb62..16ac5c8b6 100644 --- a/integration/restart_test.go +++ b/integration/restart_test.go @@ -109,12 +109,13 @@ func TestContainerdRestart(t *testing.T) { runtimeService.RemovePodSandbox(sid) }() - EnsureImageExists(t, images.PauseImage) + pauseImage := images.Get(images.Pause) + EnsureImageExists(t, pauseImage) s.id = sid for j := range s.containers { c := &s.containers[j] - cfg := ContainerConfig(c.name, images.PauseImage, + cfg := ContainerConfig(c.name, pauseImage, // Set pid namespace as per container, so that container won't die // when sandbox container is killed. WithPidNamespace(runtime.NamespaceMode_CONTAINER), diff --git a/integration/windows_hostprocess_test.go b/integration/windows_hostprocess_test.go index d5f32e79f..c0f7a74e6 100644 --- a/integration/windows_hostprocess_test.go +++ b/integration/windows_hostprocess_test.go @@ -38,7 +38,7 @@ var ( // Tests to verify the Windows HostProcess func TestWindowsHostProcess(t *testing.T) { - pauseImage := images.PauseImage + pauseImage := images.Get(images.Pause) EnsureImageExists(t, pauseImage) t.Run("run as Local Service", func(t *testing.T) {