github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/ccl/backupccl/partitioned_backup_test.go (about) 1 // Copyright 2019 The Cockroach Authors. 2 // 3 // Licensed as a CockroachDB Enterprise file under the Cockroach Community 4 // License (the "License"); you may not use this file except in compliance with 5 // the License. You may obtain a copy of the License at 6 // 7 // https://github.com/cockroachdb/cockroach/blob/master/licenses/CCL.txt 8 9 package backupccl 10 11 import ( 12 "testing" 13 14 "github.com/cockroachdb/cockroach/pkg/testutils" 15 "github.com/cockroachdb/cockroach/pkg/util/leaktest" 16 ) 17 18 func TestGetURIsByLocalityKV(t *testing.T) { 19 defer leaktest.AfterTest(t)() 20 21 type TestCase struct { 22 name string 23 input []string 24 defaultURI string 25 urisByLocality map[string]string 26 error string 27 } 28 29 testCases := []TestCase{ 30 { 31 name: "singleURINoDefault", 32 input: []string{ 33 "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 34 }, 35 defaultURI: "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 36 urisByLocality: map[string]string{}, 37 }, 38 { 39 name: "singleURIDefault", 40 input: []string{ 41 "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=default", 42 }, 43 defaultURI: "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 44 urisByLocality: map[string]string{}, 45 }, 46 { 47 name: "multipleURIs", 48 input: []string{ 49 "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=default", 50 "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 51 }, 52 defaultURI: "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 53 urisByLocality: map[string]string{ 54 "dc=dc1": "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 55 }, 56 }, 57 { 58 name: "multipleURISameStore", 59 input: []string{ 60 "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=default", 61 "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 62 "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc2", 63 }, 64 defaultURI: "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 65 urisByLocality: map[string]string{ 66 "dc=dc1": "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 67 "dc=dc2": "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456", 68 }, 69 }, 70 { 71 name: "singleURILocality", 72 input: []string{ 73 "s3://foo?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 74 }, 75 error: "COCKROACH_LOCALITY dc=dc1 is invalid for a single BACKUP location", 76 }, 77 { 78 name: "noDefault", 79 input: []string{ 80 "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 81 "s3://baz?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc2", 82 }, 83 error: "no default URL provided for partitioned backup", 84 }, 85 { 86 name: "duplicateLocality", 87 input: []string{ 88 "s3://bar?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 89 "s3://baz?AWS_ACCESS_KEY_ID=123&AWS_SECRET_ACCESS_KEY=456&COCKROACH_LOCALITY=dc%3Ddc1", 90 }, 91 error: "duplicate URIs for locality dc=dc1", 92 }, 93 } 94 for _, tc := range testCases { 95 t.Run(tc.name, func(t *testing.T) { 96 defaultURI, urisByLocality, err := getURIsByLocalityKV(tc.input, "" /* appendPath */) 97 if tc.error != "" { 98 if !testutils.IsError(err, tc.error) { 99 t.Fatalf("expected error matching %q, got %q", tc.error, err) 100 } 101 } else { 102 if err != nil { 103 t.Fatal(err) 104 } 105 if defaultURI != tc.defaultURI { 106 t.Fatalf("expected default URI %s, got %s", tc.defaultURI, defaultURI) 107 } 108 for k, v := range urisByLocality { 109 if ev, ok := tc.urisByLocality[k]; !ok { 110 t.Fatalf("expected key %s not found", k) 111 } else if ev != v { 112 t.Fatalf("expected value %s for key %s, found %s", v, k, ev) 113 } 114 } 115 for k := range tc.urisByLocality { 116 if _, ok := tc.urisByLocality[k]; !ok { 117 t.Fatalf("unexpected key %s", k) 118 } 119 } 120 } 121 }) 122 } 123 }