github.com/cloudfoundry/postgres-release/src/acceptance-tests@v0.0.0-20240511030151-872bdd2e0dba/testing/helpers/op_defs_utilities.go (about) 1 package helpers 2 3 type Janitor struct { 4 Timeout int 5 Interval int 6 Script string 7 } 8 9 func AddOpDefinition(ods *[]OpDefinition, defType string, defPath string, defValue interface{}) { 10 od := OpDefinition{ 11 Type: defType, 12 Path: &defPath, 13 Value: &defValue, 14 } 15 *ods = append(*ods, od) 16 } 17 18 func Define_bbr_ops() []OpDefinition { 19 var ops []OpDefinition 20 var value interface{} 21 var path string 22 23 path = "/instance_groups/name=postgres/jobs/-" 24 value = map[interface{}]interface{}{ 25 "name": "bbr-postgres-db", 26 "release": "postgres", 27 "consumes": map[interface{}]interface{}{ 28 "database": map[interface{}]interface{}{ 29 "from": "postgres-database", 30 }, 31 }, 32 "properties": map[interface{}]interface{}{ 33 "release_level_backup": true, 34 }, 35 } 36 AddOpDefinition(&ops, "replace", path, value) 37 return ops 38 } 39 40 func Define_bbr_no_link_ops() []OpDefinition { 41 var ops []OpDefinition 42 var value interface{} 43 var path string 44 45 p := "/instance_groups/name=backup" 46 ops = append(ops, OpDefinition{Type: "remove", Path: &p}) 47 48 path = "/instance_groups/name=postgres/jobs/name=postgres/provides" 49 value = map[interface{}]interface{}{ 50 "postgres": "nil", 51 } 52 AddOpDefinition(&ops, "replace", path, value) 53 54 path = "/instance_groups/name=postgres/jobs/-" 55 value = map[interface{}]interface{}{ 56 "name": "bbr-postgres-db", 57 "release": "postgres", 58 "properties": map[interface{}]interface{}{ 59 "release_level_backup": true, 60 "postgres": map[interface{}]interface{}{ 61 "port": "5524", 62 "databases": []map[interface{}]interface{}{ 63 {"name": "sandbox"}, 64 {"name": "sandbox-2"}, 65 }, 66 }, 67 }, 68 } 69 AddOpDefinition(&ops, "replace", path, value) 70 return ops 71 } 72 73 func Define_bbr_not_colocated_ops() []OpDefinition { 74 var ops []OpDefinition 75 var value interface{} 76 var path string 77 78 path = "/instance_groups/name=backup/instances" 79 value = 1 80 AddOpDefinition(&ops, "replace", path, value) 81 return ops 82 } 83 84 func Define_bbr_ssl_verify_full() []OpDefinition { 85 var ops []OpDefinition 86 87 ops = Define_bbr_not_colocated_ops() 88 ops = append(ops, Define_ssl_ops()...) 89 90 return ops 91 } 92 93 func Define_bbr_ssl_verify_ca() []OpDefinition { 94 var ops []OpDefinition 95 var value interface{} 96 var path string 97 98 ops = Define_bbr_ssl_verify_full() 99 100 path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/ssl_verify_hostname" 101 value = false 102 AddOpDefinition(&ops, "replace", path, value) 103 104 return ops 105 } 106 107 func Define_bbr_client_certs() []OpDefinition { 108 var ops []OpDefinition 109 var value interface{} 110 var path string 111 112 bbruser := "bbruser" 113 114 ops = Define_bbr_not_colocated_ops() 115 ops = append(ops, Define_mutual_ssl_ops()...) 116 117 path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/client_certificate" 118 value = "((bbr_user_certs.certificate))" 119 AddOpDefinition(&ops, "replace", path, value) 120 121 path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/client_certificate_key" 122 value = "((bbr_user_certs.private_key))" 123 AddOpDefinition(&ops, "replace", path, value) 124 125 path = "/variables?/name=bbr_user_certs?" 126 value = map[interface{}]interface{}{ 127 "name": "bbr_user_certs", 128 "type": "certificate", 129 "options": map[interface{}]interface{}{ 130 "ca": "postgres_ca", 131 "common_name": bbruser, 132 "alternative_names": []interface{}{}, 133 "extended_key_usage": []interface{}{"server_auth", "client_auth"}, 134 }, 135 } 136 AddOpDefinition(&ops, "replace", path, value) 137 138 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=bbruser?" 139 value = map[interface{}]interface{}{ 140 "name": bbruser, 141 "permissions": []interface{}{"SUPERUSER"}, 142 } 143 AddOpDefinition(&ops, "replace", path, value) 144 145 path = "/instance_groups/name=backup/jobs/name=bbr-postgres-db/properties/postgres?/dbuser" 146 value = bbruser 147 AddOpDefinition(&ops, "replace", path, value) 148 149 return ops 150 } 151 152 func Define_upgrade_no_copy_ops() []OpDefinition { 153 var ops []OpDefinition 154 var value interface{} 155 var path string 156 157 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/skip_data_copy_in_minor?" 158 value = true 159 AddOpDefinition(&ops, "replace", path, value) 160 return ops 161 } 162 163 func Define_ssl_ops() []OpDefinition { 164 var ops []OpDefinition 165 var value interface{} 166 var path string 167 168 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/certificate" 169 value = "((postgres_cert.certificate))" 170 AddOpDefinition(&ops, "replace", path, value) 171 172 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/private_key" 173 value = "((postgres_cert.private_key))" 174 AddOpDefinition(&ops, "replace", path, value) 175 176 path = "/variables?/name=postgres_ca?" 177 value = map[interface{}]interface{}{ 178 "name": "postgres_ca", 179 "type": "certificate", 180 "options": map[interface{}]interface{}{ 181 "is_ca": true, 182 "common_name": "postgres_ca", 183 }, 184 } 185 AddOpDefinition(&ops, "replace", path, value) 186 187 path = "/variables?/name=postgres_cert?" 188 value = map[interface{}]interface{}{ 189 "name": "postgres_cert", 190 "type": "certificate", 191 "options": map[interface{}]interface{}{ 192 "ca": "postgres_ca", 193 "common_name": "((postgres_host))", 194 "alternative_names": []interface{}{"((postgres_host))", "((postgres_dns))"}, 195 "extended_key_usage": []interface{}{"server_auth"}, 196 }, 197 } 198 AddOpDefinition(&ops, "replace", path, value) 199 200 path = "/variables?/name=((certs_matching_certs))?" 201 value = map[interface{}]interface{}{ 202 "name": "((certs_matching_certs))", 203 "type": "certificate", 204 "options": map[interface{}]interface{}{ 205 "ca": "postgres_ca", 206 "common_name": "((certs_matching_name))", 207 "alternative_names": []interface{}{}, 208 "extended_key_usage": []interface{}{"server_auth", "client_auth"}, 209 }, 210 } 211 AddOpDefinition(&ops, "replace", path, value) 212 213 path = "/variables?/name=((certs_mapped_certs))?" 214 value = map[interface{}]interface{}{ 215 "name": "((certs_mapped_certs))", 216 "type": "certificate", 217 "options": map[interface{}]interface{}{ 218 "ca": "postgres_ca", 219 "common_name": "((certs_mapped_cn))", 220 "alternative_names": []interface{}{}, 221 "extended_key_usage": []interface{}{"server_auth", "client_auth"}, 222 }, 223 } 224 AddOpDefinition(&ops, "replace", path, value) 225 226 path = "/variables?/name=((certs_wrong_certs))?" 227 value = map[interface{}]interface{}{ 228 "name": "((certs_wrong_certs))", 229 "type": "certificate", 230 "options": map[interface{}]interface{}{ 231 "ca": "postgres_ca", 232 "common_name": "((certs_wrong_cn))", 233 "alternative_names": []interface{}{}, 234 "extended_key_usage": []interface{}{"server_auth", "client_auth"}, 235 }, 236 } 237 AddOpDefinition(&ops, "replace", path, value) 238 239 path = "/variables?/name=((certs_bad_ca))?" 240 value = map[interface{}]interface{}{ 241 "name": "((certs_bad_ca))", 242 "type": "certificate", 243 "options": map[interface{}]interface{}{ 244 "is_ca": true, 245 "common_name": "bad_ca", 246 }, 247 } 248 AddOpDefinition(&ops, "replace", path, value) 249 250 return ops 251 } 252 253 func Define_mutual_ssl_ops() []OpDefinition { 254 var value interface{} 255 var path string 256 257 ops := Define_ssl_ops() 258 259 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/tls?/ca" 260 value = "((postgres_cert.ca))" 261 AddOpDefinition(&ops, "replace", path, value) 262 263 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=aaa?" 264 value = map[interface{}]interface{}{ 265 "name": "aaa", 266 "common_name": "aaa_2", 267 } 268 AddOpDefinition(&ops, "replace", path, value) 269 270 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=((certs_matching_name))?" 271 value = map[interface{}]interface{}{ 272 "name": "((certs_matching_name))", 273 } 274 AddOpDefinition(&ops, "replace", path, value) 275 276 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/name=((certs_mapped_name))?" 277 value = map[interface{}]interface{}{ 278 "name": "((certs_mapped_name))", 279 "common_name": "((certs_mapped_cn))", 280 } 281 AddOpDefinition(&ops, "replace", path, value) 282 283 return ops 284 } 285 286 func Define_add_bad_role() []OpDefinition { 287 var ops []OpDefinition 288 var value interface{} 289 var path string 290 291 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/roles?/-" 292 var permissions []string 293 permissions = append(permissions, "DOESNOTEXIST") 294 value = map[interface{}]interface{}{ 295 "name": "foo", 296 "password": "foo", 297 "permissions": permissions, 298 } 299 AddOpDefinition(&ops, "replace", path, value) 300 301 return ops 302 } 303 304 func DefineHooks(hooks_timeout string, pre_start string, post_start string, pre_stop string, post_stop string) []OpDefinition { 305 var ops []OpDefinition 306 var path string 307 308 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/timeout?" 309 AddOpDefinition(&ops, "replace", path, hooks_timeout) 310 311 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/pre_start?" 312 AddOpDefinition(&ops, "replace", path, pre_start) 313 314 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/post_start?" 315 AddOpDefinition(&ops, "replace", path, post_start) 316 317 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/pre_stop?" 318 AddOpDefinition(&ops, "replace", path, pre_stop) 319 320 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/databases/hooks?/post_stop?" 321 AddOpDefinition(&ops, "replace", path, post_stop) 322 323 return ops 324 } 325 326 func (j Janitor) GetOpDefinitions() []OpDefinition { 327 var ops []OpDefinition 328 var path string 329 330 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/timeout?" 331 AddOpDefinition(&ops, "replace", path, j.Timeout) 332 333 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/interval?" 334 AddOpDefinition(&ops, "replace", path, j.Interval) 335 336 path = "/instance_groups/name=postgres/jobs/name=postgres/properties/janitor?/script?" 337 AddOpDefinition(&ops, "replace", path, j.Script) 338 339 return ops 340 }