github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/logs_test.go (about) 1 package integration 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "strings" 8 9 . "github.com/containers/libpod/test/utils" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Podman logs", 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.Cleanup() 33 f := CurrentGinkgoTestDescription() 34 processTestResult(f) 35 36 }) 37 38 It("podman logs for container", func() { 39 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 40 logc.WaitWithDefaultTimeout() 41 Expect(logc.ExitCode()).To(Equal(0)) 42 cid := logc.OutputToString() 43 44 results := podmanTest.Podman([]string{"logs", cid}) 45 results.WaitWithDefaultTimeout() 46 Expect(results.ExitCode()).To(Equal(0)) 47 Expect(len(results.OutputToStringArray())).To(Equal(3)) 48 }) 49 50 It("podman logs tail two lines", func() { 51 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 52 logc.WaitWithDefaultTimeout() 53 Expect(logc.ExitCode()).To(Equal(0)) 54 cid := logc.OutputToString() 55 56 results := podmanTest.Podman([]string{"logs", "--tail", "2", cid}) 57 results.WaitWithDefaultTimeout() 58 Expect(results.ExitCode()).To(Equal(0)) 59 Expect(len(results.OutputToStringArray())).To(Equal(2)) 60 }) 61 62 It("podman logs tail zero lines", func() { 63 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 64 logc.WaitWithDefaultTimeout() 65 Expect(logc.ExitCode()).To(Equal(0)) 66 cid := logc.OutputToString() 67 68 results := podmanTest.Podman([]string{"logs", "--tail", "0", cid}) 69 results.WaitWithDefaultTimeout() 70 Expect(results.ExitCode()).To(Equal(0)) 71 Expect(len(results.OutputToStringArray())).To(Equal(0)) 72 }) 73 74 It("podman logs tail 99 lines", func() { 75 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 76 logc.WaitWithDefaultTimeout() 77 Expect(logc.ExitCode()).To(Equal(0)) 78 cid := logc.OutputToString() 79 80 results := podmanTest.Podman([]string{"logs", "--tail", "99", cid}) 81 results.WaitWithDefaultTimeout() 82 Expect(results.ExitCode()).To(Equal(0)) 83 Expect(len(results.OutputToStringArray())).To(Equal(3)) 84 }) 85 86 It("podman logs tail 2 lines with timestamps", func() { 87 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 88 logc.WaitWithDefaultTimeout() 89 Expect(logc.ExitCode()).To(Equal(0)) 90 cid := logc.OutputToString() 91 92 results := podmanTest.Podman([]string{"logs", "--tail", "2", "-t", cid}) 93 results.WaitWithDefaultTimeout() 94 Expect(results.ExitCode()).To(Equal(0)) 95 Expect(len(results.OutputToStringArray())).To(Equal(2)) 96 }) 97 98 It("podman logs latest with since time", func() { 99 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 100 logc.WaitWithDefaultTimeout() 101 Expect(logc.ExitCode()).To(Equal(0)) 102 cid := logc.OutputToString() 103 104 results := podmanTest.Podman([]string{"logs", "--since", "2017-08-07T10:10:09.056611202-04:00", cid}) 105 results.WaitWithDefaultTimeout() 106 Expect(results.ExitCode()).To(Equal(0)) 107 Expect(len(results.OutputToStringArray())).To(Equal(3)) 108 }) 109 110 It("podman logs latest with since duration", func() { 111 logc := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 112 logc.WaitWithDefaultTimeout() 113 Expect(logc.ExitCode()).To(Equal(0)) 114 cid := logc.OutputToString() 115 116 results := podmanTest.Podman([]string{"logs", "--since", "10m", cid}) 117 results.WaitWithDefaultTimeout() 118 Expect(results.ExitCode()).To(Equal(0)) 119 Expect(len(results.OutputToStringArray())).To(Equal(3)) 120 }) 121 122 It("podman logs latest and container name should fail", func() { 123 results := podmanTest.Podman([]string{"logs", "-l", "foobar"}) 124 results.WaitWithDefaultTimeout() 125 Expect(results).To(ExitWithError()) 126 }) 127 128 It("podman logs two containers and should display short container IDs", func() { 129 log1 := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 130 log1.WaitWithDefaultTimeout() 131 Expect(log1.ExitCode()).To(Equal(0)) 132 cid1 := log1.OutputToString() 133 134 log2 := podmanTest.Podman([]string{"run", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 135 log2.WaitWithDefaultTimeout() 136 Expect(log2.ExitCode()).To(Equal(0)) 137 cid2 := log2.OutputToString() 138 139 results := podmanTest.Podman([]string{"logs", cid1, cid2}) 140 results.WaitWithDefaultTimeout() 141 Expect(results.ExitCode()).To(Equal(0)) 142 143 output := results.OutputToStringArray() 144 Expect(len(output)).To(Equal(6)) 145 Expect(strings.Contains(output[0], cid1[:12]) || strings.Contains(output[0], cid2[:12])).To(BeTrue()) 146 }) 147 148 It("podman logs on a created container should result in 0 exit code", func() { 149 session := podmanTest.Podman([]string{"create", "-dt", "--name", "log", ALPINE}) 150 session.WaitWithDefaultTimeout() 151 Expect(session.ExitCode()).To(BeZero()) 152 153 results := podmanTest.Podman([]string{"logs", "log"}) 154 results.WaitWithDefaultTimeout() 155 Expect(results.ExitCode()).To(BeZero()) 156 }) 157 158 It("podman journald logs for container with container tag", func() { 159 Skip("need to verify images have correct packages for journald") 160 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "--log-opt=tag={{.ImageName}}", "-d", ALPINE, "sh", "-c", "echo podman; sleep 0.1; echo podman; sleep 0.1; echo podman"}) 161 logc.WaitWithDefaultTimeout() 162 Expect(logc.ExitCode()).To(Equal(0)) 163 cid := logc.OutputToString() 164 165 wait := podmanTest.Podman([]string{"wait", "-l"}) 166 wait.WaitWithDefaultTimeout() 167 Expect(wait.ExitCode()).To(BeZero()) 168 169 cmd := exec.Command("journalctl", "--no-pager", "-o", "json", "--output-fields=CONTAINER_TAG", "-u", fmt.Sprintf("libpod-conmon-%s.scope", cid)) 170 out, err := cmd.CombinedOutput() 171 Expect(err).To(BeNil()) 172 Expect(string(out)).To(ContainSubstring("alpine")) 173 }) 174 175 It("podman journald logs for container", func() { 176 Skip("need to verify images have correct packages for journald") 177 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 178 logc.WaitWithDefaultTimeout() 179 Expect(logc.ExitCode()).To(Equal(0)) 180 cid := logc.OutputToString() 181 182 results := podmanTest.Podman([]string{"logs", cid}) 183 results.WaitWithDefaultTimeout() 184 Expect(results.ExitCode()).To(Equal(0)) 185 Expect(len(results.OutputToStringArray())).To(Equal(3)) 186 }) 187 188 It("podman journald logs tail two lines", func() { 189 Skip("need to verify images have correct packages for journald") 190 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 191 logc.WaitWithDefaultTimeout() 192 Expect(logc.ExitCode()).To(Equal(0)) 193 cid := logc.OutputToString() 194 195 results := podmanTest.Podman([]string{"logs", "--tail", "2", cid}) 196 results.WaitWithDefaultTimeout() 197 Expect(results.ExitCode()).To(Equal(0)) 198 Expect(len(results.OutputToStringArray())).To(Equal(2)) 199 }) 200 201 It("podman journald logs tail 99 lines", func() { 202 Skip("need to verify images have correct packages for journald") 203 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 204 logc.WaitWithDefaultTimeout() 205 Expect(logc.ExitCode()).To(Equal(0)) 206 cid := logc.OutputToString() 207 208 results := podmanTest.Podman([]string{"logs", "--tail", "99", cid}) 209 results.WaitWithDefaultTimeout() 210 Expect(results.ExitCode()).To(Equal(0)) 211 Expect(len(results.OutputToStringArray())).To(Equal(3)) 212 }) 213 214 It("podman journald logs tail 2 lines with timestamps", func() { 215 Skip("need to verify images have correct packages for journald") 216 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 217 logc.WaitWithDefaultTimeout() 218 Expect(logc.ExitCode()).To(Equal(0)) 219 cid := logc.OutputToString() 220 221 results := podmanTest.Podman([]string{"logs", "--tail", "2", "-t", cid}) 222 results.WaitWithDefaultTimeout() 223 Expect(results.ExitCode()).To(Equal(0)) 224 Expect(len(results.OutputToStringArray())).To(Equal(2)) 225 }) 226 227 It("podman journald logs latest with since time", func() { 228 Skip("need to verify images have correct packages for journald") 229 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 230 logc.WaitWithDefaultTimeout() 231 Expect(logc.ExitCode()).To(Equal(0)) 232 cid := logc.OutputToString() 233 234 results := podmanTest.Podman([]string{"logs", "--since", "2017-08-07T10:10:09.056611202-04:00", cid}) 235 results.WaitWithDefaultTimeout() 236 Expect(results.ExitCode()).To(Equal(0)) 237 Expect(len(results.OutputToStringArray())).To(Equal(3)) 238 }) 239 240 It("podman journald logs latest with since duration", func() { 241 Skip("need to verify images have correct packages for journald") 242 logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-dt", ALPINE, "sh", "-c", "echo podman; echo podman; echo podman"}) 243 logc.WaitWithDefaultTimeout() 244 Expect(logc.ExitCode()).To(Equal(0)) 245 cid := logc.OutputToString() 246 247 results := podmanTest.Podman([]string{"logs", "--since", "10m", cid}) 248 results.WaitWithDefaultTimeout() 249 Expect(results.ExitCode()).To(Equal(0)) 250 Expect(len(results.OutputToStringArray())).To(Equal(3)) 251 }) 252 253 It("podman logs -f two lines", func() { 254 containerName := "logs-f-rm" 255 256 logc := podmanTest.Podman([]string{"run", "--rm", "--name", containerName, "-dt", ALPINE, "sh", "-c", "echo podman; sleep 1; echo podman"}) 257 logc.WaitWithDefaultTimeout() 258 Expect(logc.ExitCode()).To(Equal(0)) 259 260 results := podmanTest.Podman([]string{"logs", "-f", containerName}) 261 results.WaitWithDefaultTimeout() 262 Expect(results.ExitCode()).To(Equal(0)) 263 264 // Verify that the cleanup process worked correctly and we can recreate a container with the same name 265 logc = podmanTest.Podman([]string{"run", "--rm", "--name", containerName, "-dt", ALPINE, "true"}) 266 logc.WaitWithDefaultTimeout() 267 Expect(logc.ExitCode()).To(Equal(0)) 268 }) 269 })