code.cloudfoundry.org/diego-upgrade-stability-tests@v0.0.0-20210607152719-27f1f0151c54/rolling_upgrade_test.go (about)

     1  package dusts_test
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"code.cloudfoundry.org/bbs/models"
     9  	"code.cloudfoundry.org/guardian/gqt/runner"
    10  	"code.cloudfoundry.org/inigo/fixtures"
    11  	"code.cloudfoundry.org/inigo/helpers"
    12  	"code.cloudfoundry.org/inigo/world"
    13  	"code.cloudfoundry.org/lager"
    14  
    15  	archive_helper "code.cloudfoundry.org/archiver/extractor/test_helper"
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  	"github.com/tedsuo/ifrit"
    19  	"github.com/tedsuo/ifrit/ginkgomon"
    20  	"github.com/tedsuo/ifrit/grouper"
    21  )
    22  
    23  var _ = Describe("RollingUpgrade", func() {
    24  
    25  	setupPlumbing := func() ifrit.Process {
    26  		fileServer, fileServerAssetsDir := ComponentMakerV1.FileServer()
    27  
    28  		archiveFiles := fixtures.GoServerApp()
    29  		archive_helper.CreateZipArchive(
    30  			filepath.Join(fileServerAssetsDir, "lrp.zip"),
    31  			archiveFiles,
    32  		)
    33  
    34  		return ginkgomon.Invoke(grouper.NewParallel(os.Kill, grouper.Members{
    35  			{Name: "nats", Runner: ComponentMakerV1.NATS()},
    36  			{Name: "sql", Runner: ComponentMakerV1.SQL()},
    37  			{Name: "consul", Runner: ComponentMakerV1.Consul()},
    38  			{Name: "file-server", Runner: fileServer},
    39  			{Name: "garden", Runner: ComponentMakerV1.Garden(func(cfg *runner.GdnRunnerConfig) {
    40  				poolSize := 100
    41  				cfg.PortPoolSize = &poolSize
    42  			})},
    43  			{Name: "router", Runner: ComponentMakerV1.Router()},
    44  		}))
    45  	}
    46  
    47  	Context("rolling upgrade v0 to v1", func() {
    48  		var (
    49  			canaryPoller ifrit.Process
    50  			plumbing     ifrit.Process
    51  		)
    52  
    53  		BeforeEach(func() {
    54  			GinkgoWriter = io.MultiWriter(GinkgoWriter, componentLogs)
    55  
    56  			diegoV0Version := os.Getenv("DIEGO_VERSION_V0")
    57  
    58  			switch diegoV0Version {
    59  			case diegoGAVersion:
    60  				ComponentMakerV0 = world.MakeV0ComponentMaker(oldArtifacts, addresses, allocator, certAuthority)
    61  				ComponentMakerV0.Setup()
    62  				upgrader = NewGAUpgrader()
    63  			case diegoLocketLocalREVersion:
    64  				ComponentMakerV0 = world.MakeComponentMaker(oldArtifacts, addresses, allocator, certAuthority)
    65  				ComponentMakerV0.Setup()
    66  				upgrader = NewLocketLocalREUpgrader()
    67  			}
    68  
    69  			logger = lager.NewLogger("test")
    70  			logger.RegisterSink(lager.NewWriterSink(GinkgoWriter, lager.DEBUG))
    71  
    72  			plumbing = setupPlumbing()
    73  			helpers.ConsulWaitUntilReady(ComponentMakerV0.Addresses())
    74  
    75  			upgrader.StartUp()
    76  
    77  			bbsClient = ComponentMakerV0.BBSClient()
    78  		})
    79  
    80  		AfterEach(func() {
    81  			destroyContainerErrors := helpers.CleanupGarden(ComponentMakerV1.GardenClient())
    82  
    83  			upgrader.ShutDown()
    84  			helpers.StopProcesses(canaryPoller, plumbing)
    85  
    86  			Expect(destroyContainerErrors).To(
    87  				BeEmpty(),
    88  				"%d containers failed to be destroyed!",
    89  				len(destroyContainerErrors),
    90  			)
    91  		})
    92  
    93  		It("should consistently remain routable", func() {
    94  			canary := helpers.DefaultLRPCreateRequest(ComponentMakerV0.Addresses(), "dust-canary", "dust-canary", 1)
    95  			err := bbsClient.DesireLRP(logger, canary)
    96  			Expect(err).NotTo(HaveOccurred())
    97  			Eventually(helpers.LRPStatePoller(logger, bbsClient, canary.ProcessGuid, nil)).Should(Equal(models.ActualLRPStateRunning))
    98  
    99  			canaryPoller = ifrit.Background(NewPoller(logger, ComponentMakerV0.Addresses().Router, helpers.DefaultHost))
   100  			Eventually(canaryPoller.Ready()).Should(BeClosed())
   101  
   102  			upgrader.RollingUpgrade()
   103  
   104  			By("checking poller is still up")
   105  			Consistently(canaryPoller.Wait()).ShouldNot(Receive())
   106  		})
   107  	})
   108  })