upgrade: add cri upgrade test case
Signed-off-by: Abel Feng <fshb1988@gmail.com>
This commit is contained in:
parent
58af8cda54
commit
95d2a3b7c0
@ -49,6 +49,7 @@ func TestUpgrade(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("recover", runUpgradeTestCase(previousReleaseBinDir, shouldRecoverAllThePodsAfterUpgrade))
|
t.Run("recover", runUpgradeTestCase(previousReleaseBinDir, shouldRecoverAllThePodsAfterUpgrade))
|
||||||
t.Run("exec", runUpgradeTestCase(previousReleaseBinDir, execToExistingContainer))
|
t.Run("exec", runUpgradeTestCase(previousReleaseBinDir, execToExistingContainer))
|
||||||
|
t.Run("manipulate", runUpgradeTestCase(previousReleaseBinDir, shouldManipulateContainersInPodAfterUpgrade))
|
||||||
// TODO:
|
// TODO:
|
||||||
// Add stats/stop-existing-running-pods/...
|
// Add stats/stop-existing-running-pods/...
|
||||||
}
|
}
|
||||||
@ -195,7 +196,6 @@ func execToExistingContainer(t *testing.T, criRuntimeService cri.RuntimeService,
|
|||||||
t.Logf("Pulling image %q", busyboxImage)
|
t.Logf("Pulling image %q", busyboxImage)
|
||||||
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Log("Create sandbox")
|
t.Log("Create sandbox")
|
||||||
sbConfig := PodSandboxConfig("sandbox", "running")
|
sbConfig := PodSandboxConfig("sandbox", "running")
|
||||||
sbConfig.LogDirectory = t.TempDir()
|
sbConfig.LogDirectory = t.TempDir()
|
||||||
@ -258,6 +258,94 @@ func getFileSize(t *testing.T, filePath string) int64 {
|
|||||||
return st.Size()
|
return st.Size()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func shouldManipulateContainersInPodAfterUpgrade(t *testing.T, criRuntimeService cri.RuntimeService, criImageService cri.ImageManagerService) upgradeVerifyCaseFunc {
|
||||||
|
var busyboxImage = images.Get(images.BusyBox)
|
||||||
|
|
||||||
|
t.Logf("Pulling image %q", busyboxImage)
|
||||||
|
_, err := criImageService.PullImage(&criruntime.ImageSpec{Image: busyboxImage}, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
t.Log("Create a sandbox")
|
||||||
|
sbConfig := PodSandboxConfig("sandbox", "running-pod")
|
||||||
|
sb, err := criRuntimeService.RunPodSandbox(sbConfig, "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
t.Logf("Create a container config and run container in the pod")
|
||||||
|
containerConfig := ContainerConfig("running", busyboxImage, WithCommand("sleep", "1d"))
|
||||||
|
cn1, err := criRuntimeService.CreateContainer(sb, containerConfig, sbConfig)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, criRuntimeService.StartContainer(cn1))
|
||||||
|
|
||||||
|
t.Logf("Just create a container in the pod")
|
||||||
|
containerConfig = ContainerConfig("created", busyboxImage)
|
||||||
|
cn2, err := criRuntimeService.CreateContainer(sb, containerConfig, sbConfig)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
t.Logf("Just create stopped container in the pod")
|
||||||
|
containerConfig = ContainerConfig("stopped", busyboxImage, WithCommand("sleep", "1d"))
|
||||||
|
cn3, err := criRuntimeService.CreateContainer(sb, containerConfig, sbConfig)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, criRuntimeService.StartContainer(cn3))
|
||||||
|
require.NoError(t, criRuntimeService.StopContainer(cn3, 0))
|
||||||
|
|
||||||
|
return func(t *testing.T, criRuntimeService cri.RuntimeService) {
|
||||||
|
t.Log("Manipulating containers in the previous pod")
|
||||||
|
// For the running container, we get status and stats of it,
|
||||||
|
// exec and execsync in it, stop and remove it
|
||||||
|
status, err := criRuntimeService.ContainerStatus(cn1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_RUNNING)
|
||||||
|
_, err = criRuntimeService.ContainerStats(cn1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = criRuntimeService.Exec(&criruntime.ExecRequest{
|
||||||
|
ContainerId: cn1,
|
||||||
|
Cmd: []string{"/bin/sh"},
|
||||||
|
Stderr: false,
|
||||||
|
Stdout: true,
|
||||||
|
Stdin: true,
|
||||||
|
Tty: true,
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, criRuntimeService.StopContainer(cn1, 0))
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_EXITED)
|
||||||
|
require.NoError(t, criRuntimeService.RemoveContainer(cn1))
|
||||||
|
|
||||||
|
// For the created container, we start it, stop it and remove it
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_CREATED)
|
||||||
|
require.NoError(t, criRuntimeService.StartContainer(cn2))
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_RUNNING)
|
||||||
|
require.NoError(t, criRuntimeService.StopContainer(cn2, 0))
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn2)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_EXITED)
|
||||||
|
require.NoError(t, criRuntimeService.RemoveContainer(cn2))
|
||||||
|
|
||||||
|
// For the stopped container, we remove it
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn3)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_EXITED)
|
||||||
|
require.NoError(t, criRuntimeService.RemoveContainer(cn3))
|
||||||
|
|
||||||
|
// Create a new container in the previous pod, start, stop, and remove it
|
||||||
|
t.Logf("Create a container config and run container in the previous pod")
|
||||||
|
containerConfig = ContainerConfig("runinpreviouspod", busyboxImage, WithCommand("sleep", "1d"))
|
||||||
|
cn4, err := criRuntimeService.CreateContainer(sb, containerConfig, sbConfig)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NoError(t, criRuntimeService.StartContainer(cn4))
|
||||||
|
status, err = criRuntimeService.ContainerStatus(cn4)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, status.State, criruntime.ContainerState_CONTAINER_RUNNING)
|
||||||
|
require.NoError(t, criRuntimeService.StopContainer(cn4, 0))
|
||||||
|
require.NoError(t, criRuntimeService.RemoveContainer(cn4))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// cleanupPods deletes all the pods based on the cri.RuntimeService connection.
|
// cleanupPods deletes all the pods based on the cri.RuntimeService connection.
|
||||||
func cleanupPods(t *testing.T, criRuntimeService cri.RuntimeService) {
|
func cleanupPods(t *testing.T, criRuntimeService cri.RuntimeService) {
|
||||||
pods, err := criRuntimeService.ListPodSandbox(nil)
|
pods, err := criRuntimeService.ListPodSandbox(nil)
|
||||||
|
Loading…
Reference in New Issue
Block a user