1 package resource
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7 corev1 "k8s.io/api/core/v1"
8 kresource "k8s.io/apimachinery/pkg/api/resource"
9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10 )
11
12 var (
13 firefoxName = "firefox"
14 firefox = "firefox"
15 firefoxImage = "docker.io/linuxserver/firefox:latest"
16 )
17
18 func TestAddUIRequestResourcesToPod(t *testing.T) {
19 tcs := []struct {
20 Pod *corev1.Pod
21 ExpectedPod *corev1.Pod
22 }{
23 {
24
25 Pod: &corev1.Pod{
26 ObjectMeta: metav1.ObjectMeta{
27 Name: firefoxName,
28 Namespace: firefoxName,
29 },
30 Spec: corev1.PodSpec{
31 Containers: []corev1.Container{
32 {
33 Name: firefox,
34 Image: firefoxImage,
35 Resources: corev1.ResourceRequirements{
36 Requests: corev1.ResourceList{
37 UIRequestResource.ResourceName(): kresource.MustParse("1"),
38 },
39 },
40 },
41 },
42 },
43 },
44 ExpectedPod: &corev1.Pod{
45 ObjectMeta: metav1.ObjectMeta{
46 Name: firefoxName,
47 Namespace: firefoxName,
48 Labels: map[string]string{UIRequestResource.String(): "true"},
49 },
50 Spec: corev1.PodSpec{
51 Containers: []corev1.Container{
52 {
53 Name: firefox,
54 Image: firefoxImage,
55 Resources: corev1.ResourceRequirements{
56 Requests: corev1.ResourceList{
57 UIRequestResource.ResourceName(): kresource.MustParse("1"),
58 },
59 },
60 Env: []corev1.EnvVar{
61 {Name: displayEnvVar, Value: displayZero},
62 },
63 VolumeMounts: []corev1.VolumeMount{
64 {
65 Name: x11Volume,
66 MountPath: x11DirPath,
67 ReadOnly: false,
68 },
69 },
70 },
71 },
72 Volumes: []corev1.Volume{
73 {
74 Name: x11Volume,
75 VolumeSource: corev1.VolumeSource{
76 HostPath: &corev1.HostPathVolumeSource{Path: x11DirPath, Type: &hostPathDir},
77 },
78 },
79 },
80 },
81 },
82 },
83 {
84
85 Pod: &corev1.Pod{
86 ObjectMeta: metav1.ObjectMeta{
87 Name: firefoxName,
88 Namespace: firefoxName,
89 Labels: map[string]string{UIRequestResource.String(): labelValue},
90 },
91 Spec: corev1.PodSpec{
92 Containers: []corev1.Container{
93 {
94 Name: firefox,
95 Image: firefoxImage,
96 Resources: corev1.ResourceRequirements{
97 Requests: corev1.ResourceList{
98 UIRequestResource.ResourceName(): kresource.MustParse("1"),
99 },
100 },
101 Env: []corev1.EnvVar{
102 {Name: displayEnvVar, Value: ":1.0"},
103 },
104 VolumeMounts: []corev1.VolumeMount{
105 {
106 Name: x11Volume,
107 MountPath: x11DirPath,
108 ReadOnly: true,
109 },
110 },
111 },
112 },
113 Volumes: []corev1.Volume{
114 {
115 Name: x11Volume,
116 VolumeSource: corev1.VolumeSource{
117 HostPath: &corev1.HostPathVolumeSource{Path: "/tmp/.X12-unix", Type: &hostPathDir},
118 },
119 },
120 },
121 },
122 },
123 ExpectedPod: &corev1.Pod{
124 ObjectMeta: metav1.ObjectMeta{
125 Name: firefoxName,
126 Namespace: firefoxName,
127 Labels: map[string]string{UIRequestResource.String(): labelValue},
128 },
129 Spec: corev1.PodSpec{
130 Containers: []corev1.Container{
131 {
132 Name: firefox,
133 Image: firefoxImage,
134 Resources: corev1.ResourceRequirements{
135 Requests: corev1.ResourceList{
136 UIRequestResource.ResourceName(): kresource.MustParse("1"),
137 },
138 },
139 Env: []corev1.EnvVar{
140 {Name: displayEnvVar, Value: ":1.0"},
141 },
142 VolumeMounts: []corev1.VolumeMount{
143 {
144 Name: x11Volume,
145 MountPath: x11DirPath,
146 ReadOnly: true,
147 },
148 },
149 },
150 },
151 Volumes: []corev1.Volume{
152 {
153 Name: x11Volume,
154 VolumeSource: corev1.VolumeSource{
155 HostPath: &corev1.HostPathVolumeSource{Path: "/tmp/.X12-unix", Type: &hostPathDir},
156 },
157 },
158 },
159 },
160 },
161 },
162 {
163
164 Pod: &corev1.Pod{
165 ObjectMeta: metav1.ObjectMeta{
166 Name: firefoxName,
167 Namespace: firefoxName,
168 Labels: map[string]string{
169 UIRequestResource.String(): labelValue,
170 "app.kubernetes.io/name": firefoxName,
171 },
172 },
173 Spec: corev1.PodSpec{
174 Containers: []corev1.Container{
175 {
176 Name: firefox,
177 Image: firefoxImage,
178 Resources: corev1.ResourceRequirements{
179 Requests: corev1.ResourceList{
180 UIRequestResource.ResourceName(): kresource.MustParse("1"),
181 },
182 },
183 Env: []corev1.EnvVar{
184 {Name: displayEnvVar, Value: ":1.0"},
185 },
186 },
187 {
188 Name: "chromium",
189 Image: "docker.io/linuxserver/chromium",
190 Resources: corev1.ResourceRequirements{
191 Requests: corev1.ResourceList{
192 UIRequestResource.ResourceName(): kresource.MustParse("1"),
193 },
194 },
195 VolumeMounts: []corev1.VolumeMount{
196 {
197 Name: x11Volume,
198 MountPath: x11DirPath,
199 ReadOnly: true,
200 },
201 },
202 },
203 {
204 Name: "ubuntu",
205 Image: "docker.io/ubuntu",
206 },
207 },
208 },
209 },
210 ExpectedPod: &corev1.Pod{
211 ObjectMeta: metav1.ObjectMeta{
212 Name: firefoxName,
213 Namespace: firefoxName,
214 Labels: map[string]string{
215 UIRequestResource.String(): labelValue,
216 "app.kubernetes.io/name": firefoxName,
217 },
218 },
219 Spec: corev1.PodSpec{
220 Containers: []corev1.Container{
221 {
222 Name: firefox,
223 Image: firefoxImage,
224 Resources: corev1.ResourceRequirements{
225 Requests: corev1.ResourceList{
226 UIRequestResource.ResourceName(): kresource.MustParse("1"),
227 },
228 },
229 Env: []corev1.EnvVar{
230 {Name: displayEnvVar, Value: ":1.0"},
231 },
232 VolumeMounts: []corev1.VolumeMount{
233 {
234 Name: x11Volume,
235 MountPath: x11DirPath,
236 ReadOnly: false,
237 },
238 },
239 },
240 {
241 Name: "chromium",
242 Image: "docker.io/linuxserver/chromium",
243 Resources: corev1.ResourceRequirements{
244 Requests: corev1.ResourceList{
245 UIRequestResource.ResourceName(): kresource.MustParse("1"),
246 },
247 },
248 Env: []corev1.EnvVar{
249 {Name: displayEnvVar, Value: displayZero},
250 },
251 VolumeMounts: []corev1.VolumeMount{
252 {
253 Name: x11Volume,
254 MountPath: x11DirPath,
255 ReadOnly: true,
256 },
257 },
258 },
259 {
260 Name: "ubuntu",
261 Image: "docker.io/ubuntu",
262 },
263 },
264 Volumes: []corev1.Volume{
265 {
266 Name: x11Volume,
267 VolumeSource: corev1.VolumeSource{
268 HostPath: &corev1.HostPathVolumeSource{Path: x11DirPath, Type: &hostPathDir},
269 },
270 },
271 },
272 },
273 },
274 },
275 }
276 for idx, tc := range tcs {
277 pod := tc.Pod.DeepCopy()
278 podTemplate := corev1.PodTemplateSpec{Spec: pod.Spec}
279 podTemplate = InjectResourceIntoPod(podTemplate, UIRequestResource)
280 require.Equal(t, tc.ExpectedPod.Spec, podTemplate.Spec, "test case %d failed: pod not as expected", idx+1)
281 }
282 }
283
View as plain text