Add error path testing to image handling by kubeGenericRuntimeManager
In https://github.com/kubernetes/kubernetes/pull/88372, we added the ability to inject errors to the `FakeImageService`. Use this ability to test the error paths executed by the `kubeGenericRuntimeManager` when underlying `ImageService` calls fail. I don't foresee this change having a huge impact, but it should set a good precedent for test coverage, and should the failure case behavior become more "interesting" or risky in the future, we already will have the scaffolding in place with which we can expand the tests.
This commit is contained in:
parent
e6c4ac3f0b
commit
f215096715
@ -18,6 +18,7 @@ package kuberuntime
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
@ -44,6 +45,20 @@ func TestPullImage(t *testing.T) {
|
||||
assert.Equal(t, images[0].RepoTags, []string{"busybox"})
|
||||
}
|
||||
|
||||
func TestPullImageWithError(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
fakeImageService.InjectError("PullImage", fmt.Errorf("test-error"))
|
||||
imageRef, err := fakeManager.PullImage(kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "", imageRef)
|
||||
|
||||
images, err := fakeManager.ListImages()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 0, len(images))
|
||||
}
|
||||
|
||||
func TestListImages(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
@ -62,6 +77,17 @@ func TestListImages(t *testing.T) {
|
||||
assert.Equal(t, expected.List(), actual.List())
|
||||
}
|
||||
|
||||
func TestListImagesWithError(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
fakeImageService.InjectError("ListImages", fmt.Errorf("test-failure"))
|
||||
|
||||
actualImages, err := fakeManager.ListImages()
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, actualImages)
|
||||
}
|
||||
|
||||
func TestGetImageRef(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
@ -73,6 +99,32 @@ func TestGetImageRef(t *testing.T) {
|
||||
assert.Equal(t, image, imageRef)
|
||||
}
|
||||
|
||||
func TestGetImageRefImageNotAvailableLocally(t *testing.T) {
|
||||
_, _, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
image := "busybox"
|
||||
|
||||
imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image})
|
||||
assert.NoError(t, err)
|
||||
|
||||
imageNotAvailableLocallyRef := ""
|
||||
assert.Equal(t, imageNotAvailableLocallyRef, imageRef)
|
||||
}
|
||||
|
||||
func TestGetImageRefWithError(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
image := "busybox"
|
||||
|
||||
fakeImageService.InjectError("ImageStatus", fmt.Errorf("test-error"))
|
||||
|
||||
imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image})
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "", imageRef)
|
||||
}
|
||||
|
||||
func TestRemoveImage(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
@ -86,6 +138,29 @@ func TestRemoveImage(t *testing.T) {
|
||||
assert.Equal(t, 0, len(fakeImageService.Images))
|
||||
}
|
||||
|
||||
func TestRemoveImageNoOpIfImageNotLocal(t *testing.T) {
|
||||
_, _, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = fakeManager.RemoveImage(kubecontainer.ImageSpec{Image: "busybox"})
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestRemoveImageWithError(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = fakeManager.PullImage(kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, len(fakeImageService.Images))
|
||||
|
||||
fakeImageService.InjectError("RemoveImage", fmt.Errorf("test-failure"))
|
||||
|
||||
err = fakeManager.RemoveImage(kubecontainer.ImageSpec{Image: "busybox"})
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, 1, len(fakeImageService.Images))
|
||||
}
|
||||
|
||||
func TestImageStats(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
@ -101,6 +176,17 @@ func TestImageStats(t *testing.T) {
|
||||
assert.Equal(t, expectedStats, actualStats)
|
||||
}
|
||||
|
||||
func TestImageStatsWithError(t *testing.T) {
|
||||
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
|
||||
assert.NoError(t, err)
|
||||
|
||||
fakeImageService.InjectError("ListImages", fmt.Errorf("test-failure"))
|
||||
|
||||
actualImageStats, err := fakeManager.ImageStats()
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, actualImageStats)
|
||||
}
|
||||
|
||||
func TestPullWithSecrets(t *testing.T) {
|
||||
// auth value is equivalent to: "username":"passed-user","password":"passed-password"
|
||||
dockerCfg := map[string]map[string]string{"index.docker.io/v1/": {"email": "passed-email", "auth": "cGFzc2VkLXVzZXI6cGFzc2VkLXBhc3N3b3Jk"}}
|
||||
|
Loading…
Reference in New Issue
Block a user