Skip to content

Commit d5f7e54

Browse files
authored
Merge pull request containerd#9665 from fuweid/upgrade-recover-images
integration: add test for recovering images
2 parents 611da71 + 748fe20 commit d5f7e54

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

integration/release_upgrade_linux_test.go

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import (
4040
)
4141

4242
// upgradeVerifyCaseFunc is used to verify the behavior after upgrade.
43-
type upgradeVerifyCaseFunc func(t *testing.T, criRuntimeService cri.RuntimeService)
43+
type upgradeVerifyCaseFunc func(t *testing.T, criRuntimeService cri.RuntimeService, criImageService cri.ImageManagerService)
4444

4545
// TODO: Support Windows
4646
func TestUpgrade(t *testing.T) {
@@ -50,6 +50,7 @@ func TestUpgrade(t *testing.T) {
5050
t.Run("recover", runUpgradeTestCase(previousReleaseBinDir, shouldRecoverAllThePodsAfterUpgrade))
5151
t.Run("exec", runUpgradeTestCase(previousReleaseBinDir, execToExistingContainer))
5252
t.Run("manipulate", runUpgradeTestCase(previousReleaseBinDir, shouldManipulateContainersInPodAfterUpgrade))
53+
t.Run("recover-images", runUpgradeTestCase(previousReleaseBinDir, shouldRecoverExistingImages))
5354
// TODO:
5455
// Add stats/stop-existing-running-pods/...
5556
}
@@ -107,7 +108,7 @@ func runUpgradeTestCase(
107108
})
108109

109110
t.Log("Verifing")
110-
upgradeCaseFunc(t, currentProc.criRuntimeService(t))
111+
upgradeCaseFunc(t, currentProc.criRuntimeService(t), currentProc.criImageService(t))
111112
}
112113
}
113114

@@ -148,7 +149,7 @@ func shouldRecoverAllThePodsAfterUpgrade(t *testing.T, criRuntimeService cri.Run
148149
t.Log("Stop second sandbox")
149150
require.NoError(t, criRuntimeService.StopPodSandbox(secondSB))
150151

151-
return func(t *testing.T, criRuntimeService cri.RuntimeService) {
152+
return func(t *testing.T, criRuntimeService cri.RuntimeService, _ cri.ImageManagerService) {
152153
t.Log("List Pods")
153154

154155
pods, err := criRuntimeService.ListPodSandbox(nil)
@@ -212,7 +213,7 @@ func execToExistingContainer(t *testing.T, criRuntimeService cri.RuntimeService,
212213
// NOTE: Wait for containerd to flush data into log
213214
time.Sleep(2 * time.Second)
214215

215-
return func(t *testing.T, criRuntimeService cri.RuntimeService) {
216+
return func(t *testing.T, criRuntimeService cri.RuntimeService, _ cri.ImageManagerService) {
216217
pods, err := criRuntimeService.ListPodSandbox(nil)
217218
require.NoError(t, err)
218219
require.Len(t, pods, 1)
@@ -288,7 +289,7 @@ func shouldManipulateContainersInPodAfterUpgrade(t *testing.T, criRuntimeService
288289
require.NoError(t, criRuntimeService.StartContainer(cn3))
289290
require.NoError(t, criRuntimeService.StopContainer(cn3, 0))
290291

291-
return func(t *testing.T, criRuntimeService cri.RuntimeService) {
292+
return func(t *testing.T, criRuntimeService cri.RuntimeService, _ cri.ImageManagerService) {
292293
t.Log("Manipulating containers in the previous pod")
293294
// For the running container, we get status and stats of it,
294295
// exec and execsync in it, stop and remove it
@@ -346,6 +347,32 @@ func shouldManipulateContainersInPodAfterUpgrade(t *testing.T, criRuntimeService
346347
}
347348
}
348349

350+
func shouldRecoverExistingImages(t *testing.T, criRuntimeService cri.RuntimeService, criImageService cri.ImageManagerService) upgradeVerifyCaseFunc {
351+
images := []string{images.Get(images.BusyBox), images.Get(images.Alpine)}
352+
353+
expectedRefs := []string{}
354+
for _, img := range images {
355+
t.Logf("Pulling image %q", img)
356+
imgRef, err := criImageService.PullImage(&criruntime.ImageSpec{Image: img}, nil, nil)
357+
require.NoError(t, err)
358+
expectedRefs = append(expectedRefs, imgRef)
359+
}
360+
361+
return func(t *testing.T, _ cri.RuntimeService, criImageService cri.ImageManagerService) {
362+
t.Log("List all images")
363+
res, err := criImageService.ListImages(nil)
364+
require.NoError(t, err)
365+
require.Len(t, res, 2)
366+
367+
for idx, img := range images {
368+
t.Logf("Check image %s status", img)
369+
gotImg, err := criImageService.ImageStatus(&criruntime.ImageSpec{Image: img})
370+
require.NoError(t, err)
371+
require.Equal(t, expectedRefs[idx], gotImg.Id)
372+
}
373+
}
374+
}
375+
349376
// cleanupPods deletes all the pods based on the cri.RuntimeService connection.
350377
func cleanupPods(t *testing.T, criRuntimeService cri.RuntimeService) {
351378
pods, err := criRuntimeService.ListPodSandbox(nil)

0 commit comments

Comments
 (0)