v1.30.1 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2024 License: Apache-2.0 Imports: 41 Imported by: 0



The tests in this directory cover dynamic resource allocation support in Kubernetes. They do not test the correct behavior of arbitrary dynamic resource allocation drivers.

If such a driver is needed, then the in-tree test/e2e/dra/test-driver is used, with a slight twist: instead of deploying that driver directly in the cluster, the necessary sockets for interaction with kubelet (registration and dynamic resource allocation) get proxied into the e2e.test binary. This reuses the work done for CSI mock testing. The advantage is that no separate images are needed for the test driver and that the e2e test has full control over all gRPC calls, in case that it needs that for operations like error injection or checking calls.

Cluster setup preparation

The container runtime must support CDI. CRI-O supports CDI starting from release 1.23, Containerd supports CDI starting from release 1.7. To bring up a Kind cluster with Containerd, two things are needed:

NB: Kind switched to use worker-node base image with Containerd 1.7 by default starting from release 0.20, build kind from latest main branch sources or use Kind release binary 0.20 or later.

Build kind node image

After building Kubernetes, in Kubernetes source code tree build new node image:

$ kind build node-image --image dra/node:latest $(pwd)

Bring up a Kind cluster

$ kind create cluster --config test/e2e/dra/kind.yaml --image dra/node:latest

Run tests

  • Build ginkgo
$ make ginkgo
  • Run e2e tests for the Dynamic Resource Allocation feature:
$ KUBECONFIG=~/.kube/config _output/bin/ginkgo -p -v -focus=Feature:DynamicResourceAllocation ./test/e2e




View Source
const (
	NodePrepareResourceMethod       = "/v1alpha2.Node/NodePrepareResource"
	NodePrepareResourcesMethod      = "/v1alpha3.Node/NodePrepareResources"
	NodeUnprepareResourceMethod     = "/v1alpha2.Node/NodeUnprepareResource"
	NodeUnprepareResourcesMethod    = "/v1alpha3.Node/NodeUnprepareResources"
	NodeListAndWatchResourcesMethod = "/v1alpha3.Node/NodeListAndWatchResources"


This section is empty.


This section is empty.


type Driver

type Driver struct {
	NameSuffix string
	Controller *app.ExampleController
	Name       string
	Nodes      map[string]*app.ExamplePlugin

	NodeV1alpha2, NodeV1alpha3 bool
	// contains filtered or unexported fields

func NewDriver

func NewDriver(f *framework.Framework, nodes *Nodes, configureResources func() app.Resources) *Driver

NewDriver sets up controller (as client of the cluster) and kubelet plugin (via proxy) before the test runs. It cleans up after the test.

func (*Driver) CallCount

func (d *Driver) CallCount(m MethodInstance) int64

func (*Driver) Fail

func (d *Driver) Fail(m MethodInstance, injectError bool)

func (*Driver) IsGone added in v1.30.0

func (d *Driver) IsGone(ctx context.Context)

func (*Driver) Nodenames

func (d *Driver) Nodenames() (nodenames []string)

func (*Driver) SetUp

func (d *Driver) SetUp(nodes *Nodes, resources app.Resources)

func (*Driver) TearDown

func (d *Driver) TearDown()

type MethodInstance

type MethodInstance struct {
	Nodename   string
	FullMethod string

type Nodes

type Nodes struct {
	NodeNames []string

func NewNodes

func NewNodes(f *framework.Framework, minNodes, maxNodes int) *Nodes

NewNodes selects nodes to run the test on.


Path Synopsis
Package app does all of the work necessary to configure and run a Kubernetes app process.
Package app does all of the work necessary to configure and run a Kubernetes app process.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL