podman

Форк
0
/
secret_test.go 
439 строк · 17.1 Кб
1
package integration
2

3
import (
4
	"fmt"
5
	"os"
6
	"path/filepath"
7

8
	. "github.com/containers/podman/v5/test/utils"
9
	"github.com/containers/storage/pkg/stringid"
10
	. "github.com/onsi/ginkgo/v2"
11
	. "github.com/onsi/gomega"
12
	. "github.com/onsi/gomega/gexec"
13
)
14

15
var _ = Describe("Podman secret", func() {
16

17
	AfterEach(func() {
18
		podmanTest.CleanupSecrets()
19
	})
20

21
	It("podman secret create", func() {
22
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
23
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
24
		Expect(err).ToNot(HaveOccurred())
25

26
		session := podmanTest.Podman([]string{"secret", "create", "-d", "file", "--driver-opts", "opt1=val", "a", secretFilePath})
27
		session.WaitWithDefaultTimeout()
28
		secrID := session.OutputToString()
29
		Expect(session).Should(ExitCleanly())
30

31
		inspect := podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.ID}}", secrID})
32
		inspect.WaitWithDefaultTimeout()
33
		Expect(inspect).Should(ExitCleanly())
34
		Expect(inspect.OutputToString()).To(Equal(secrID))
35
		inspect = podmanTest.Podman([]string{"secret", "inspect", "-f", "{{.Spec.Driver.Options}}", secrID})
36
		inspect.WaitWithDefaultTimeout()
37
		Expect(inspect).Should(ExitCleanly())
38
		Expect(inspect.OutputToString()).To(ContainSubstring("opt1:val"))
39

40
		session = podmanTest.Podman([]string{"secret", "create", "-d", "file", "--driver-opts", "opt1=val1", "a", secretFilePath})
41
		session.WaitWithDefaultTimeout()
42
		Expect(session).Should(Exit(125))
43
		Expect(session.ErrorToString()).To(Equal("Error: a: secret name in use"))
44

45
		session = podmanTest.Podman([]string{"secret", "create", "-d", "file", "--driver-opts", "opt1=val1", "--replace", "a", secretFilePath})
46
		session.WaitWithDefaultTimeout()
47
		Expect(session).Should(ExitCleanly())
48
		Expect(session.OutputToString()).To(Not(Equal(secrID)))
49

50
		inspect = podmanTest.Podman([]string{"secret", "inspect", "-f", "{{.Spec.Driver.Options}}", secrID})
51
		inspect.WaitWithDefaultTimeout()
52
		Expect(inspect).To(ExitWithError())
53
		Expect(inspect.ErrorToString()).To(ContainSubstring(fmt.Sprintf("Error: inspecting secret: no secret with name or id %q: no such secret", secrID)))
54

55
		inspect = podmanTest.Podman([]string{"secret", "inspect", "-f", "{{.Spec.Driver.Options}}", "a"})
56
		inspect.WaitWithDefaultTimeout()
57
		Expect(inspect).Should(ExitCleanly())
58
		Expect(inspect.OutputToString()).To(ContainSubstring("opt1:val1"))
59
	})
60

61
	It("podman secret create bad name should fail", func() {
62
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
63
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
64
		Expect(err).ToNot(HaveOccurred())
65

66
		badName := "foo/bar"
67
		session := podmanTest.Podman([]string{"secret", "create", badName, secretFilePath})
68
		session.WaitWithDefaultTimeout()
69
		Expect(session).To(ExitWithError())
70
		Expect(session.ErrorToString()).To(Equal(fmt.Sprintf("Error: secret name %q can not include '=', '/', ',', or the '\\0' (NULL) and be between 1 and 253 characters: invalid secret name", badName)))
71

72
		badName = "foo=bar"
73
		session = podmanTest.Podman([]string{"secret", "create", badName, secretFilePath})
74
		session.WaitWithDefaultTimeout()
75
		Expect(session).To(ExitWithError())
76
		Expect(session.ErrorToString()).To(Equal(fmt.Sprintf("Error: secret name %q can not include '=', '/', ',', or the '\\0' (NULL) and be between 1 and 253 characters: invalid secret name", badName)))
77
	})
78

79
	It("podman secret inspect", func() {
80
		random := stringid.GenerateRandomID()
81
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
82
		err := os.WriteFile(secretFilePath, []byte(random), 0755)
83
		Expect(err).ToNot(HaveOccurred())
84

85
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
86
		session.WaitWithDefaultTimeout()
87
		secrID := session.OutputToString()
88
		Expect(session).Should(ExitCleanly())
89

90
		inspect := podmanTest.Podman([]string{"secret", "inspect", secrID})
91
		inspect.WaitWithDefaultTimeout()
92
		Expect(inspect).Should(ExitCleanly())
93
		Expect(inspect.OutputToString()).To(BeValidJSON())
94

95
		inspect = podmanTest.Podman([]string{"secret", "inspect", "--format", "{{ .SecretData }}", secrID})
96
		inspect.WaitWithDefaultTimeout()
97
		Expect(inspect).Should(ExitCleanly())
98
		Expect(inspect.OutputToString()).To(Equal(""))
99

100
		inspect = podmanTest.Podman([]string{"secret", "inspect", "--showsecret", "--format", "{{ .SecretData }}", secrID})
101
		inspect.WaitWithDefaultTimeout()
102
		Expect(inspect).Should(ExitCleanly())
103
		Expect(inspect.OutputToString()).To(Equal(random))
104
	})
105

106
	It("podman secret inspect with --format", func() {
107
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
108
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
109
		Expect(err).ToNot(HaveOccurred())
110

111
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
112
		session.WaitWithDefaultTimeout()
113
		secrID := session.OutputToString()
114
		Expect(session).Should(ExitCleanly())
115

116
		inspect := podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.ID}}", secrID})
117
		inspect.WaitWithDefaultTimeout()
118
		Expect(inspect).Should(ExitCleanly())
119
		Expect(inspect.OutputToString()).To(Equal(secrID))
120
	})
121

122
	It("podman secret inspect with --pretty", func() {
123
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
124
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
125
		Expect(err).ToNot(HaveOccurred())
126

127
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
128
		session.WaitWithDefaultTimeout()
129
		secrID := session.OutputToString()
130
		Expect(session).Should(ExitCleanly())
131

132
		inspect := podmanTest.Podman([]string{"secret", "inspect", "--pretty", secrID})
133
		inspect.WaitWithDefaultTimeout()
134
		Expect(inspect).Should(ExitCleanly())
135
		Expect(inspect.OutputToString()).To(ContainSubstring("Name:"))
136
		Expect(inspect.OutputToString()).To(ContainSubstring(secrID))
137
	})
138

139
	It("podman secret inspect multiple secrets", func() {
140
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
141
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
142
		Expect(err).ToNot(HaveOccurred())
143

144
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
145
		session.WaitWithDefaultTimeout()
146
		secrID := session.OutputToString()
147
		Expect(session).Should(ExitCleanly())
148

149
		session2 := podmanTest.Podman([]string{"secret", "create", "b", secretFilePath})
150
		session2.WaitWithDefaultTimeout()
151
		secrID2 := session2.OutputToString()
152
		Expect(session2).Should(ExitCleanly())
153

154
		inspect := podmanTest.Podman([]string{"secret", "inspect", secrID, secrID2})
155
		inspect.WaitWithDefaultTimeout()
156
		Expect(inspect).Should(ExitCleanly())
157
		Expect(inspect.OutputToString()).To(BeValidJSON())
158
	})
159

160
	It("podman secret inspect bogus", func() {
161
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
162
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
163
		Expect(err).ToNot(HaveOccurred())
164

165
		inspect := podmanTest.Podman([]string{"secret", "inspect", "bogus"})
166
		inspect.WaitWithDefaultTimeout()
167
		Expect(inspect).To(ExitWithError())
168
	})
169

170
	It("podman secret ls", func() {
171
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
172
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
173
		Expect(err).ToNot(HaveOccurred())
174

175
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
176
		session.WaitWithDefaultTimeout()
177
		Expect(session).Should(ExitCleanly())
178

179
		list := podmanTest.Podman([]string{"secret", "ls"})
180
		list.WaitWithDefaultTimeout()
181
		Expect(list).Should(ExitCleanly())
182
		Expect(list.OutputToStringArray()).To(HaveLen(2))
183

184
	})
185

186
	It("podman secret ls --quiet", func() {
187
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
188
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
189
		Expect(err).ToNot(HaveOccurred())
190

191
		secretName := "a"
192

193
		session := podmanTest.Podman([]string{"secret", "create", secretName, secretFilePath})
194
		session.WaitWithDefaultTimeout()
195
		Expect(session).Should(ExitCleanly())
196
		secretID := session.OutputToString()
197

198
		list := podmanTest.Podman([]string{"secret", "ls", "-q"})
199
		list.WaitWithDefaultTimeout()
200
		Expect(list).Should(ExitCleanly())
201
		Expect(list.OutputToString()).To(Equal(secretID))
202

203
		list = podmanTest.Podman([]string{"secret", "ls", "--quiet"})
204
		list.WaitWithDefaultTimeout()
205
		Expect(list).Should(ExitCleanly())
206
		Expect(list.OutputToString()).To(Equal(secretID))
207

208
		// Prefer format over quiet
209
		list = podmanTest.Podman([]string{"secret", "ls", "-q", "--format", "{{.Name}}"})
210
		list.WaitWithDefaultTimeout()
211
		Expect(list).Should(ExitCleanly())
212
		Expect(list.OutputToString()).To(Equal(secretName))
213

214
	})
215

216
	It("podman secret ls with filters", func() {
217
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
218
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
219
		Expect(err).ToNot(HaveOccurred())
220

221
		secret1 := "Secret1"
222
		secret2 := "Secret2"
223

224
		session := podmanTest.Podman([]string{"secret", "ls", "-n"})
225
		session.WaitWithDefaultTimeout()
226
		Expect(session).Should(ExitCleanly())
227
		Expect(session.OutputToString()).To(Equal(""))
228

229
		session = podmanTest.Podman([]string{"secret", "ls", "--noheading"})
230
		session.WaitWithDefaultTimeout()
231
		Expect(session).Should(ExitCleanly())
232
		Expect(session.OutputToString()).To(Equal(""))
233

234
		session = podmanTest.Podman([]string{"secret", "create", secret1, secretFilePath})
235
		session.WaitWithDefaultTimeout()
236
		secrID1 := session.OutputToString()
237
		Expect(session).Should(ExitCleanly())
238

239
		session = podmanTest.Podman([]string{"secret", "create", secret2, secretFilePath})
240
		session.WaitWithDefaultTimeout()
241
		secrID2 := session.OutputToString()
242
		Expect(session).Should(ExitCleanly())
243

244
		session = podmanTest.Podman([]string{"secret", "create", "Secret3", secretFilePath})
245
		session.WaitWithDefaultTimeout()
246
		Expect(session).Should(ExitCleanly())
247

248
		list := podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("name=%s", secret1)})
249
		list.WaitWithDefaultTimeout()
250
		Expect(list).Should(ExitCleanly())
251
		Expect(list.OutputToStringArray()).To(HaveLen(2))
252
		Expect(list.OutputToStringArray()[1]).To(ContainSubstring(secret1))
253

254
		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("name=%s", secret2)})
255
		list.WaitWithDefaultTimeout()
256
		Expect(list).Should(ExitCleanly())
257
		Expect(list.OutputToStringArray()).To(HaveLen(2))
258
		Expect(list.OutputToStringArray()[1]).To(ContainSubstring(secret2))
259

260
		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("id=%s", secrID1)})
261
		list.WaitWithDefaultTimeout()
262
		Expect(list).Should(ExitCleanly())
263
		Expect(list.OutputToStringArray()).To(HaveLen(2))
264
		Expect(list.OutputToStringArray()[1]).To(ContainSubstring(secrID1))
265

266
		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("id=%s", secrID2)})
267
		list.WaitWithDefaultTimeout()
268
		Expect(list).Should(ExitCleanly())
269
		Expect(list.OutputToStringArray()).To(HaveLen(2))
270
		Expect(list.OutputToStringArray()[1]).To(ContainSubstring(secrID2))
271

272
		list = podmanTest.Podman([]string{"secret", "ls", "--filter", fmt.Sprintf("name=%s", secret1), "--filter", fmt.Sprintf("name=%s", secret2)})
273
		list.WaitWithDefaultTimeout()
274
		Expect(list).Should(ExitCleanly())
275
		Expect(list.OutputToStringArray()).To(HaveLen(3))
276
		Expect(list.OutputToString()).To(ContainSubstring(secret1))
277
		Expect(list.OutputToString()).To(ContainSubstring(secret2))
278
	})
279

280
	It("podman secret ls with Go template", func() {
281
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
282
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
283
		Expect(err).ToNot(HaveOccurred())
284

285
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
286
		session.WaitWithDefaultTimeout()
287
		Expect(session).Should(ExitCleanly())
288

289
		list := podmanTest.Podman([]string{"secret", "ls", "--format", "table {{.Name}}"})
290
		list.WaitWithDefaultTimeout()
291

292
		Expect(list).Should(ExitCleanly())
293
		Expect(list.OutputToStringArray()).To(HaveLen(2), list.OutputToString())
294
	})
295

296
	It("podman secret rm", func() {
297
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
298
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
299
		Expect(err).ToNot(HaveOccurred())
300

301
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
302
		session.WaitWithDefaultTimeout()
303
		secrID := session.OutputToString()
304
		Expect(session).Should(ExitCleanly())
305

306
		removed := podmanTest.Podman([]string{"secret", "rm", "a"})
307
		removed.WaitWithDefaultTimeout()
308
		Expect(removed).Should(ExitCleanly())
309
		Expect(removed.OutputToString()).To(Equal(secrID))
310

311
		session = podmanTest.Podman([]string{"secret", "ls"})
312
		session.WaitWithDefaultTimeout()
313
		Expect(session).Should(ExitCleanly())
314
		Expect(session.OutputToStringArray()).To(HaveLen(1))
315
	})
316

317
	It("podman secret rm --all", func() {
318
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
319
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
320
		Expect(err).ToNot(HaveOccurred())
321

322
		session := podmanTest.Podman([]string{"secret", "create", "a", secretFilePath})
323
		session.WaitWithDefaultTimeout()
324
		Expect(session).Should(ExitCleanly())
325
		session = podmanTest.Podman([]string{"secret", "create", "b", secretFilePath})
326
		session.WaitWithDefaultTimeout()
327
		Expect(session).Should(ExitCleanly())
328

329
		removed := podmanTest.Podman([]string{"secret", "rm", "-a"})
330
		removed.WaitWithDefaultTimeout()
331
		Expect(removed).Should(ExitCleanly())
332

333
		session = podmanTest.Podman([]string{"secret", "ls"})
334
		session.WaitWithDefaultTimeout()
335
		Expect(session).Should(ExitCleanly())
336
		Expect(session.OutputToStringArray()).To(HaveLen(1))
337
	})
338

339
	It("podman secret rm --ignore", func() {
340
		remove := podmanTest.Podman([]string{"secret", "rm", "non-existent-secret"})
341
		remove.WaitWithDefaultTimeout()
342
		Expect(remove).Should(Not(ExitCleanly()))
343
		Expect(remove.ErrorToString()).To(Equal("Error: no secret with name or id \"non-existent-secret\": no such secret"))
344

345
		ignoreRm := podmanTest.Podman([]string{"secret", "rm", "--ignore", "non-existent-secret"})
346
		ignoreRm.WaitWithDefaultTimeout()
347
		Expect(ignoreRm).Should(ExitCleanly())
348
		Expect(ignoreRm.ErrorToString()).To(BeEmpty())
349
	})
350

351
	It("podman secret creates from environment variable", func() {
352
		// no env variable set, should fail
353
		session := podmanTest.Podman([]string{"secret", "create", "--env", "a", "MYENVVAR"})
354
		session.WaitWithDefaultTimeout()
355
		Expect(session).To(ExitWithError())
356

357
		os.Setenv("MYENVVAR", "somedata")
358
		if IsRemote() {
359
			podmanTest.RestartRemoteService()
360
		}
361

362
		session = podmanTest.Podman([]string{"secret", "create", "--env", "a", "MYENVVAR"})
363
		session.WaitWithDefaultTimeout()
364
		secrID := session.OutputToString()
365
		Expect(session).Should(ExitCleanly())
366

367
		inspect := podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.ID}}", secrID})
368
		inspect.WaitWithDefaultTimeout()
369
		Expect(inspect).Should(ExitCleanly())
370
		Expect(inspect.OutputToString()).To(Equal(secrID))
371
	})
372

373
	It("podman secret with labels", func() {
374
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
375
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
376
		Expect(err).ToNot(HaveOccurred())
377

378
		session := podmanTest.Podman([]string{"secret", "create", "--label", "foo=bar", "a", secretFilePath})
379
		session.WaitWithDefaultTimeout()
380
		secrID := session.OutputToString()
381
		Expect(session).Should(ExitCleanly())
382

383
		inspect := podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.Spec.Labels}}", secrID})
384
		inspect.WaitWithDefaultTimeout()
385
		Expect(inspect).Should(ExitCleanly())
386
		Expect(inspect.OutputToString()).To(ContainSubstring("foo:bar"))
387

388
		session = podmanTest.Podman([]string{"secret", "create", "--label", "foo=bar", "--label", "a:b", "b", secretFilePath})
389
		session.WaitWithDefaultTimeout()
390
		secrID = session.OutputToString()
391
		Expect(session).Should(ExitCleanly())
392

393
		inspect = podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.Spec.Labels}}", secrID})
394
		inspect.WaitWithDefaultTimeout()
395
		Expect(inspect).Should(ExitCleanly())
396
		Expect(inspect.OutputToString()).To(ContainSubstring("foo:bar"))
397
		Expect(inspect.OutputToString()).To(ContainSubstring("a:b"))
398

399
		session = podmanTest.Podman([]string{"secret", "create", "c", secretFilePath})
400
		session.WaitWithDefaultTimeout()
401
		secrID = session.OutputToString()
402
		Expect(session).Should(ExitCleanly())
403

404
		inspect = podmanTest.Podman([]string{"secret", "inspect", "--format", "{{.Spec.Labels}}", secrID})
405
		inspect.WaitWithDefaultTimeout()
406
		Expect(inspect).Should(ExitCleanly())
407
		Expect(inspect.OutputToString()).To(Equal("map[]"))
408

409
	})
410

411
	It("podman secret exists should return true if secret exists", func() {
412
		secretFilePath := filepath.Join(podmanTest.TempDir, "secret")
413
		err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)
414
		Expect(err).ToNot(HaveOccurred())
415

416
		secretName := "does_exist"
417

418
		session := podmanTest.Podman([]string{"secret", "create", secretName, secretFilePath})
419
		session.WaitWithDefaultTimeout()
420
		secretID := session.OutputToString()
421
		Expect(session).Should(ExitCleanly())
422

423
		exists := podmanTest.Podman([]string{"secret", "exists", secretName})
424
		exists.WaitWithDefaultTimeout()
425
		Expect(exists).Should(ExitCleanly())
426

427
		exists = podmanTest.Podman([]string{"secret", "exists", secretID})
428
		exists.WaitWithDefaultTimeout()
429
		Expect(exists).Should(ExitCleanly())
430
	})
431

432
	It("podman secret exists should return false if secret does not exist", func() {
433
		secretName := "does_not_exist"
434

435
		exists := podmanTest.Podman([]string{"secret", "exists", secretName})
436
		exists.WaitWithDefaultTimeout()
437
		Expect(exists).Should(Exit(1))
438
	})
439
})
440

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.