Skip to content

Commit 1d42ba7

Browse files
committed
Add e2e tests for resource v1beta2 API
1 parent e761be4 commit 1d42ba7

File tree

2 files changed

+138
-1
lines changed

2 files changed

+138
-1
lines changed

test/e2e/dra/dra.go

+137
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
v1 "k8s.io/api/core/v1"
3737
resourcealphaapi "k8s.io/api/resource/v1alpha3"
3838
resourceapi "k8s.io/api/resource/v1beta1"
39+
resourceapiv1beta2 "k8s.io/api/resource/v1beta2"
3940
apierrors "k8s.io/apimachinery/pkg/api/errors"
4041
"k8s.io/apimachinery/pkg/api/resource"
4142
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -1265,6 +1266,88 @@ var _ = framework.SIGDescribe("node")("DRA", feature.DynamicResourceAllocation,
12651266
})
12661267
}
12671268

1269+
v1beta2Tests := func() {
1270+
nodes := NewNodes(f, 1, 1)
1271+
maxAllocations := 1
1272+
generateResources := func() Resources {
1273+
return perNode(maxAllocations, nodes)()
1274+
}
1275+
driver := NewDriver(f, nodes, generateResources) // All tests get their own driver instance.
1276+
b := newBuilder(f, driver)
1277+
// We have to set the parameters *before* creating the class.
1278+
b.classParameters = `{"x":"y"}`
1279+
expectedEnv := []string{"admin_x", "y"}
1280+
_, expected := b.parametersEnv()
1281+
expectedEnv = append(expectedEnv, expected...)
1282+
1283+
ginkgo.It("supports simple ResourceClaim", func(ctx context.Context) {
1284+
pod, template := b.podInlineWithV1beta2()
1285+
b.create(ctx, pod, template)
1286+
b.testPod(ctx, f, pod, expectedEnv...)
1287+
})
1288+
1289+
f.It("supports requests with alternatives", feature.DRAPrioritizedList, func(ctx context.Context) {
1290+
claimName := "external-multiclaim"
1291+
parameters, _ := b.parametersEnv()
1292+
claim := &resourceapiv1beta2.ResourceClaim{
1293+
ObjectMeta: metav1.ObjectMeta{
1294+
Name: claimName,
1295+
},
1296+
Spec: resourceapiv1beta2.ResourceClaimSpec{
1297+
Devices: resourceapiv1beta2.DeviceClaim{
1298+
Requests: []resourceapiv1beta2.DeviceRequest{{
1299+
Name: "request-1",
1300+
FirstAvailable: []resourceapiv1beta2.DeviceSubRequest{
1301+
{
1302+
Name: "sub-request-1",
1303+
DeviceClassName: b.className(),
1304+
AllocationMode: resourceapiv1beta2.DeviceAllocationModeExactCount,
1305+
Count: 2,
1306+
},
1307+
{
1308+
Name: "sub-request-2",
1309+
DeviceClassName: b.className(),
1310+
AllocationMode: resourceapiv1beta2.DeviceAllocationModeExactCount,
1311+
Count: 1,
1312+
},
1313+
},
1314+
}},
1315+
Config: []resourceapiv1beta2.DeviceClaimConfiguration{{
1316+
DeviceConfiguration: resourceapiv1beta2.DeviceConfiguration{
1317+
Opaque: &resourceapiv1beta2.OpaqueDeviceConfiguration{
1318+
Driver: b.driver.Name,
1319+
Parameters: runtime.RawExtension{
1320+
Raw: []byte(parameters),
1321+
},
1322+
},
1323+
},
1324+
}},
1325+
},
1326+
},
1327+
}
1328+
pod := b.podExternal()
1329+
podClaimName := "resource-claim"
1330+
pod.Spec.ResourceClaims = []v1.PodResourceClaim{
1331+
{
1332+
Name: podClaimName,
1333+
ResourceClaimName: &claimName,
1334+
},
1335+
}
1336+
b.create(ctx, claim, pod)
1337+
b.testPod(ctx, f, pod, expectedEnv...)
1338+
1339+
var allocatedResourceClaim *resourceapi.ResourceClaim
1340+
gomega.Eventually(ctx, func(ctx context.Context) (*resourceapi.ResourceClaim, error) {
1341+
var err error
1342+
allocatedResourceClaim, err = f.ClientSet.ResourceV1beta1().ResourceClaims(f.Namespace.Name).Get(ctx, claim.Name, metav1.GetOptions{})
1343+
return allocatedResourceClaim, err
1344+
}).WithTimeout(f.Timeouts.PodDelete).ShouldNot(gomega.HaveField("Status.Allocation", (*resourceapi.AllocationResult)(nil)))
1345+
results := allocatedResourceClaim.Status.Allocation.Devices.Results
1346+
gomega.Expect(results).To(gomega.HaveLen(1))
1347+
gomega.Expect(results[0].Request).To(gomega.Equal("request-1/sub-request-2"))
1348+
})
1349+
}
1350+
12681351
ginkgo.Context("on single node", func() {
12691352
singleNodeTests()
12701353
})
@@ -1277,6 +1360,14 @@ var _ = framework.SIGDescribe("node")("DRA", feature.DynamicResourceAllocation,
12771360
prioritizedListTests()
12781361
})
12791362

1363+
ginkgo.Context("with prioritized list", func() {
1364+
prioritizedListTests()
1365+
})
1366+
1367+
ginkgo.Context("with v1beta2 API", func() {
1368+
v1beta2Tests()
1369+
})
1370+
12801371
framework.Context("with device taints", feature.DRADeviceTaints, framework.WithFeatureGate(features.DRADeviceTaints), func() {
12811372
nodes := NewNodes(f, 1, 1)
12821373
driver := NewDriver(f, nodes, func() Resources {
@@ -2100,6 +2191,34 @@ func (b *builder) claimSpec() resourceapi.ResourceClaimSpec {
21002191
return spec
21012192
}
21022193

2194+
// claimSpecWithV1beta2 returns the device request for a claim or claim template
2195+
// with the associated config using the v1beta2 API.
2196+
func (b *builder) claimSpecWithV1beta2() resourceapiv1beta2.ResourceClaimSpec {
2197+
parameters, _ := b.parametersEnv()
2198+
spec := resourceapiv1beta2.ResourceClaimSpec{
2199+
Devices: resourceapiv1beta2.DeviceClaim{
2200+
Requests: []resourceapiv1beta2.DeviceRequest{{
2201+
Name: "my-request",
2202+
Exactly: &resourceapiv1beta2.ExactDeviceRequest{
2203+
DeviceClassName: b.className(),
2204+
},
2205+
}},
2206+
Config: []resourceapiv1beta2.DeviceClaimConfiguration{{
2207+
DeviceConfiguration: resourceapiv1beta2.DeviceConfiguration{
2208+
Opaque: &resourceapiv1beta2.OpaqueDeviceConfiguration{
2209+
Driver: b.driver.Name,
2210+
Parameters: runtime.RawExtension{
2211+
Raw: []byte(parameters),
2212+
},
2213+
},
2214+
},
2215+
}},
2216+
},
2217+
}
2218+
2219+
return spec
2220+
}
2221+
21032222
// parametersEnv returns the default user env variables as JSON (config) and key/value list (pod env).
21042223
func (b *builder) parametersEnv() (string, []string) {
21052224
return `{"a":"b"}`,
@@ -2157,6 +2276,20 @@ func (b *builder) podInline() (*v1.Pod, *resourceapi.ResourceClaimTemplate) {
21572276
return pod, template
21582277
}
21592278

2279+
func (b *builder) podInlineWithV1beta2() (*v1.Pod, *resourceapiv1beta2.ResourceClaimTemplate) {
2280+
pod, _ := b.podInline()
2281+
template := &resourceapiv1beta2.ResourceClaimTemplate{
2282+
ObjectMeta: metav1.ObjectMeta{
2283+
Name: pod.Name,
2284+
Namespace: pod.Namespace,
2285+
},
2286+
Spec: resourceapiv1beta2.ResourceClaimTemplateSpec{
2287+
Spec: b.claimSpecWithV1beta2(),
2288+
},
2289+
}
2290+
return pod, template
2291+
}
2292+
21602293
// podInlineMultiple returns a pod with inline resource claim referenced by 3 containers
21612294
func (b *builder) podInlineMultiple() (*v1.Pod, *resourceapi.ResourceClaimTemplate) {
21622295
pod, template := b.podInline()
@@ -2211,8 +2344,12 @@ func (b *builder) create(ctx context.Context, objs ...klog.KMetadata) []klog.KMe
22112344
createdObj, err = b.f.ClientSet.CoreV1().ConfigMaps(b.f.Namespace.Name).Create(ctx, obj, metav1.CreateOptions{})
22122345
case *resourceapi.ResourceClaim:
22132346
createdObj, err = b.f.ClientSet.ResourceV1beta1().ResourceClaims(b.f.Namespace.Name).Create(ctx, obj, metav1.CreateOptions{})
2347+
case *resourceapiv1beta2.ResourceClaim:
2348+
createdObj, err = b.f.ClientSet.ResourceV1beta2().ResourceClaims(b.f.Namespace.Name).Create(ctx, obj, metav1.CreateOptions{})
22142349
case *resourceapi.ResourceClaimTemplate:
22152350
createdObj, err = b.f.ClientSet.ResourceV1beta1().ResourceClaimTemplates(b.f.Namespace.Name).Create(ctx, obj, metav1.CreateOptions{})
2351+
case *resourceapiv1beta2.ResourceClaimTemplate:
2352+
createdObj, err = b.f.ClientSet.ResourceV1beta2().ResourceClaimTemplates(b.f.Namespace.Name).Create(ctx, obj, metav1.CreateOptions{})
22162353
case *resourceapi.ResourceSlice:
22172354
createdObj, err = b.f.ClientSet.ResourceV1beta1().ResourceSlices().Create(ctx, obj, metav1.CreateOptions{})
22182355
ginkgo.DeferCleanup(func(ctx context.Context) {

test/e2e/dra/kind.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ nodes:
2020
v: "5"
2121
apiServer:
2222
extraArgs:
23-
runtime-config: "resource.k8s.io/v1alpha3=true,resource.k8s.io/v1beta1=true"
23+
runtime-config: "resource.k8s.io/v1alpha3=true,resource.k8s.io/v1beta1=true,resource.k8s.io/v1beta2=true"
2424
- |
2525
kind: InitConfiguration
2626
nodeRegistration:

0 commit comments

Comments
 (0)