github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/inspect_test.go (about) 1 package integration 2 3 import ( 4 "os" 5 "strings" 6 7 . "github.com/containers/podman/v2/test/utils" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 "github.com/opencontainers/selinux/go-selinux" 11 ) 12 13 var _ = Describe("Podman inspect", func() { 14 var ( 15 tempdir string 16 err error 17 podmanTest *PodmanTestIntegration 18 ) 19 20 BeforeEach(func() { 21 tempdir, err = CreateTempDirInTempDir() 22 if err != nil { 23 os.Exit(1) 24 } 25 podmanTest = PodmanTestCreate(tempdir) 26 podmanTest.Setup() 27 podmanTest.SeedImages() 28 }) 29 30 AfterEach(func() { 31 podmanTest.Cleanup() 32 f := CurrentGinkgoTestDescription() 33 processTestResult(f) 34 35 }) 36 37 It("podman inspect alpine image", func() { 38 session := podmanTest.Podman([]string{"inspect", "--format=json", ALPINE}) 39 session.WaitWithDefaultTimeout() 40 Expect(session.ExitCode()).To(Equal(0)) 41 Expect(session.IsJSONOutputValid()).To(BeTrue()) 42 imageData := session.InspectImageJSON() 43 Expect(imageData[0].RepoTags[0]).To(Equal("quay.io/libpod/alpine:latest")) 44 }) 45 46 It("podman inspect bogus container", func() { 47 session := podmanTest.Podman([]string{"inspect", "foobar4321"}) 48 session.WaitWithDefaultTimeout() 49 Expect(session).To(ExitWithError()) 50 }) 51 52 It("podman inspect with GO format", func() { 53 session := podmanTest.Podman([]string{"inspect", "--format", "{{.ID}}", ALPINE}) 54 session.WaitWithDefaultTimeout() 55 Expect(session.ExitCode()).To(Equal(0)) 56 57 result := podmanTest.Podman([]string{"images", "-q", "--no-trunc", ALPINE}) 58 result.WaitWithDefaultTimeout() 59 Expect(session.ExitCode()).To(Equal(0)) 60 Expect(strings.Contains(result.OutputToString(), session.OutputToString())) 61 }) 62 63 It("podman inspect specified type", func() { 64 session := podmanTest.Podman([]string{"inspect", "--type", "image", ALPINE}) 65 session.WaitWithDefaultTimeout() 66 Expect(session.ExitCode()).To(Equal(0)) 67 }) 68 69 It("podman inspect container with GO format for ConmonPidFile", func() { 70 session, ec, _ := podmanTest.RunLsContainer("test1") 71 Expect(ec).To(Equal(0)) 72 73 session = podmanTest.Podman([]string{"inspect", "--format", "{{.ConmonPidFile}}", "test1"}) 74 session.WaitWithDefaultTimeout() 75 Expect(session.ExitCode()).To(Equal(0)) 76 }) 77 78 It("podman inspect container with size", func() { 79 _, ec, _ := podmanTest.RunLsContainer("sizetest") 80 Expect(ec).To(Equal(0)) 81 82 result := podmanTest.Podman([]string{"inspect", "--size", "sizetest"}) 83 result.WaitWithDefaultTimeout() 84 Expect(result.ExitCode()).To(Equal(0)) 85 conData := result.InspectContainerToJSON() 86 Expect(conData[0].SizeRootFs).To(BeNumerically(">", 0)) 87 Expect(*conData[0].SizeRw).To(BeNumerically(">=", 0)) 88 }) 89 90 It("podman inspect container and image", func() { 91 ls, ec, _ := podmanTest.RunLsContainer("") 92 Expect(ec).To(Equal(0)) 93 cid := ls.OutputToString() 94 95 result := podmanTest.Podman([]string{"inspect", "--format={{.ID}}", cid, ALPINE}) 96 result.WaitWithDefaultTimeout() 97 Expect(result.ExitCode()).To(Equal(0)) 98 Expect(len(result.OutputToStringArray())).To(Equal(2)) 99 }) 100 101 It("podman inspect container and filter for Image{ID}", func() { 102 ls, ec, _ := podmanTest.RunLsContainer("") 103 Expect(ec).To(Equal(0)) 104 cid := ls.OutputToString() 105 106 result := podmanTest.Podman([]string{"inspect", "--format={{.ImageID}}", cid}) 107 result.WaitWithDefaultTimeout() 108 Expect(result.ExitCode()).To(Equal(0)) 109 Expect(len(result.OutputToStringArray())).To(Equal(1)) 110 111 result = podmanTest.Podman([]string{"inspect", "--format={{.Image}}", cid}) 112 result.WaitWithDefaultTimeout() 113 Expect(result.ExitCode()).To(Equal(0)) 114 Expect(len(result.OutputToStringArray())).To(Equal(1)) 115 }) 116 117 It("podman inspect container and filter for CreateCommand", func() { 118 ls, ec, _ := podmanTest.RunLsContainer("") 119 Expect(ec).To(Equal(0)) 120 cid := ls.OutputToString() 121 122 result := podmanTest.Podman([]string{"inspect", "--format={{.Config.CreateCommand}}", cid}) 123 result.WaitWithDefaultTimeout() 124 Expect(result.ExitCode()).To(Equal(0)) 125 Expect(len(result.OutputToStringArray())).To(Equal(1)) 126 }) 127 128 It("podman inspect -l with additional input should fail", func() { 129 SkipIfRemote("--latest flag n/a") 130 result := podmanTest.Podman([]string{"inspect", "-l", "1234foobar"}) 131 result.WaitWithDefaultTimeout() 132 Expect(result.ExitCode()).To(Equal(125)) 133 }) 134 135 It("podman inspect with mount filters", func() { 136 137 ctrSession := podmanTest.Podman([]string{"create", "--name", "test", "-v", "/tmp:/test1", ALPINE, "top"}) 138 ctrSession.WaitWithDefaultTimeout() 139 Expect(ctrSession.ExitCode()).To(Equal(0)) 140 141 inspectSource := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Source}}"}) 142 inspectSource.WaitWithDefaultTimeout() 143 Expect(inspectSource.ExitCode()).To(Equal(0)) 144 Expect(inspectSource.OutputToString()).To(Equal("/tmp")) 145 146 inspectSrc := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Src}}"}) 147 inspectSrc.WaitWithDefaultTimeout() 148 Expect(inspectSrc.ExitCode()).To(Equal(0)) 149 Expect(inspectSrc.OutputToString()).To(Equal("/tmp")) 150 151 inspectDestination := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Destination}}"}) 152 inspectDestination.WaitWithDefaultTimeout() 153 Expect(inspectDestination.ExitCode()).To(Equal(0)) 154 Expect(inspectDestination.OutputToString()).To(Equal("/test1")) 155 156 inspectDst := podmanTest.Podman([]string{"inspect", "test", "--format", "{{(index .Mounts 0).Dst}}"}) 157 inspectDst.WaitWithDefaultTimeout() 158 Expect(inspectDst.ExitCode()).To(Equal(0)) 159 Expect(inspectDst.OutputToString()).To(Equal("/test1")) 160 }) 161 162 It("podman inspect shows healthcheck on docker image", func() { 163 podmanTest.AddImageToRWStore(healthcheck) 164 session := podmanTest.Podman([]string{"inspect", "--format=json", healthcheck}) 165 session.WaitWithDefaultTimeout() 166 imageData := session.InspectImageJSON() 167 Expect(imageData[0].HealthCheck.Timeout).To(BeNumerically("==", 3000000000)) 168 Expect(imageData[0].HealthCheck.Interval).To(BeNumerically("==", 60000000000)) 169 Expect(imageData[0].HealthCheck.Test).To(Equal([]string{"CMD-SHELL", "curl -f http://localhost/ || exit 1"})) 170 }) 171 172 It("podman inspect --latest with no container fails", func() { 173 SkipIfRemote("testing --latest flag") 174 175 session := podmanTest.Podman([]string{"inspect", "--latest"}) 176 session.WaitWithDefaultTimeout() 177 Expect(session.ExitCode()).To(Not(Equal(0))) 178 }) 179 180 It("podman [image,container] inspect on image", func() { 181 baseInspect := podmanTest.Podman([]string{"inspect", ALPINE}) 182 baseInspect.WaitWithDefaultTimeout() 183 Expect(baseInspect.ExitCode()).To(Equal(0)) 184 baseJSON := baseInspect.InspectImageJSON() 185 Expect(len(baseJSON)).To(Equal(1)) 186 187 ctrInspect := podmanTest.Podman([]string{"container", "inspect", ALPINE}) 188 ctrInspect.WaitWithDefaultTimeout() 189 Expect(ctrInspect.ExitCode()).To(Not(Equal(0))) 190 191 imageInspect := podmanTest.Podman([]string{"image", "inspect", ALPINE}) 192 imageInspect.WaitWithDefaultTimeout() 193 Expect(imageInspect.ExitCode()).To(Equal(0)) 194 imageJSON := imageInspect.InspectImageJSON() 195 Expect(len(imageJSON)).To(Equal(1)) 196 197 Expect(baseJSON[0].ID).To(Equal(imageJSON[0].ID)) 198 }) 199 200 It("podman [image, container] inspect on container", func() { 201 ctrName := "testCtr" 202 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"}) 203 create.WaitWithDefaultTimeout() 204 Expect(create.ExitCode()).To(Equal(0)) 205 206 baseInspect := podmanTest.Podman([]string{"inspect", ctrName}) 207 baseInspect.WaitWithDefaultTimeout() 208 Expect(baseInspect.ExitCode()).To(Equal(0)) 209 baseJSON := baseInspect.InspectContainerToJSON() 210 Expect(len(baseJSON)).To(Equal(1)) 211 212 ctrInspect := podmanTest.Podman([]string{"container", "inspect", ctrName}) 213 ctrInspect.WaitWithDefaultTimeout() 214 Expect(ctrInspect.ExitCode()).To(Equal(0)) 215 ctrJSON := ctrInspect.InspectContainerToJSON() 216 Expect(len(ctrJSON)).To(Equal(1)) 217 218 imageInspect := podmanTest.Podman([]string{"image", "inspect", ctrName}) 219 imageInspect.WaitWithDefaultTimeout() 220 Expect(imageInspect.ExitCode()).To(Not(Equal(0))) 221 222 Expect(baseJSON[0].ID).To(Equal(ctrJSON[0].ID)) 223 }) 224 225 It("podman inspect always produces a valid array", func() { 226 baseInspect := podmanTest.Podman([]string{"inspect", "doesNotExist"}) 227 baseInspect.WaitWithDefaultTimeout() 228 Expect(baseInspect.ExitCode()).To(Not(Equal(0))) 229 emptyJSON := baseInspect.InspectContainerToJSON() 230 Expect(len(emptyJSON)).To(Equal(0)) 231 }) 232 233 It("podman inspect one container with not exist returns 1-length valid array", func() { 234 ctrName := "testCtr" 235 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"}) 236 create.WaitWithDefaultTimeout() 237 Expect(create.ExitCode()).To(Equal(0)) 238 239 baseInspect := podmanTest.Podman([]string{"inspect", ctrName, "doesNotExist"}) 240 baseInspect.WaitWithDefaultTimeout() 241 Expect(baseInspect.ExitCode()).To(Not(Equal(0))) 242 baseJSON := baseInspect.InspectContainerToJSON() 243 Expect(len(baseJSON)).To(Equal(1)) 244 Expect(baseJSON[0].Name).To(Equal(ctrName)) 245 }) 246 247 It("podman inspect container + image with same name gives container", func() { 248 podmanTest.AddImageToRWStore(ALPINE) 249 ctrName := "testcontainer" 250 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE, "sh"}) 251 create.WaitWithDefaultTimeout() 252 Expect(create.ExitCode()).To(Equal(0)) 253 254 tag := podmanTest.Podman([]string{"tag", ALPINE, ctrName + ":latest"}) 255 tag.WaitWithDefaultTimeout() 256 Expect(tag.ExitCode()).To(Equal(0)) 257 258 baseInspect := podmanTest.Podman([]string{"inspect", ctrName}) 259 baseInspect.WaitWithDefaultTimeout() 260 Expect(baseInspect.ExitCode()).To(Equal(0)) 261 baseJSON := baseInspect.InspectContainerToJSON() 262 Expect(len(baseJSON)).To(Equal(1)) 263 Expect(baseJSON[0].Name).To(Equal(ctrName)) 264 }) 265 266 It("podman inspect - HostConfig.SecurityOpt ", func() { 267 if !selinux.GetEnabled() { 268 Skip("SELinux not enabled") 269 } 270 271 ctrName := "hugo" 272 create := podmanTest.Podman([]string{ 273 "create", "--name", ctrName, 274 "--security-opt", "seccomp=unconfined", 275 "--security-opt", "label=type:spc_t", 276 "--security-opt", "label=level:s0", 277 ALPINE, "sh"}) 278 279 create.WaitWithDefaultTimeout() 280 Expect(create.ExitCode()).To(Equal(0)) 281 282 baseInspect := podmanTest.Podman([]string{"inspect", ctrName}) 283 baseInspect.WaitWithDefaultTimeout() 284 Expect(baseInspect.ExitCode()).To(Equal(0)) 285 baseJSON := baseInspect.InspectContainerToJSON() 286 Expect(len(baseJSON)).To(Equal(1)) 287 Expect(baseJSON[0].HostConfig.SecurityOpt).To(Equal([]string{"label=type:spc_t,label=level:s0", "seccomp=unconfined"})) 288 }) 289 290 It("podman inspect pod", func() { 291 podName := "testpod" 292 create := podmanTest.Podman([]string{"pod", "create", "--name", podName}) 293 create.WaitWithDefaultTimeout() 294 Expect(create.ExitCode()).To(Equal(0)) 295 296 inspect := podmanTest.Podman([]string{"inspect", podName}) 297 inspect.WaitWithDefaultTimeout() 298 Expect(inspect.ExitCode()).To(Equal(0)) 299 Expect(inspect.IsJSONOutputValid()).To(BeTrue()) 300 podData := inspect.InspectPodArrToJSON() 301 Expect(podData[0].Name).To(Equal(podName)) 302 }) 303 304 It("podman inspect pod with type", func() { 305 podName := "testpod" 306 create := podmanTest.Podman([]string{"pod", "create", "--name", podName}) 307 create.WaitWithDefaultTimeout() 308 Expect(create.ExitCode()).To(Equal(0)) 309 310 inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", podName}) 311 inspect.WaitWithDefaultTimeout() 312 Expect(inspect.ExitCode()).To(Equal(0)) 313 Expect(inspect.IsJSONOutputValid()).To(BeTrue()) 314 podData := inspect.InspectPodArrToJSON() 315 Expect(podData[0].Name).To(Equal(podName)) 316 }) 317 318 It("podman inspect latest pod", func() { 319 SkipIfRemote("--latest flag n/a") 320 podName := "testpod" 321 create := podmanTest.Podman([]string{"pod", "create", "--name", podName}) 322 create.WaitWithDefaultTimeout() 323 Expect(create.ExitCode()).To(Equal(0)) 324 325 inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", "--latest"}) 326 inspect.WaitWithDefaultTimeout() 327 Expect(inspect.ExitCode()).To(Equal(0)) 328 Expect(inspect.IsJSONOutputValid()).To(BeTrue()) 329 podData := inspect.InspectPodArrToJSON() 330 Expect(podData[0].Name).To(Equal(podName)) 331 }) 332 It("podman inspect latest defaults to latest container", func() { 333 SkipIfRemote("--latest flag n/a") 334 podName := "testpod" 335 pod := podmanTest.Podman([]string{"pod", "create", "--name", podName}) 336 pod.WaitWithDefaultTimeout() 337 Expect(pod.ExitCode()).To(Equal(0)) 338 339 inspect1 := podmanTest.Podman([]string{"inspect", "--type", "pod", podName}) 340 inspect1.WaitWithDefaultTimeout() 341 Expect(inspect1.ExitCode()).To(Equal(0)) 342 Expect(inspect1.IsJSONOutputValid()).To(BeTrue()) 343 podData := inspect1.InspectPodArrToJSON() 344 infra := podData[0].Containers[0].Name 345 346 inspect := podmanTest.Podman([]string{"inspect", "--latest"}) 347 inspect.WaitWithDefaultTimeout() 348 Expect(inspect.ExitCode()).To(Equal(0)) 349 Expect(inspect.IsJSONOutputValid()).To(BeTrue()) 350 containerData := inspect.InspectContainerToJSON() 351 Expect(containerData[0].Name).To(Equal(infra)) 352 }) 353 354 It("podman inspect network", func() { 355 name, path := generateNetworkConfig(podmanTest) 356 defer removeConf(path) 357 358 session := podmanTest.Podman([]string{"inspect", name, "--format", "{{.cniVersion}}"}) 359 session.WaitWithDefaultTimeout() 360 Expect(session.ExitCode()).To(Equal(0)) 361 Expect(session.LineInOutputContains("0.3.0")).To(BeTrue()) 362 }) 363 364 It("podman inspect a volume", func() { 365 session := podmanTest.Podman([]string{"volume", "create", "myvol"}) 366 session.WaitWithDefaultTimeout() 367 volName := session.OutputToString() 368 Expect(session.ExitCode()).To(Equal(0)) 369 370 session = podmanTest.Podman([]string{"inspect", volName}) 371 session.WaitWithDefaultTimeout() 372 Expect(session.ExitCode()).To(Equal(0)) 373 Expect(session.IsJSONOutputValid()).To(BeTrue()) 374 }) 375 376 It("podman inspect a volume with --format", func() { 377 session := podmanTest.Podman([]string{"volume", "create", "myvol"}) 378 session.WaitWithDefaultTimeout() 379 volName := session.OutputToString() 380 Expect(session.ExitCode()).To(Equal(0)) 381 382 session = podmanTest.Podman([]string{"inspect", "--format", "{{.Name}}", volName}) 383 session.WaitWithDefaultTimeout() 384 Expect(session.ExitCode()).To(Equal(0)) 385 Expect(session.OutputToString()).To(Equal(volName)) 386 }) 387 It("podman inspect --type container on a pod should fail", func() { 388 podName := "testpod" 389 create := podmanTest.Podman([]string{"pod", "create", "--name", podName}) 390 create.WaitWithDefaultTimeout() 391 Expect(create.ExitCode()).To(Equal(0)) 392 393 inspect := podmanTest.Podman([]string{"inspect", "--type", "container", podName}) 394 inspect.WaitWithDefaultTimeout() 395 Expect(inspect).To(ExitWithError()) 396 }) 397 398 It("podman inspect --type network on a container should fail", func() { 399 ctrName := "testctr" 400 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE}) 401 create.WaitWithDefaultTimeout() 402 Expect(create.ExitCode()).To(Equal(0)) 403 404 inspect := podmanTest.Podman([]string{"inspect", "--type", "network", ctrName}) 405 inspect.WaitWithDefaultTimeout() 406 Expect(inspect).To(ExitWithError()) 407 }) 408 409 It("podman inspect --type pod on a container should fail", func() { 410 ctrName := "testctr" 411 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE}) 412 create.WaitWithDefaultTimeout() 413 Expect(create.ExitCode()).To(Equal(0)) 414 415 inspect := podmanTest.Podman([]string{"inspect", "--type", "pod", ctrName}) 416 inspect.WaitWithDefaultTimeout() 417 Expect(inspect).To(ExitWithError()) 418 }) 419 420 It("podman inspect --type volume on a container should fail", func() { 421 ctrName := "testctr" 422 create := podmanTest.Podman([]string{"create", "--name", ctrName, ALPINE}) 423 create.WaitWithDefaultTimeout() 424 Expect(create.ExitCode()).To(Equal(0)) 425 426 inspect := podmanTest.Podman([]string{"inspect", "--type", "volume", ctrName}) 427 inspect.WaitWithDefaultTimeout() 428 Expect(inspect).To(ExitWithError()) 429 }) 430 431 })