github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/test/e2e/port_test.go (about)

     1  // +build !remoteclient
     2  
     3  package integration
     4  
     5  import (
     6  	"fmt"
     7  	"os"
     8  	"strings"
     9  
    10  	. "github.com/containers/libpod/test/utils"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Podman port", func() {
    16  	var (
    17  		tempdir    string
    18  		err        error
    19  		podmanTest *PodmanTestIntegration
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		tempdir, err = CreateTempDirInTempDir()
    24  		if err != nil {
    25  			os.Exit(1)
    26  		}
    27  		podmanTest = PodmanTestCreate(tempdir)
    28  		podmanTest.Setup()
    29  		podmanTest.SeedImages()
    30  	})
    31  
    32  	AfterEach(func() {
    33  		podmanTest.Cleanup()
    34  		f := CurrentGinkgoTestDescription()
    35  		processTestResult(f)
    36  
    37  	})
    38  
    39  	It("podman port all and latest", func() {
    40  		result := podmanTest.Podman([]string{"port", "-a", "-l"})
    41  		result.WaitWithDefaultTimeout()
    42  		Expect(result).To(ExitWithError())
    43  	})
    44  
    45  	It("podman port all and extra", func() {
    46  		result := podmanTest.Podman([]string{"port", "-a", "foobar"})
    47  		result.WaitWithDefaultTimeout()
    48  		Expect(result).To(ExitWithError())
    49  	})
    50  
    51  	It("podman port -l nginx", func() {
    52  		session, cid := podmanTest.RunNginxWithHealthCheck("")
    53  		Expect(session.ExitCode()).To(Equal(0))
    54  
    55  		if err := podmanTest.RunHealthCheck(cid); err != nil {
    56  			Fail(err.Error())
    57  		}
    58  
    59  		result := podmanTest.Podman([]string{"port", "-l"})
    60  		result.WaitWithDefaultTimeout()
    61  		Expect(result.ExitCode()).To(Equal(0))
    62  		port := strings.Split(result.OutputToStringArray()[0], ":")[1]
    63  		Expect(result.LineInOuputStartsWith(fmt.Sprintf("80/tcp -> 0.0.0.0:%s", port))).To(BeTrue())
    64  	})
    65  
    66  	It("podman container port  -l nginx", func() {
    67  		session, cid := podmanTest.RunNginxWithHealthCheck("")
    68  		Expect(session.ExitCode()).To(Equal(0))
    69  
    70  		if err := podmanTest.RunHealthCheck(cid); err != nil {
    71  			Fail(err.Error())
    72  		}
    73  
    74  		result := podmanTest.Podman([]string{"container", "port", "-l"})
    75  		result.WaitWithDefaultTimeout()
    76  		Expect(result.ExitCode()).To(Equal(0))
    77  		port := strings.Split(result.OutputToStringArray()[0], ":")[1]
    78  		Expect(result.LineInOuputStartsWith(fmt.Sprintf("80/tcp -> 0.0.0.0:%s", port))).To(BeTrue())
    79  	})
    80  
    81  	It("podman port -l port nginx", func() {
    82  		session, cid := podmanTest.RunNginxWithHealthCheck("")
    83  		Expect(session.ExitCode()).To(Equal(0))
    84  
    85  		if err := podmanTest.RunHealthCheck(cid); err != nil {
    86  			Fail(err.Error())
    87  		}
    88  
    89  		result := podmanTest.Podman([]string{"port", "-l", "80"})
    90  		result.WaitWithDefaultTimeout()
    91  		Expect(result.ExitCode()).To(Equal(0))
    92  		port := strings.Split(result.OutputToStringArray()[0], ":")[1]
    93  		Expect(result.LineInOuputStartsWith(fmt.Sprintf("0.0.0.0:%s", port))).To(BeTrue())
    94  	})
    95  
    96  	It("podman port -a nginx", func() {
    97  		session, cid := podmanTest.RunNginxWithHealthCheck("")
    98  		Expect(session.ExitCode()).To(Equal(0))
    99  
   100  		if err := podmanTest.RunHealthCheck(cid); err != nil {
   101  			Fail(err.Error())
   102  		}
   103  
   104  		result := podmanTest.Podman([]string{"port", "-a"})
   105  		result.WaitWithDefaultTimeout()
   106  		Expect(result.ExitCode()).To(Equal(0))
   107  	})
   108  
   109  	It("podman port nginx by name", func() {
   110  		session, cid := podmanTest.RunNginxWithHealthCheck("portcheck")
   111  		Expect(session.ExitCode()).To(Equal(0))
   112  
   113  		if err := podmanTest.RunHealthCheck(cid); err != nil {
   114  			Fail(err.Error())
   115  		}
   116  
   117  		result := podmanTest.Podman([]string{"port", "portcheck"})
   118  		result.WaitWithDefaultTimeout()
   119  		Expect(result.ExitCode()).To(Equal(0))
   120  		result.LineInOuputStartsWith("80/tcp -> 0.0.0.0:")
   121  	})
   122  
   123  	It("podman port multiple ports", func() {
   124  		// Acquire and release locks
   125  		lock1 := GetPortLock("5000")
   126  		defer lock1.Unlock()
   127  		lock2 := GetPortLock("5001")
   128  		defer lock2.Unlock()
   129  
   130  		setup := podmanTest.Podman([]string{"run", "-dt", "-p", "5000:5000", "-p", "5001:5001", ALPINE, "top"})
   131  		setup.WaitWithDefaultTimeout()
   132  		Expect(setup.ExitCode()).To(BeZero())
   133  
   134  		// Check that the first port was honored
   135  		result1 := podmanTest.Podman([]string{"port", "-l", "5000"})
   136  		result1.WaitWithDefaultTimeout()
   137  		Expect(result1.ExitCode()).To(BeZero())
   138  		Expect(result1.LineInOuputStartsWith("0.0.0.0:5000")).To(BeTrue())
   139  
   140  		// Check that the second port was honored
   141  		result2 := podmanTest.Podman([]string{"port", "-l", "5001"})
   142  		result2.WaitWithDefaultTimeout()
   143  		Expect(result2.ExitCode()).To(BeZero())
   144  		Expect(result2.LineInOuputStartsWith("0.0.0.0:5001")).To(BeTrue())
   145  	})
   146  })