github.com/dmaizel/tests@v0.0.0-20210728163746-cae6a2d9cee8/integration/docker/package_manager_test.go (about)

     1  // Copyright (c) 2018 Intel Corporation
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package docker
     6  
     7  import (
     8  	"fmt"
     9  	"os"
    10  
    11  	. "github.com/kata-containers/tests"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  const (
    17  	packageManagerTimeout  = 900
    18  	packageManagerMaxTries = 5
    19  )
    20  
    21  func tryPackageManagerCommand(container string, command []string, expectedExitCode int) int {
    22  	cmd := []string{container}
    23  	exitCode := int(-1)
    24  	for i := 0; i < packageManagerMaxTries; i++ {
    25  		_, _, exitCode = runDockerCommandWithTimeout(packageManagerTimeout, "exec", append(cmd, command...)...)
    26  		if exitCode == expectedExitCode {
    27  			break
    28  		}
    29  	}
    30  	return exitCode
    31  }
    32  
    33  var _ = Describe("[Serial Test] package manager update test", func() {
    34  	var (
    35  		id         string
    36  		args       []string
    37  		proxyVar   string
    38  		proxyValue string
    39  	)
    40  
    41  	BeforeEach(func() {
    42  		id = randomDockerName()
    43  		args = []string{}
    44  		proxyVar = "http_proxy"
    45  		proxyValue = os.Getenv(proxyVar)
    46  		if proxyValue != "" {
    47  			args = append(args, "-e", proxyVar+"="+proxyValue)
    48  		}
    49  	})
    50  
    51  	AfterEach(func() {
    52  		Expect(ExistDockerContainer(id)).NotTo(BeTrue())
    53  	})
    54  
    55  	Context("check apt-get update and upgrade", func() {
    56  		It("should not fail", func() {
    57  			args = append(args, "-td", "--name", id, DebianImage, "sh")
    58  			_, _, exitCode := dockerRun(args...)
    59  			Expect(exitCode).To(BeZero())
    60  
    61  			exitCode = tryPackageManagerCommand(id, []string{"apt-get", "-y", "update"}, 0)
    62  			Expect(exitCode).To(BeZero())
    63  
    64  			exitCode = tryPackageManagerCommand(id, []string{"apt-get", "-y", "upgrade"}, 0)
    65  			Expect(exitCode).To(BeZero())
    66  
    67  			Expect(RemoveDockerContainer(id)).To(BeTrue())
    68  		})
    69  	})
    70  
    71  	Context("check dnf update", func() {
    72  		It("should not fail", func() {
    73  			if KataConfig.Hypervisor[KataHypervisor].SharedFS == "virtio-fs" {
    74  				Skip("Skip issue: https://github.com/kata-containers/tests/issues/2008")
    75  			}
    76  
    77  			// This Fedora version is used mainly because of https://github.com/kata-containers/tests/issues/2358
    78  			args = append(args, "-td", "--name", id, Fedora30Image, "sh")
    79  			_, _, exitCode := dockerRun(args...)
    80  			Expect(exitCode).To(BeZero())
    81  
    82  			if proxyValue != "" {
    83  				_, _, exitCode = dockerExec(id, "sed", "-i", fmt.Sprintf("$ a proxy=%s", proxyValue), "/etc/dnf/dnf.conf")
    84  				Expect(exitCode).To(BeZero())
    85  			}
    86  
    87  			exitCode = tryPackageManagerCommand(id, []string{"dnf", "-y", "update"}, 0)
    88  			Expect(exitCode).To(BeZero())
    89  
    90  			Expect(RemoveDockerContainer(id)).To(BeTrue())
    91  		})
    92  	})
    93  
    94  	Context("check yum update", func() {
    95  		It("should not fail", func() {
    96  			if KataConfig.Hypervisor[KataHypervisor].SharedFS == "virtio-fs" {
    97  				Skip("Skip issue: https://github.com/kata-containers/tests/issues/2008")
    98  			}
    99  			args = append(args, "--rm", "-td", "--name", id, CentosImage, "sh")
   100  			_, _, exitCode := dockerRun(args...)
   101  			Expect(exitCode).To(BeZero())
   102  
   103  			exitCode = tryPackageManagerCommand(id, []string{"yum", "-y", "update"}, 0)
   104  			Expect(exitCode).To(BeZero())
   105  
   106  			Expect(RemoveDockerContainer(id)).To(BeTrue())
   107  		})
   108  	})
   109  })