Skip to content

Commit 63bf68e

Browse files
committed
integration: add pod tests
* Added Create and Delete integration tests for the pod resource. * Added an ExecCommand test too for the pod resource. Since we do not have any unit tests for this function (and #602 to add them is a draft), it will be good to have some assurance it is working. The latter point is also motivated by a desire to use a FallbackExecutor to enable the websocket executor for Kubernetes 1.30+ (OpenShift 4.17+). This will be a future PR, however.
1 parent 3b0b588 commit 63bf68e

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed

integration/pod_test.go

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
//go:build integration
2+
// +build integration
3+
4+
package integration
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
"time"
10+
11+
"github.com/openshift-kni/eco-goinfra/pkg/clients"
12+
"github.com/openshift-kni/eco-goinfra/pkg/namespace"
13+
"github.com/openshift-kni/eco-goinfra/pkg/pod"
14+
"github.com/stretchr/testify/assert"
15+
corev1 "k8s.io/api/core/v1"
16+
)
17+
18+
func TestPodCreate(t *testing.T) {
19+
t.Parallel()
20+
client := clients.New("")
21+
assert.NotNil(t, client)
22+
23+
const (
24+
testNamespace = "egi-pod-create-ns"
25+
podName = "create-test"
26+
)
27+
28+
// Create a namespace in the cluster using the namespaces package
29+
namespaceBuilder := namespace.NewBuilder(client, testNamespace)
30+
assert.NotNil(t, namespaceBuilder)
31+
32+
// Preemptively delete the namespace before the test
33+
err := namespaceBuilder.DeleteAndWait(time.Duration(30) * time.Second)
34+
assert.Nil(t, err)
35+
36+
// Create the namespace
37+
namespaceBuilder, err = namespaceBuilder.Create()
38+
assert.Nil(t, err)
39+
40+
// Defer the deletion of the namespace
41+
defer func() {
42+
// Delete the namespace
43+
err := namespaceBuilder.Delete()
44+
assert.Nil(t, err)
45+
}()
46+
47+
testContainerBuilder := pod.NewContainerBuilder("test", containerImage, []string{"sleep", "3600"}).
48+
WithSecurityContext(&corev1.SecurityContext{
49+
RunAsUser: nil,
50+
RunAsGroup: nil,
51+
})
52+
containerDefinition, err := testContainerBuilder.GetContainerCfg()
53+
assert.Nil(t, err)
54+
55+
podBuilder := pod.NewBuilder(client, podName, testNamespace, containerImage)
56+
podBuilder = podBuilder.RedefineDefaultContainer(*containerDefinition)
57+
58+
// Create a pod in the namespace
59+
_, err = podBuilder.CreateAndWaitUntilRunning(timeoutDuration)
60+
assert.Nil(t, err)
61+
62+
// Check if the pod was created
63+
podBuilder, err = pod.Pull(client, podName, testNamespace)
64+
assert.Nil(t, err)
65+
assert.NotNil(t, podBuilder.Object)
66+
}
67+
68+
func TestPodDelete(t *testing.T) {
69+
t.Parallel()
70+
client := clients.New("")
71+
assert.NotNil(t, client)
72+
73+
const (
74+
testNamespace = "egi-pod-delete-ns"
75+
podName = "delete-test"
76+
)
77+
78+
// Create a namespace in the cluster using the namespaces package
79+
namespaceBuilder := namespace.NewBuilder(client, testNamespace)
80+
assert.NotNil(t, namespaceBuilder)
81+
82+
// Preemptively delete the namespace before the test
83+
err := namespaceBuilder.DeleteAndWait(time.Duration(30) * time.Second)
84+
assert.Nil(t, err)
85+
86+
// Create the namespace
87+
namespaceBuilder, err = namespaceBuilder.Create()
88+
assert.Nil(t, err)
89+
90+
// Defer the deletion of the namespace
91+
defer func() {
92+
// Delete the namespace
93+
err := namespaceBuilder.Delete()
94+
assert.Nil(t, err)
95+
}()
96+
97+
testContainerBuilder := pod.NewContainerBuilder("test", containerImage, []string{"sleep", "3600"}).
98+
WithSecurityContext(&corev1.SecurityContext{
99+
RunAsUser: nil,
100+
RunAsGroup: nil,
101+
})
102+
containerDefinition, err := testContainerBuilder.GetContainerCfg()
103+
assert.Nil(t, err)
104+
105+
podBuilder := pod.NewBuilder(client, podName, testNamespace, containerImage)
106+
podBuilder = podBuilder.RedefineDefaultContainer(*containerDefinition)
107+
108+
// Create a pod in the namespace
109+
_, err = podBuilder.CreateAndWaitUntilRunning(timeoutDuration)
110+
assert.Nil(t, err)
111+
112+
defer func() {
113+
_, err = podBuilder.DeleteAndWait(timeoutDuration)
114+
assert.Nil(t, err)
115+
116+
// Check if the pod was deleted
117+
podBuilder, err = pod.Pull(client, podName, testNamespace)
118+
assert.EqualError(t, err, fmt.Sprintf("pod object %s does not exist in namespace %s", podName, testNamespace))
119+
}()
120+
121+
// Check if the pod was created
122+
podBuilder, err = pod.Pull(client, podName, testNamespace)
123+
assert.Nil(t, err)
124+
assert.NotNil(t, podBuilder.Object)
125+
}
126+
127+
func TestPodExecCommand(t *testing.T) {
128+
t.Parallel()
129+
client := clients.New("")
130+
assert.NotNil(t, client)
131+
132+
const (
133+
testNamespace = "egi-pod-exec-ns"
134+
podName = "exec-test"
135+
)
136+
137+
// Create a namespace in the cluster using the namespaces package
138+
namespaceBuilder := namespace.NewBuilder(client, testNamespace)
139+
assert.NotNil(t, namespaceBuilder)
140+
141+
// Preemptively delete the namespace before the test
142+
err := namespaceBuilder.DeleteAndWait(time.Duration(30) * time.Second)
143+
assert.Nil(t, err)
144+
145+
// Create the namespace
146+
namespaceBuilder, err = namespaceBuilder.Create()
147+
assert.Nil(t, err)
148+
149+
// Defer the deletion of the namespace
150+
defer func() {
151+
// Delete the namespace
152+
err := namespaceBuilder.Delete()
153+
assert.Nil(t, err)
154+
}()
155+
156+
testContainerBuilder := pod.NewContainerBuilder("test", containerImage, []string{"sleep", "3600"}).
157+
WithSecurityContext(&corev1.SecurityContext{
158+
RunAsUser: nil,
159+
RunAsGroup: nil,
160+
})
161+
containerDefinition, err := testContainerBuilder.GetContainerCfg()
162+
assert.Nil(t, err)
163+
164+
podBuilder := pod.NewBuilder(client, podName, testNamespace, containerImage)
165+
podBuilder = podBuilder.RedefineDefaultContainer(*containerDefinition)
166+
167+
// Create a pod in the namespace
168+
podBuilder, err = podBuilder.CreateAndWaitUntilRunning(timeoutDuration)
169+
assert.Nil(t, err)
170+
171+
// Check if the pod was created
172+
podBuilder, err = pod.Pull(client, podName, testNamespace)
173+
assert.Nil(t, err)
174+
assert.NotNil(t, podBuilder.Object)
175+
176+
// Execute a command in the pod
177+
buffer, err := podBuilder.ExecCommand([]string{"sh", "-c", "echo test | sha256sum"})
178+
assert.Nil(t, err)
179+
assert.Equal(t, "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2 -\r\n", buffer.String())
180+
}

0 commit comments

Comments
 (0)