github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/upgrade/upgrade_single_node_test.go (about) 1 package upgrade_test 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 8 "github.com/cloudfoundry/postgres-release/src/acceptance-tests/testing/helpers" 9 10 . "github.com/onsi/ginkgo/v2" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("Upgrading postgres-release", func() { 15 16 var DB helpers.PGData 17 var pgprops helpers.Properties 18 var version int 19 var latestPostgreSQLVersion string 20 var pgHost string 21 var deploymentPrefix string 22 var deployHelper helpers.DeployHelper 23 24 BeforeEach(func() { 25 var err error 26 deployHelper, err = helpers.NewDeployHelper(configParams, "upgrade", helpers.DeployLatestVersion) 27 Expect(err).NotTo(HaveOccurred()) 28 }) 29 30 JustBeforeEach(func() { 31 var err error 32 deployHelper.SetDeploymentName(deploymentPrefix) 33 deployHelper.SetPGVersion(version) 34 latestPostgreSQLVersion = configParams.PostgreSQLVersion 35 if latestPostgreSQLVersion == "current" { 36 latestPostgreSQLVersion = versions.GetPostgreSQLVersion(versions.GetLatestVersion()) 37 } 38 deployHelper.InitializeVariables() 39 40 By("Deploying a single postgres instance") 41 err = deployHelper.Deploy() 42 Expect(err).NotTo(HaveOccurred()) 43 deployHelper.EnablePrintDiffs() 44 45 By("Initializing a postgres client connection") 46 pgprops, pgHost, err = deployHelper.GetPGPropsAndHost() 47 Expect(err).NotTo(HaveOccurred()) 48 DB, err = deployHelper.ConnectToPostgres(pgHost, pgprops) 49 Expect(err).NotTo(HaveOccurred()) 50 By("Populating the database") 51 err = DB.CreateAndPopulateTables(pgprops.Databases.Databases[0].Name, helpers.SmallLoad) 52 Expect(err).NotTo(HaveOccurred()) 53 }) 54 55 AssertUpgradeSuccessful := func() func() { 56 return func() { 57 var err error 58 By("Validating the database has been deployed as requested") 59 pgData, err := DB.GetData() 60 Expect(err).NotTo(HaveOccurred()) 61 validator := helpers.NewValidator(pgprops, pgData, DB, versions.GetPostgreSQLVersion(version)) 62 err = validator.ValidateAll() 63 Expect(err).NotTo(HaveOccurred()) 64 65 By("Upgrading to the new release") 66 deployHelper.SetPGVersion(helpers.DeployLatestVersion) 67 err = deployHelper.Deploy() 68 Expect(err).NotTo(HaveOccurred()) 69 70 By("Validating the database content is still valid after upgrade") 71 pgDataAfter, err := DB.GetData() 72 Expect(err).NotTo(HaveOccurred()) 73 74 tablesEqual := validator.CompareTablesTo(pgDataAfter) 75 Expect(tablesEqual).To(BeTrue()) 76 77 By("Validating the database has been upgraded as requested") 78 validator = helpers.NewValidator(pgprops, pgDataAfter, DB, latestPostgreSQLVersion) 79 err = validator.ValidateAll() 80 Expect(err).NotTo(HaveOccurred()) 81 82 By("Validating the VM can still be restarted") 83 err = deployHelper.GetDeployment().Restart("postgres") 84 Expect(err).NotTo(HaveOccurred()) 85 86 if deploymentPrefix == "upg-old-nocopy" { 87 By("Validating the postgres-previous is not created") 88 if !versions.IsMajor(latestPostgreSQLVersion, versions.GetOldVersion()) { 89 sshKeyFile, err := deployHelper.WriteSSHKey() 90 Expect(err).NotTo(HaveOccurred()) 91 cmd := exec.Command("ssh", "-i", sshKeyFile, "-o", "BatchMode=yes", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", fmt.Sprintf("%s@%s", deployHelper.GetVariable("testuser_name"), pgHost), "sudo test -d /var/vcap/store/postgres/postgres-previous") 92 93 stdout, stderr, err := helpers.RunCommand(cmd) 94 Expect(err).To(HaveOccurred(), "stderr was: '%v', stdout was: '%v'", stderr, stdout) 95 err = os.Remove(sshKeyFile) 96 Expect(err).NotTo(HaveOccurred()) 97 } 98 } else if deploymentPrefix == "upg-old" { 99 By("Validating the postgres-previous is created") 100 sshKeyFile, err := deployHelper.WriteSSHKey() 101 Expect(err).NotTo(HaveOccurred()) 102 cmd := exec.Command("ssh", "-i", sshKeyFile, "-o", "BatchMode=yes", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", fmt.Sprintf("%s@%s", deployHelper.GetVariable("testuser_name"), pgHost), "sudo test -d /var/vcap/store/postgres/postgres-previous") 103 104 stdout, stderr, err := helpers.RunCommand(cmd) 105 Expect(err).NotTo(HaveOccurred(), "stderr was: '%v', stdout was: '%v'", stderr, stdout) 106 107 err = os.Remove(sshKeyFile) 108 Expect(err).NotTo(HaveOccurred()) 109 } 110 } 111 } 112 113 Context("Upgrading from minor-no-copy version", func() { 114 115 BeforeEach(func() { 116 version = versions.GetOldVersion() 117 deploymentPrefix = "upg-old-nocopy" 118 deployHelper.SetOpDefs(helpers.Define_upgrade_no_copy_ops()) 119 }) 120 121 It("Successfully upgrades from old with no copy of the data directory", AssertUpgradeSuccessful()) 122 }) 123 124 Context("Upgrading from old version", func() { 125 126 BeforeEach(func() { 127 version = versions.GetOldVersion() 128 deploymentPrefix = "upg-old" 129 }) 130 131 It("Successfully upgrades from old", AssertUpgradeSuccessful()) 132 }) 133 134 Context("Upgrading from master version", func() { 135 136 BeforeEach(func() { 137 version = versions.GetLatestVersion() 138 deploymentPrefix = "upg-master" 139 }) 140 141 It("Successfully upgrades from master", AssertUpgradeSuccessful()) 142 }) 143 144 AfterEach(func() { 145 var err error 146 if DB.Data.SSLRootCert != "" { 147 err = os.Remove(DB.Data.SSLRootCert) 148 Expect(err).NotTo(HaveOccurred()) 149 } 150 if DB.Data.CertUser.Certificate != "" { 151 err = os.Remove(DB.Data.CertUser.Certificate) 152 Expect(err).NotTo(HaveOccurred()) 153 } 154 if DB.Data.CertUser.Key != "" { 155 err = os.Remove(DB.Data.CertUser.Key) 156 Expect(err).NotTo(HaveOccurred()) 157 } 158 err = deployHelper.GetDeployment().DeleteDeployment() 159 Expect(err).NotTo(HaveOccurred()) 160 }) 161 })