Fail integration test early when a plugin load fails

Avoid running tests when a plugin fails to load and return the init
error from the plugin. This prevents the test failing later with an
unhelpful error and attempting to find the actual error in the daemon
logs.

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2024-06-03 17:08:18 -07:00
parent d4148d94cc
commit b1a23c495a
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB

View File

@ -23,10 +23,13 @@ import (
"io" "io"
"os/exec" "os/exec"
"runtime" "runtime"
"strings"
"sync" "sync"
"syscall" "syscall"
"time" "time"
"github.com/containerd/plugin"
. "github.com/containerd/containerd/v2/client" . "github.com/containerd/containerd/v2/client"
) )
@ -79,6 +82,21 @@ func (d *daemon) waitForStart(ctx context.Context) (*Client, error) {
} }
continue continue
} }
resp, perr := client.IntrospectionService().Plugins(ctx)
if perr != nil {
return nil, fmt.Errorf("failed to get plugin list: %w", perr)
}
var loadErr error
for _, p := range resp.Plugins {
if p.InitErr != nil && !strings.Contains(p.InitErr.Message, plugin.ErrSkipPlugin.Error()) {
pluginErr := fmt.Errorf("failed to load %s.%s: %s", p.Type, p.ID, p.InitErr.Message)
loadErr = errors.Join(loadErr, pluginErr)
}
}
if loadErr != nil {
return nil, loadErr
}
return client, err return client, err
case <-ctx.Done(): case <-ctx.Done():
return nil, fmt.Errorf("context deadline exceeded: %w", err) return nil, fmt.Errorf("context deadline exceeded: %w", err)