add e2e test for image pull serialize and parallel

- wait for pod pulled: running/failed(no restart)
This commit is contained in:
Paco Xu
2023-10-24 14:04:21 +08:00
parent a8fc7ae761
commit 2bbc09b49d
7 changed files with 322 additions and 19 deletions

View File

@@ -110,7 +110,9 @@ func getNodeProblemDetectorImage() string {
// puller represents a generic image puller
type puller interface {
// Pull pulls an image by name
Pull(image string) ([]byte, error)
Pull(ctx context.Context, image string) ([]byte, error)
// Remove removes an image by name
Remove(ctx context.Context, image string) error
// Name returns the name of the specific puller implementation
Name() string
}
@@ -123,15 +125,19 @@ func (rp *remotePuller) Name() string {
return "CRI"
}
func (rp *remotePuller) Pull(image string) ([]byte, error) {
resp, err := rp.imageService.ImageStatus(context.Background(), &runtimeapi.ImageSpec{Image: image}, false)
func (rp *remotePuller) Pull(ctx context.Context, image string) ([]byte, error) {
resp, err := rp.imageService.ImageStatus(ctx, &runtimeapi.ImageSpec{Image: image}, false)
if err == nil && resp.GetImage() != nil {
return nil, nil
}
_, err = rp.imageService.PullImage(context.Background(), &runtimeapi.ImageSpec{Image: image}, nil, nil)
_, err = rp.imageService.PullImage(ctx, &runtimeapi.ImageSpec{Image: image}, nil, nil)
return nil, err
}
func (rp *remotePuller) Remove(ctx context.Context, image string) error {
return rp.imageService.RemoveImage(ctx, &runtimeapi.ImageSpec{Image: image})
}
func getPuller() (puller, error) {
_, is, err := getCRIClient()
if err != nil {
@@ -143,7 +149,7 @@ func getPuller() (puller, error) {
}
// PrePullAllImages pre-fetches all images tests depend on so that we don't fail in an actual test.
func PrePullAllImages() error {
func PrePullAllImages(ctx context.Context) error {
puller, err := getPuller()
if err != nil {
return err
@@ -191,7 +197,7 @@ func PrePullAllImages() error {
if retryCount > 0 {
time.Sleep(imagePullRetryDelay)
}
if output, pullErr = puller.Pull(images[i]); pullErr == nil {
if output, pullErr = puller.Pull(ctx, images[i]); pullErr == nil {
break
}
klog.Warningf("Failed to pull %s as user %q, retrying in %s (%d of %d): %v",
@@ -211,6 +217,14 @@ func PrePullAllImages() error {
return utilerrors.NewAggregate(pullErrs)
}
func RemoveImage(ctx context.Context, image string) error {
puller, err := getPuller()
if err != nil {
return err
}
return puller.Remove(ctx, image)
}
func getContainerImageFromE2ETestDaemonset(dsYamlPath string) (string, error) {
data, err := e2etestfiles.Read(dsYamlPath)
if err != nil {