Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add behavior <-> conformance test linkage example for pods #89716

Merged
merged 2 commits into from May 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion test/conformance/behaviors/behaviors_test.go
Expand Up @@ -56,7 +56,7 @@ func validateSuite(path string, t *testing.T) {
if err != nil {
t.Errorf("%q", err.Error())
}
err = yaml.UnmarshalStrict(yamlFile, &suite)
err = yaml.Unmarshal(yamlFile, &suite)

if err != nil {
t.Errorf("%q", err.Error())
Expand Down
32 changes: 19 additions & 13 deletions test/conformance/behaviors/sig-node/pod-spec.yaml
@@ -1,43 +1,49 @@
suite: pod/spec
description: Base suite for pods
behaviors:
- id: pod/basic-create
- id: pod/spec/basic-create
description: When a Pod resource is created with a single container and sufficient resources, a Pod MUST be created on a node with the specified container image.
- id: pod/basic-delete
- id: pod/spec/basic-delete
description: When a Pod resource is delete, the Pod containers must receive a TERM signal and the Pod MUST be deleted.
- id: pod/hostname
- id: pod/spec/hostname
description: When the hostname field is set, a container running in the Pod MUST report the hostname as the specified value.
- id: pod/subdomain
- id: pod/spec/subdomain
description: If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod
namespace>.svc.<cluster domain>". If not specified, the pod will not have a
domainname at all.
- id: pod/terminationGracePeriodSeconds/in-spec
- id: pod/spec/terminationGracePeriodSeconds/in-spec
description: When the terminationGracePeriodSeconds is specified in the spec,
processes running in the Pod MUST NOT receive a hard termination signal for at
least that number of seconds after a delete request.
- id: pod/terminationGracePeriodSeconds/in-delete
- id: pod/spec/terminationGracePeriodSeconds/in-delete
description: When the terminationGracePeriodSeconds is specified in a delete request,
processes running in the Pod MUST NOT receive a hard termination signal for at
least that number of seconds after the delete request.
- id: pod/activeDeadlineSeconds
- id: pod/spec/activeDeadlineSeconds
description: Optional duration in seconds the pod may be active on the node relative
to StartTime before the system will actively try to mark it failed and kill
associated containers. Value must be a positive integer.
- id: pod/hostNetwork/true
- id: pod/spec/hostNetwork/true
description: When hostNetwork is set to true, the Pod MUST use the host's network
namespace.
- id: pod/hostNetwork/false
- id: pod/spec/hostNetwork/false
description: When hostNetwork is set to false, the Pod MUST NOT use the host's network
namespace.
- id: pod/hostPID/true
- id: pod/spec/hostPID/true
description: When hostPID is set to true, the Pod MUST use the host's process
namespace.
- id: pod/hostPID/false
- id: pod/spec/hostPID/false
description: When hostPID is set to false, the Pod MUST NOT use the host's process
namespace.
- id: pod/hostIPC/true
- id: pod/spec/hostIPC/true
description: When hostIPC is set to true, the Pod MUST use the host's inter-process
communication namespace.
- id: pod/hostIPC/false
- id: pod/spec/hostIPC/false
description: When hostIPC is set to false, the Pod MUST NOT use the host's inter-process
communication namespace.
- id: pod/spec/label/create
decription: Create a Pod with a unique label. Query for the Pod with the label as selector MUST be successful.
- id: pod/spec/label/patch
decription: A patch request must be able to update the pod to change the value of an existing Label. Query for the Pod with the new value for the label MUST be successful.
- id: pod/spec/container/resources
description: Create a Pod with CPU and Memory request and limits. Pod status MUST have QOSClass set to PodQOSGuaranteed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, but does the test cover any of the specific logic around scheduling, eviction, etc. for guaranteed pods? If so we need behaviors for all of those. If not that's OK I suppose; those will show up later in sig-scheduling behaviors.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This only checks for the corresponding status tags. I think the logic you mentioned should be deferred to sig-scheduling.

5 changes: 5 additions & 0 deletions test/conformance/testdata/conformance.yaml
Expand Up @@ -244,6 +244,9 @@
Query for the Pod with the new value for the label MUST be successful.
release: v1.9
file: test/e2e/common/pods.go
behaviors:
- pod/spec/label/create
- pod/spec/label/patch
- testname: Pods, service environment variables
codename: '[k8s.io] Pods should contain environment variables for services [NodeConformance]
[Conformance]'
Expand Down Expand Up @@ -482,6 +485,8 @@
have QOSClass set to PodQOSGuaranteed.
release: v1.9
file: test/e2e/node/pods.go
behaviors:
- pod/spec/container/resources
- testname: Pods, prestop hook
codename: '[k8s.io] [sig-node] PreStop should call prestop when killing a pod [Conformance]'
description: Create a server pod with a rest endpoint '/write' that changes state.Received
Expand Down
3 changes: 3 additions & 0 deletions test/e2e/common/pods.go
Expand Up @@ -337,6 +337,9 @@ var _ = framework.KubeDescribe("Pods", func() {
Release : v1.9
Testname: Pods, update
Description: Create a Pod with a unique label. Query for the Pod with the label as selector MUST be successful. Update the pod to change the value of the Label. Query for the Pod with the new value for the label MUST be successful.
Behaviors:
- pod/spec/label/create
- pod/spec/label/patch
*/
framework.ConformanceIt("should be updated [NodeConformance]", func() {
ginkgo.By("creating the pod")
Expand Down
2 changes: 2 additions & 0 deletions test/e2e/node/pods.go
Expand Up @@ -166,6 +166,8 @@ var _ = SIGDescribe("Pods Extended", func() {
Release : v1.9
Testname: Pods, QOS
Description: Create a Pod with CPU and Memory request and limits. Pod status MUST have QOSClass set to PodQOSGuaranteed.
Behaviors:
- pod/spec/container/resources
*/
framework.ConformanceIt("should be set on Pods with matching resource requests and limits for memory and cpu", func() {
ginkgo.By("creating the pod")
Expand Down