github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/config_test.go (about) 1 package helpers_test 2 3 import ( 4 "errors" 5 "fmt" 6 "io/ioutil" 7 "os" 8 9 "github.com/cloudfoundry/postgres-release/src/acceptance-tests/testing/helpers" 10 11 . "github.com/onsi/ginkgo/v2" 12 . "github.com/onsi/gomega" 13 ) 14 15 func writeConfigFile(data string) (string, error) { 16 tempFile, err := ioutil.TempFile("", "config") 17 if err != nil { 18 return "", err 19 } 20 21 err = ioutil.WriteFile(tempFile.Name(), []byte(data), os.ModePerm) 22 if err != nil { 23 return "", err 24 } 25 26 return tempFile.Name(), nil 27 } 28 29 var _ = Describe("Configuration", func() { 30 Describe("Load configuration", func() { 31 Context("With a valid config file", func() { 32 var configFilePath string 33 34 AfterEach(func() { 35 err := os.Remove(configFilePath) 36 Expect(err).NotTo(HaveOccurred()) 37 }) 38 39 Context("With uaa authentication", func() { 40 41 It("Load the yaml content from the provided path without defaults", func() { 42 var err error 43 var data = ` 44 postgres_release_version: "some-version" 45 postgresql_version: "some-version" 46 versions_file: "some-path" 47 bosh: 48 target: some-target 49 use_uaa: true 50 credentials: 51 client: some-username-uaa 52 client_secret: some-password-uaa 53 ca_cert: some-ca-cert-uaa 54 cloud_configs: 55 default_azs: ["some-az1", "some-az2"] 56 default_networks: 57 - name: some-net1 58 - name: some-net2 59 static_ips: 60 - some-ip1 61 - some-ip2 62 default: [some-default1, some-default2] 63 default_persistent_disk_type: some-type 64 default_vm_type: some-vm-type 65 default_stemcell_os: some-os 66 default_stemcell_version: some-version 67 ` 68 configFilePath, err = writeConfigFile(data) 69 Expect(err).NotTo(HaveOccurred()) 70 config, err := helpers.LoadConfig(configFilePath) 71 Expect(err).NotTo(HaveOccurred()) 72 Expect(config).To(Equal(helpers.PgatsConfig{ 73 PGReleaseVersion: "some-version", 74 PostgreSQLVersion: "some-version", 75 VersionsFile: "some-path", 76 Bosh: helpers.BOSHConfig{ 77 Target: "some-target", 78 UseUaa: true, 79 Credentials: helpers.BOSHCredentials{ 80 Client: "some-username-uaa", 81 ClientSecret: "some-password-uaa", 82 CACert: "some-ca-cert-uaa", 83 }, 84 }, 85 BoshCC: helpers.BOSHCloudConfig{ 86 AZs: []string{"some-az1", "some-az2"}, 87 Networks: []helpers.BOSHJobNetwork{ 88 helpers.BOSHJobNetwork{ 89 Name: "some-net1", 90 }, 91 helpers.BOSHJobNetwork{ 92 Name: "some-net2", 93 StaticIPs: []string{"some-ip1", "some-ip2"}, 94 Default: []string{"some-default1", "some-default2"}, 95 }, 96 }, 97 PersistentDiskType: "some-type", 98 VmType: "some-vm-type", 99 StemcellOs: "some-os", 100 StemcellVersion: "some-version", 101 }, 102 })) 103 }) 104 105 }) 106 107 Context("Without uaa authentication", func() { 108 109 It("Load the yaml content from the provided path without defaults", func() { 110 var err error 111 var data = ` 112 postgres_release_version: "some-version" 113 postgresql_version: "some-version" 114 versions_file: "some-path" 115 bosh: 116 target: some-target 117 credentials: 118 client: some-username 119 client_secret: some-password 120 ca_cert: some-ca-cert 121 cloud_configs: 122 default_azs: ["some-az1", "some-az2"] 123 default_networks: 124 - name: some-net1 125 - name: some-net2 126 static_ips: 127 - some-ip1 128 - some-ip2 129 default: [some-default1, some-default2] 130 default_persistent_disk_type: some-type 131 default_vm_type: some-vm-type 132 default_stemcell_os: some-os 133 default_stemcell_version: some-version 134 ` 135 configFilePath, err = writeConfigFile(data) 136 Expect(err).NotTo(HaveOccurred()) 137 config, err := helpers.LoadConfig(configFilePath) 138 Expect(err).NotTo(HaveOccurred()) 139 Expect(config).To(Equal(helpers.PgatsConfig{ 140 PGReleaseVersion: "some-version", 141 PostgreSQLVersion: "some-version", 142 VersionsFile: "some-path", 143 Bosh: helpers.BOSHConfig{ 144 Target: "some-target", 145 Credentials: helpers.BOSHCredentials{ 146 Client: "some-username", 147 ClientSecret: "some-password", 148 CACert: "some-ca-cert", 149 }, 150 UseUaa: false, 151 }, 152 BoshCC: helpers.BOSHCloudConfig{ 153 AZs: []string{"some-az1", "some-az2"}, 154 Networks: []helpers.BOSHJobNetwork{ 155 helpers.BOSHJobNetwork{ 156 Name: "some-net1", 157 }, 158 helpers.BOSHJobNetwork{ 159 Name: "some-net2", 160 StaticIPs: []string{"some-ip1", "some-ip2"}, 161 Default: []string{"some-default1", "some-default2"}, 162 }, 163 }, 164 PersistentDiskType: "some-type", 165 VmType: "some-vm-type", 166 StemcellOs: "some-os", 167 StemcellVersion: "some-version", 168 }, 169 })) 170 }) 171 172 It("Load the yaml content from the provided path with defaults", func() { 173 var err error 174 var data = ` 175 bosh: 176 credentials: 177 ca_cert: some-ca-cert 178 ` 179 configFilePath, err = writeConfigFile(data) 180 Expect(err).NotTo(HaveOccurred()) 181 config, err := helpers.LoadConfig(configFilePath) 182 Expect(err).NotTo(HaveOccurred()) 183 result := helpers.DefaultPgatsConfig 184 result.Bosh.Credentials.CACert = "some-ca-cert" 185 Expect(config).To(Equal(result)) 186 }) 187 }) 188 }) 189 190 Context("With an invalid config yaml location", func() { 191 It("Should return an error that the file does not exist", func() { 192 _, err := helpers.LoadConfig("notExistentPath") 193 Expect(err).To(MatchError(ContainSubstring("no such file or directory"))) 194 }) 195 }) 196 197 Context("With an incorrect config yaml content", func() { 198 var configFilePath string 199 200 AfterEach(func() { 201 err := os.Remove(configFilePath) 202 Expect(err).NotTo(HaveOccurred()) 203 }) 204 205 It("Should return an error if not a valid yaml", func() { 206 var err error 207 configFilePath, err = writeConfigFile("%%%") 208 Expect(err).NotTo(HaveOccurred()) 209 210 _, err = helpers.LoadConfig(configFilePath) 211 Expect(err).To(MatchError(ContainSubstring("yaml: could not find expected directive name"))) 212 }) 213 214 It("Should return an error if BOSH CA Cert missing", func() { 215 var err error 216 configFilePath, err = writeConfigFile("---") 217 Expect(err).NotTo(HaveOccurred()) 218 219 _, err = helpers.LoadConfig(configFilePath) 220 Expect(err).To(MatchError(errors.New(helpers.MissingCertificateMsg))) 221 }) 222 }) 223 }) 224 225 Describe("ConfigPath", func() { 226 var configPath string 227 228 BeforeEach(func() { 229 configPath = os.Getenv("PGATS_CONFIG") 230 }) 231 232 AfterEach(func() { 233 os.Setenv("PGATS_CONFIG", configPath) 234 }) 235 236 Context("when a valid path is set", func() { 237 It("returns the path", func() { 238 os.Setenv("PGATS_CONFIG", "/tmp/some-config.json") 239 path, err := helpers.ConfigPath() 240 Expect(err).NotTo(HaveOccurred()) 241 Expect(path).To(Equal("/tmp/some-config.json")) 242 }) 243 }) 244 245 Context("when path is not set", func() { 246 It("returns an error", func() { 247 os.Setenv("PGATS_CONFIG", "") 248 _, err := helpers.ConfigPath() 249 Expect(err).To(MatchError(fmt.Errorf(helpers.IncorrectEnvMsg, ""))) 250 }) 251 }) 252 253 Context("when the path is not absolute", func() { 254 It("returns an error", func() { 255 os.Setenv("PGATS_CONFIG", "some/path.json") 256 _, err := helpers.ConfigPath() 257 Expect(err).To(MatchError(fmt.Errorf(helpers.IncorrectEnvMsg, "some/path.json"))) 258 }) 259 }) 260 }) 261 })