github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/pod_infra_container_test.go (about) 1 // +build !remoteclient 2 3 package integration 4 5 import ( 6 "os" 7 "strconv" 8 9 . "github.com/containers/libpod/test/utils" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Podman pod create", func() { 15 var ( 16 tempdir string 17 err error 18 podmanTest *PodmanTestIntegration 19 ) 20 21 BeforeEach(func() { 22 tempdir, err = CreateTempDirInTempDir() 23 if err != nil { 24 os.Exit(1) 25 } 26 podmanTest = PodmanTestCreate(tempdir) 27 podmanTest.Setup() 28 podmanTest.SeedImages() 29 }) 30 31 AfterEach(func() { 32 podmanTest.CleanupPod() 33 f := CurrentGinkgoTestDescription() 34 processTestResult(f) 35 36 }) 37 38 It("podman create infra container", func() { 39 session := podmanTest.Podman([]string{"pod", "create"}) 40 session.WaitWithDefaultTimeout() 41 Expect(session.ExitCode()).To(Equal(0)) 42 podID := session.OutputToString() 43 44 check := podmanTest.Podman([]string{"pod", "ps", "-q", "--no-trunc"}) 45 check.WaitWithDefaultTimeout() 46 match, _ := check.GrepString(podID) 47 Expect(match).To(BeTrue()) 48 Expect(len(check.OutputToStringArray())).To(Equal(1)) 49 50 check = podmanTest.Podman([]string{"ps", "-qa", "--no-trunc"}) 51 check.WaitWithDefaultTimeout() 52 Expect(len(check.OutputToStringArray())).To(Equal(1)) 53 }) 54 55 It("podman start infra container", func() { 56 session := podmanTest.Podman([]string{"pod", "create"}) 57 session.WaitWithDefaultTimeout() 58 Expect(session.ExitCode()).To(Equal(0)) 59 podID := session.OutputToString() 60 61 session = podmanTest.Podman([]string{"pod", "start", podID}) 62 session.WaitWithDefaultTimeout() 63 Expect(session.ExitCode()).To(Equal(0)) 64 65 check := podmanTest.Podman([]string{"ps", "-qa", "--no-trunc", "--filter", "status=running"}) 66 check.WaitWithDefaultTimeout() 67 Expect(session.ExitCode()).To(Equal(0)) 68 Expect(len(check.OutputToStringArray())).To(Equal(1)) 69 }) 70 71 It("podman start infra container different image", func() { 72 session := podmanTest.Podman([]string{"pod", "create", "--infra-image", BB}) 73 session.WaitWithDefaultTimeout() 74 Expect(session.ExitCode()).To(Equal(0)) 75 podID := session.OutputToString() 76 77 session = podmanTest.Podman([]string{"pod", "start", podID}) 78 session.WaitWithDefaultTimeout() 79 // If we use the default entry point, we should exit with no error 80 Expect(session.ExitCode()).To(Equal(0)) 81 }) 82 83 It("podman infra container namespaces", func() { 84 session := podmanTest.Podman([]string{"pod", "create"}) 85 session.WaitWithDefaultTimeout() 86 Expect(session.ExitCode()).To(Equal(0)) 87 podID := session.OutputToString() 88 89 session = podmanTest.Podman([]string{"pod", "start", podID}) 90 session.WaitWithDefaultTimeout() 91 Expect(session.ExitCode()).To(Equal(0)) 92 93 session = podmanTest.RunTopContainerInPod("", podID) 94 session.WaitWithDefaultTimeout() 95 Expect(session.ExitCode()).To(Equal(0)) 96 97 check := podmanTest.Podman([]string{"ps", "-a", "--no-trunc", "--ns", "--format", "{{.IPC}} {{.NET}}"}) 98 check.WaitWithDefaultTimeout() 99 Expect(session.ExitCode()).To(Equal(0)) 100 Expect(len(check.OutputToStringArray())).To(Equal(2)) 101 Expect(check.OutputToStringArray()[0]).To(Equal(check.OutputToStringArray()[1])) 102 103 }) 104 105 It("podman pod correctly sets up NetNS", func() { 106 session := podmanTest.Podman([]string{"pod", "create", "--share", "net"}) 107 session.WaitWithDefaultTimeout() 108 Expect(session.ExitCode()).To(Equal(0)) 109 podID := session.OutputToString() 110 111 session = podmanTest.Podman([]string{"pod", "start", podID}) 112 session.WaitWithDefaultTimeout() 113 Expect(session.ExitCode()).To(Equal(0)) 114 115 session = podmanTest.Podman([]string{"run", "-d", "--pod", podID, nginx}) 116 session.WaitWithDefaultTimeout() 117 Expect(session.ExitCode()).To(Equal(0)) 118 119 session = podmanTest.Podman([]string{"run", "--pod", podID, fedoraMinimal, "curl", "localhost:80"}) 120 session.WaitWithDefaultTimeout() 121 Expect(session.ExitCode()).To(Equal(0)) 122 123 session = podmanTest.Podman([]string{"run", fedoraMinimal, "curl", "localhost"}) 124 session.WaitWithDefaultTimeout() 125 Expect(session).To(ExitWithError()) 126 }) 127 128 It("podman pod correctly sets up IPCNS", func() { 129 session := podmanTest.Podman([]string{"pod", "create", "--share", "ipc"}) 130 session.WaitWithDefaultTimeout() 131 Expect(session.ExitCode()).To(Equal(0)) 132 podID := session.OutputToString() 133 134 session = podmanTest.Podman([]string{"pod", "start", podID}) 135 session.WaitWithDefaultTimeout() 136 Expect(session.ExitCode()).To(Equal(0)) 137 138 session = podmanTest.Podman([]string{"run", "--pod", podID, fedoraMinimal, "/bin/sh", "-c", "'touch /dev/shm/hi'"}) 139 session.WaitWithDefaultTimeout() 140 if session.ExitCode() != 0 { 141 Skip("ShmDir not initialized, skipping...") 142 } 143 Expect(session.ExitCode()).To(Equal(0)) 144 145 session = podmanTest.Podman([]string{"run", "--pod", podID, fedoraMinimal, "/bin/sh", "-c", "'ls /dev/shm'"}) 146 session.WaitWithDefaultTimeout() 147 Expect(session.ExitCode()).To(Equal(0)) 148 Expect(session.OutputToString()).To(Equal("hi")) 149 }) 150 151 It("podman pod correctly sets up PIDNS", func() { 152 session := podmanTest.Podman([]string{"pod", "create", "--share", "pid", "--name", "test-pod"}) 153 session.WaitWithDefaultTimeout() 154 Expect(session.ExitCode()).To(Equal(0)) 155 podID := session.OutputToString() 156 157 session = podmanTest.Podman([]string{"pod", "start", podID}) 158 session.WaitWithDefaultTimeout() 159 Expect(session.ExitCode()).To(Equal(0)) 160 161 session = podmanTest.RunTopContainerInPod("test-ctr", podID) 162 session.WaitWithDefaultTimeout() 163 Expect(session.ExitCode()).To(Equal(0)) 164 165 check := podmanTest.Podman([]string{"top", "test-ctr", "pid"}) 166 check.WaitWithDefaultTimeout() 167 Expect(check.ExitCode()).To(Equal(0)) 168 PIDs := check.OutputToStringArray() 169 Expect(len(PIDs)).To(Equal(3)) 170 171 ctrPID, _ := strconv.Atoi(PIDs[1]) 172 infraPID, _ := strconv.Atoi(PIDs[2]) 173 Expect(ctrPID).To(BeNumerically("<", infraPID)) 174 }) 175 176 It("podman pod doesn't share PIDNS if requested to not", func() { 177 session := podmanTest.Podman([]string{"pod", "create", "--share", "net", "--name", "test-pod"}) 178 session.WaitWithDefaultTimeout() 179 Expect(session.ExitCode()).To(Equal(0)) 180 podID := session.OutputToString() 181 182 session = podmanTest.Podman([]string{"pod", "start", podID}) 183 session.WaitWithDefaultTimeout() 184 Expect(session.ExitCode()).To(Equal(0)) 185 186 session = podmanTest.RunTopContainerInPod("test-ctr", podID) 187 session.WaitWithDefaultTimeout() 188 Expect(session.ExitCode()).To(Equal(0)) 189 190 check := podmanTest.Podman([]string{"top", "test-ctr", "pid"}) 191 check.WaitWithDefaultTimeout() 192 Expect(check.ExitCode()).To(Equal(0)) 193 ctrTop := check.OutputToStringArray() 194 195 check = podmanTest.Podman([]string{"top", podID[:12] + "-infra", "pid"}) 196 check.WaitWithDefaultTimeout() 197 Expect(check.ExitCode()).To(Equal(0)) 198 infraTop := check.OutputToStringArray() 199 200 ctrPID, _ := strconv.Atoi(ctrTop[1]) 201 infraPID, _ := strconv.Atoi(infraTop[1]) 202 Expect(ctrPID).To(Equal(infraPID)) 203 }) 204 205 It("podman pod container can override pod net NS", func() { 206 session := podmanTest.Podman([]string{"pod", "create", "--share", "net"}) 207 session.WaitWithDefaultTimeout() 208 Expect(session.ExitCode()).To(Equal(0)) 209 podID := session.OutputToString() 210 211 session = podmanTest.Podman([]string{"pod", "start", podID}) 212 session.WaitWithDefaultTimeout() 213 Expect(session.ExitCode()).To(Equal(0)) 214 215 session = podmanTest.Podman([]string{"run", "-d", "--pod", podID, nginx}) 216 session.WaitWithDefaultTimeout() 217 Expect(session.ExitCode()).To(Equal(0)) 218 219 session = podmanTest.Podman([]string{"run", "--pod", podID, "--network", "bridge", nginx, "curl", "localhost"}) 220 session.WaitWithDefaultTimeout() 221 Expect(session).To(ExitWithError()) 222 }) 223 224 It("podman pod container can override pod pid NS", func() { 225 session := podmanTest.Podman([]string{"pod", "create", "--share", "pid"}) 226 session.WaitWithDefaultTimeout() 227 Expect(session.ExitCode()).To(Equal(0)) 228 podID := session.OutputToString() 229 230 session = podmanTest.Podman([]string{"pod", "start", podID}) 231 session.WaitWithDefaultTimeout() 232 Expect(session.ExitCode()).To(Equal(0)) 233 234 session = podmanTest.Podman([]string{"run", "--pod", podID, "--pid", "host", "-d", ALPINE, "top"}) 235 session.WaitWithDefaultTimeout() 236 Expect(session.ExitCode()).To(Equal(0)) 237 238 check := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "{{.PIDNS}}"}) 239 check.WaitWithDefaultTimeout() 240 Expect(check.ExitCode()).To(Equal(0)) 241 outputArray := check.OutputToStringArray() 242 Expect(len(outputArray)).To(Equal(2)) 243 244 PID1 := outputArray[0] 245 PID2 := outputArray[1] 246 Expect(PID1).To(Not(Equal(PID2))) 247 }) 248 249 It("podman pod container can override pod not sharing pid", func() { 250 session := podmanTest.Podman([]string{"pod", "create", "--share", "net"}) 251 session.WaitWithDefaultTimeout() 252 Expect(session.ExitCode()).To(Equal(0)) 253 podID := session.OutputToString() 254 255 session = podmanTest.Podman([]string{"pod", "start", podID}) 256 session.WaitWithDefaultTimeout() 257 Expect(session.ExitCode()).To(Equal(0)) 258 259 session = podmanTest.Podman([]string{"run", "--pod", podID, "--pid", "pod", "-d", ALPINE, "top"}) 260 session.WaitWithDefaultTimeout() 261 Expect(session.ExitCode()).To(Equal(0)) 262 263 check := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "{{.PIDNS}}"}) 264 check.WaitWithDefaultTimeout() 265 Expect(check.ExitCode()).To(Equal(0)) 266 outputArray := check.OutputToStringArray() 267 Expect(len(outputArray)).To(Equal(2)) 268 269 PID1 := outputArray[0] 270 PID2 := outputArray[1] 271 Expect(PID1).To(Equal(PID2)) 272 }) 273 274 It("podman pod container can override pod ipc NS", func() { 275 session := podmanTest.Podman([]string{"pod", "create", "--share", "ipc"}) 276 session.WaitWithDefaultTimeout() 277 Expect(session.ExitCode()).To(Equal(0)) 278 podID := session.OutputToString() 279 280 session = podmanTest.Podman([]string{"pod", "start", podID}) 281 session.WaitWithDefaultTimeout() 282 Expect(session.ExitCode()).To(Equal(0)) 283 284 session = podmanTest.Podman([]string{"run", "--pod", podID, "--ipc", "host", "-d", ALPINE, "top"}) 285 session.WaitWithDefaultTimeout() 286 Expect(session.ExitCode()).To(Equal(0)) 287 288 check := podmanTest.Podman([]string{"ps", "-a", "--ns", "--format", "{{.IPC}}"}) 289 check.WaitWithDefaultTimeout() 290 Expect(check.ExitCode()).To(Equal(0)) 291 outputArray := check.OutputToStringArray() 292 Expect(len(outputArray)).To(Equal(2)) 293 294 PID1 := outputArray[0] 295 PID2 := outputArray[1] 296 Expect(PID1).To(Not(Equal(PID2))) 297 }) 298 299 It("podman pod infra container deletion", func() { 300 session := podmanTest.Podman([]string{"pod", "create", "--share", "ipc"}) 301 session.WaitWithDefaultTimeout() 302 Expect(session.ExitCode()).To(Equal(0)) 303 podID := session.OutputToString() 304 305 session = podmanTest.Podman([]string{"ps", "-aq"}) 306 session.WaitWithDefaultTimeout() 307 Expect(session.ExitCode()).To(Equal(0)) 308 infraID := session.OutputToString() 309 310 session = podmanTest.Podman([]string{"rm", infraID}) 311 session.WaitWithDefaultTimeout() 312 Expect(session).To(ExitWithError()) 313 314 session = podmanTest.Podman([]string{"pod", "rm", podID}) 315 session.WaitWithDefaultTimeout() 316 Expect(session.ExitCode()).To(Equal(0)) 317 }) 318 319 It("podman run in pod starts infra", func() { 320 session := podmanTest.Podman([]string{"pod", "create"}) 321 session.WaitWithDefaultTimeout() 322 Expect(session.ExitCode()).To(Equal(0)) 323 podID := session.OutputToString() 324 325 result := podmanTest.Podman([]string{"ps", "-aq"}) 326 result.WaitWithDefaultTimeout() 327 Expect(result.ExitCode()).To(Equal(0)) 328 infraID := result.OutputToString() 329 330 result = podmanTest.Podman([]string{"run", "--pod", podID, "-d", ALPINE, "top"}) 331 result.WaitWithDefaultTimeout() 332 Expect(result.ExitCode()).To(Equal(0)) 333 334 result = podmanTest.Podman([]string{"ps", "-aq"}) 335 result.WaitWithDefaultTimeout() 336 Expect(result.ExitCode()).To(Equal(0)) 337 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 338 339 Expect(result.OutputToString()).To(ContainSubstring(infraID)) 340 }) 341 342 It("podman start in pod starts infra", func() { 343 session := podmanTest.Podman([]string{"pod", "create"}) 344 session.WaitWithDefaultTimeout() 345 Expect(session.ExitCode()).To(Equal(0)) 346 podID := session.OutputToString() 347 348 result := podmanTest.Podman([]string{"ps", "-aq"}) 349 result.WaitWithDefaultTimeout() 350 Expect(result.ExitCode()).To(Equal(0)) 351 infraID := result.OutputToString() 352 353 result = podmanTest.Podman([]string{"create", "--pod", podID, ALPINE, "ls"}) 354 result.WaitWithDefaultTimeout() 355 Expect(result.ExitCode()).To(Equal(0)) 356 ctrID := result.OutputToString() 357 358 result = podmanTest.Podman([]string{"start", ctrID}) 359 result.WaitWithDefaultTimeout() 360 Expect(result.ExitCode()).To(Equal(0)) 361 362 result = podmanTest.Podman([]string{"ps", "-aq"}) 363 result.WaitWithDefaultTimeout() 364 Expect(result.ExitCode()).To(Equal(0)) 365 Expect(len(result.OutputToStringArray())).Should(BeNumerically(">", 0)) 366 367 Expect(result.OutputToString()).To(ContainSubstring(infraID)) 368 }) 369 370 It("podman run --add-host in pod", func() { 371 session := podmanTest.Podman([]string{"pod", "create"}) 372 session.WaitWithDefaultTimeout() 373 Expect(session.ExitCode()).To(Equal(0)) 374 podID := session.OutputToString() 375 376 // verify we can add a host to the infra's /etc/hosts 377 session = podmanTest.Podman([]string{"run", "--pod", podID, "--add-host", "foobar:127.0.0.1", BB, "ping", "-c", "1", "foobar"}) 378 session.WaitWithDefaultTimeout() 379 Expect(session.ExitCode()).To(Equal(0)) 380 381 // verify we can see the other hosts of infra's /etc/hosts 382 session = podmanTest.Podman([]string{"run", "--pod", podID, BB, "ping", "-c", "1", "foobar"}) 383 session.WaitWithDefaultTimeout() 384 Expect(session.ExitCode()).To(Equal(0)) 385 }) 386 387 It("podman run hostname is shared", func() { 388 session := podmanTest.Podman([]string{"pod", "create"}) 389 session.WaitWithDefaultTimeout() 390 Expect(session.ExitCode()).To(Equal(0)) 391 podID := session.OutputToString() 392 393 // verify we can add a host to the infra's /etc/hosts 394 session = podmanTest.Podman([]string{"run", "--pod", podID, ALPINE, "hostname"}) 395 session.WaitWithDefaultTimeout() 396 Expect(session.ExitCode()).To(Equal(0)) 397 hostname := session.OutputToString() 398 399 infraName := podID[:12] + "-infra" 400 // verify we can see the other hosts of infra's /etc/hosts 401 session = podmanTest.Podman([]string{"inspect", infraName}) 402 session.WaitWithDefaultTimeout() 403 Expect(session.ExitCode()).To(Equal(0)) 404 Expect(session.OutputToString()).To(ContainSubstring(hostname)) 405 }) 406 })