Second attempt: Plumb context to Kubelet CRI calls (#113591)

* plumb context from CRI calls through kubelet

* clean up extra timeouts

* try fixing incorrectly cancelled context
This commit is contained in:
David Ashpole
2022-11-05 09:02:13 -04:00
committed by GitHub
parent 27766455f1
commit 64af1adace
115 changed files with 1444 additions and 1190 deletions

View File

@@ -17,6 +17,7 @@ limitations under the License.
package kuberuntime
import (
"context"
"encoding/json"
"fmt"
"testing"
@@ -32,34 +33,37 @@ import (
)
func TestPullImage(t *testing.T) {
ctx := context.Background()
_, _, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
imageRef, err := fakeManager.PullImage(kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
imageRef, err := fakeManager.PullImage(ctx, kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
assert.NoError(t, err)
assert.Equal(t, "busybox", imageRef)
images, err := fakeManager.ListImages()
images, err := fakeManager.ListImages(ctx)
assert.NoError(t, err)
assert.Equal(t, 1, len(images))
assert.Equal(t, images[0].RepoTags, []string{"busybox"})
}
func TestPullImageWithError(t *testing.T) {
ctx := context.Background()
_, 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)
imageRef, err := fakeManager.PullImage(ctx, kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
assert.Error(t, err)
assert.Equal(t, "", imageRef)
images, err := fakeManager.ListImages()
images, err := fakeManager.ListImages(ctx)
assert.NoError(t, err)
assert.Equal(t, 0, len(images))
}
func TestListImages(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
@@ -67,7 +71,7 @@ func TestListImages(t *testing.T) {
expected := sets.NewString(images...)
fakeImageService.SetFakeImages(images)
actualImages, err := fakeManager.ListImages()
actualImages, err := fakeManager.ListImages(ctx)
assert.NoError(t, err)
actual := sets.NewString()
for _, i := range actualImages {
@@ -78,34 +82,37 @@ func TestListImages(t *testing.T) {
}
func TestListImagesWithError(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
fakeImageService.InjectError("ListImages", fmt.Errorf("test-failure"))
actualImages, err := fakeManager.ListImages()
actualImages, err := fakeManager.ListImages(ctx)
assert.Error(t, err)
assert.Nil(t, actualImages)
}
func TestGetImageRef(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
image := "busybox"
fakeImageService.SetFakeImages([]string{image})
imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image})
imageRef, err := fakeManager.GetImageRef(ctx, kubecontainer.ImageSpec{Image: image})
assert.NoError(t, err)
assert.Equal(t, image, imageRef)
}
func TestGetImageRefImageNotAvailableLocally(t *testing.T) {
ctx := context.Background()
_, _, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
image := "busybox"
imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image})
imageRef, err := fakeManager.GetImageRef(ctx, kubecontainer.ImageSpec{Image: image})
assert.NoError(t, err)
imageNotAvailableLocallyRef := ""
@@ -113,6 +120,7 @@ func TestGetImageRefImageNotAvailableLocally(t *testing.T) {
}
func TestGetImageRefWithError(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
@@ -120,48 +128,52 @@ func TestGetImageRefWithError(t *testing.T) {
fakeImageService.InjectError("ImageStatus", fmt.Errorf("test-error"))
imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image})
imageRef, err := fakeManager.GetImageRef(ctx, kubecontainer.ImageSpec{Image: image})
assert.Error(t, err)
assert.Equal(t, "", imageRef)
}
func TestRemoveImage(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
_, err = fakeManager.PullImage(kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
_, err = fakeManager.PullImage(ctx, kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
assert.NoError(t, err)
assert.Equal(t, 1, len(fakeImageService.Images))
err = fakeManager.RemoveImage(kubecontainer.ImageSpec{Image: "busybox"})
err = fakeManager.RemoveImage(ctx, kubecontainer.ImageSpec{Image: "busybox"})
assert.NoError(t, err)
assert.Equal(t, 0, len(fakeImageService.Images))
}
func TestRemoveImageNoOpIfImageNotLocal(t *testing.T) {
ctx := context.Background()
_, _, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
err = fakeManager.RemoveImage(kubecontainer.ImageSpec{Image: "busybox"})
err = fakeManager.RemoveImage(ctx, kubecontainer.ImageSpec{Image: "busybox"})
assert.NoError(t, err)
}
func TestRemoveImageWithError(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
_, err = fakeManager.PullImage(kubecontainer.ImageSpec{Image: "busybox"}, nil, nil)
_, err = fakeManager.PullImage(ctx, 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"})
err = fakeManager.RemoveImage(ctx, kubecontainer.ImageSpec{Image: "busybox"})
assert.Error(t, err)
assert.Equal(t, 1, len(fakeImageService.Images))
}
func TestImageStats(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
@@ -170,24 +182,26 @@ func TestImageStats(t *testing.T) {
images := []string{"1111", "2222", "3333"}
fakeImageService.SetFakeImages(images)
actualStats, err := fakeManager.ImageStats()
actualStats, err := fakeManager.ImageStats(ctx)
assert.NoError(t, err)
expectedStats := &kubecontainer.ImageStats{TotalStorageBytes: imageSize * uint64(len(images))}
assert.Equal(t, expectedStats, actualStats)
}
func TestImageStatsWithError(t *testing.T) {
ctx := context.Background()
_, fakeImageService, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
fakeImageService.InjectError("ListImages", fmt.Errorf("test-failure"))
actualImageStats, err := fakeManager.ImageStats()
actualImageStats, err := fakeManager.ImageStats(ctx)
assert.Error(t, err)
assert.Nil(t, actualImageStats)
}
func TestPullWithSecrets(t *testing.T) {
ctx := context.Background()
// 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"}}
dockercfgContent, err := json.Marshal(dockerCfg)
@@ -252,13 +266,14 @@ func TestPullWithSecrets(t *testing.T) {
_, fakeImageService, fakeManager, err := customTestRuntimeManager(builtInKeyRing)
require.NoError(t, err)
_, err = fakeManager.PullImage(kubecontainer.ImageSpec{Image: test.imageName}, test.passedSecrets, nil)
_, err = fakeManager.PullImage(ctx, kubecontainer.ImageSpec{Image: test.imageName}, test.passedSecrets, nil)
require.NoError(t, err)
fakeImageService.AssertImagePulledWithAuth(t, &runtimeapi.ImageSpec{Image: test.imageName, Annotations: make(map[string]string)}, test.expectedAuth, description)
}
}
func TestPullThenListWithAnnotations(t *testing.T) {
ctx := context.Background()
_, _, fakeManager, err := createTestRuntimeManager()
assert.NoError(t, err)
@@ -269,10 +284,10 @@ func TestPullThenListWithAnnotations(t *testing.T) {
},
}
_, err = fakeManager.PullImage(imageSpec, nil, nil)
_, err = fakeManager.PullImage(ctx, imageSpec, nil, nil)
assert.NoError(t, err)
images, err := fakeManager.ListImages()
images, err := fakeManager.ListImages(ctx)
assert.NoError(t, err)
assert.Equal(t, 1, len(images))
assert.Equal(t, images[0].Spec, imageSpec)