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