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  })