1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-31 04:04:51 +00:00

test/e2e: test nodefeaturegroup templating and backrefs

This commit is contained in:
Markus Lehtonen 2025-03-12 15:44:40 +02:00
parent de04740d50
commit 0ef859fd41
3 changed files with 85 additions and 0 deletions

View file

@ -21,6 +21,7 @@ spec:
fake.instance:
elements:
- attributes:
name: "instance-x"
attr_1: "true"
attr_2: "9"
# Labels to be created

View file

@ -0,0 +1,54 @@
apiVersion: nfd.k8s-sigs.io/v1alpha1
kind: NodeFeatureGroup
metadata:
name: e2e-test-2
spec:
featureGroupRules:
- name: "e2e-matchany-test-1"
vars:
e2e-matchany-test-1: "true"
matchAny:
- matchFeatures:
- feature: "fake.instance"
matchExpressions:
"attr_1": {op: In, value: ["nomatch"]}
- matchFeatures:
- feature: "fake.instance"
matchExpressions:
"attr_3": {op: In, value: ["100"]}
#
# Test templating
#
- name: "e2e-template-test-1"
varsTemplate: |
{{ range .fake.instance }}e2e-template-test-1-{{ .name }}=found
{{ end }}
matchFeatures:
- feature: "fake.instance"
matchExpressions:
"attr_1": {op: In, value: ["true"]}
- name: "e2e-template-test-2"
varsTemplate: |
{{ range .fake.attribute }}e2e-template-test-2-{{ .Name }}={{ .Value }}
{{ end }}
matchFeatures:
- feature: "fake.attribute"
matchExpressions:
# expect attr_2 overridden from nodefeature-1.yaml
"attr_2": {op: IsTrue}
matchName: {op: In, value: ["attr_3"]}
#
# Test backreference
#
- name: "e2e-backreference-test-1"
matchFeatures:
- feature: "rule.matched"
matchExpressions:
"e2e-matchany-test-1:": {op: IsTrue}
"e2e-template-test-1-instance_1": {op: In, value: ["found"]}
"e2e-template-test-1-instance_2": {op: Exists}
"e2e-template-test-2-attr_2": {op: IsTrue}
"e2e-template-test-2-attr_3": {op: In, value: ["10"]}

View file

@ -887,6 +887,36 @@ core:
}
return reflect.DeepEqual(group.Status, expectedGroup.Status)
}, 5*time.Minute, 5*time.Second).Should(BeTrue())
// Deploy node feature object to have one different node
targetNodeName := nodes[0].Name
By("Creating NodeFeature object")
nodeFeatures, err := testutils.CreateOrUpdateNodeFeaturesFromFile(ctx, nfdClient, "nodefeature-1.yaml", f.Namespace.Name, targetNodeName)
Expect(err).NotTo(HaveOccurred())
By("Creating NodeFeatureGroups #2")
Expect(testutils.CreateNodeFeatureGroupsFromFile(ctx, nfdClient, f.Namespace.Name, "nodefeaturegroup-2.yaml")).NotTo(HaveOccurred())
By("Verifying NodeFeatureGroups #2")
Eventually(func() bool {
group, err := nfdClient.NfdV1alpha1().NodeFeatureGroups(f.Namespace.Name).Get(ctx, "e2e-test-2", metav1.GetOptions{})
if err != nil {
return false
}
return len(group.Status.Nodes) == 1 && group.Status.Nodes[0].Name == targetNodeName
}, 1*time.Minute, 5*time.Second).Should(BeTrue())
By("Deleting NodeFeature object")
err = nfdClient.NfdV1alpha1().NodeFeatures(f.Namespace.Name).Delete(ctx, nodeFeatures[0], metav1.DeleteOptions{})
Expect(err).NotTo(HaveOccurred())
Eventually(func() bool {
group, err := nfdClient.NfdV1alpha1().NodeFeatureGroups(f.Namespace.Name).Get(ctx, "e2e-test-2", metav1.GetOptions{})
if err != nil {
return false
}
return len(group.Status.Nodes) == 0
}, 1*time.Minute, 5*time.Second).Should(BeTrue())
})
})