go.temporal.io/server@v1.23.0/common/config/persistence_test.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package config 26 27 import ( 28 "reflect" 29 "testing" 30 31 "github.com/gocql/gocql" 32 ) 33 34 func TestCassandraStoreConsistency_GetConsistency(t *testing.T) { 35 t.Parallel() 36 37 tests := []struct { 38 name string 39 input *CassandraStoreConsistency 40 want gocql.Consistency 41 }{ 42 { 43 name: "Nil Consistency Settings", 44 input: nil, 45 want: gocql.LocalQuorum, 46 }, 47 { 48 name: "Empty Consistency Settings", 49 input: &CassandraStoreConsistency{}, 50 want: gocql.LocalQuorum, 51 }, 52 { 53 name: "Empty Default Settings", 54 input: &CassandraStoreConsistency{ 55 Default: &CassandraConsistencySettings{}, 56 }, 57 want: gocql.LocalQuorum, 58 }, 59 { 60 name: "Default Override", 61 input: &CassandraStoreConsistency{ 62 Default: &CassandraConsistencySettings{ 63 Consistency: "All", 64 }, 65 }, 66 want: gocql.All, 67 }, 68 } 69 for _, tt := range tests { 70 t.Run(tt.name, func(t *testing.T) { 71 c := tt.input 72 if got := c.GetConsistency(); !reflect.DeepEqual(got, tt.want) { 73 t.Errorf("CassandraStoreConsistency.GetConsistency() = %v, want %v", got, tt.want) 74 } 75 }) 76 } 77 } 78 79 func TestCassandraStoreConsistency_GetSerialConsistency(t *testing.T) { 80 t.Parallel() 81 82 tests := []struct { 83 name string 84 input *CassandraStoreConsistency 85 want gocql.SerialConsistency 86 }{ 87 { 88 name: "Nil Consistency Settings", 89 input: nil, 90 want: gocql.LocalSerial, 91 }, 92 { 93 name: "Empty Consistency Settings", 94 input: &CassandraStoreConsistency{}, 95 want: gocql.LocalSerial, 96 }, 97 { 98 name: "Empty Default Settings", 99 input: &CassandraStoreConsistency{ 100 Default: &CassandraConsistencySettings{}, 101 }, 102 want: gocql.LocalSerial, 103 }, 104 { 105 name: "Default Override", 106 input: &CassandraStoreConsistency{ 107 Default: &CassandraConsistencySettings{ 108 SerialConsistency: "serial", 109 }, 110 }, 111 want: gocql.Serial, 112 }, 113 } 114 for _, tt := range tests { 115 t.Run(tt.name, func(t *testing.T) { 116 c := tt.input 117 if got := c.GetSerialConsistency(); !reflect.DeepEqual(got, tt.want) { 118 t.Errorf("CassandraStoreConsistency.GetSerialConsistency() = %v, want %v", got, tt.want) 119 } 120 }) 121 } 122 } 123 124 func TestCassandraConsistencySettings_validate(t *testing.T) { 125 t.Parallel() 126 127 tests := []struct { 128 name string 129 settings *CassandraConsistencySettings 130 wantErr bool 131 }{ 132 { 133 name: "nil settings", 134 settings: nil, 135 wantErr: false, 136 }, 137 { 138 name: "empty fields", 139 settings: &CassandraConsistencySettings{ 140 Consistency: "", 141 SerialConsistency: "", 142 }, 143 wantErr: false, 144 }, 145 { 146 name: "happy path", 147 settings: &CassandraConsistencySettings{ 148 Consistency: "Local_Quorum", 149 SerialConsistency: "lOcal_sErial", 150 }, 151 wantErr: false, 152 }, 153 { 154 name: "bad consistency", 155 settings: &CassandraConsistencySettings{ 156 Consistency: "bad_value", 157 SerialConsistency: "local_serial", 158 }, 159 wantErr: true, 160 }, 161 { 162 name: "bad serial consistency", 163 settings: &CassandraConsistencySettings{ 164 Consistency: "local_quorum", 165 SerialConsistency: "bad_value", 166 }, 167 wantErr: true, 168 }, 169 } 170 for _, tt := range tests { 171 t.Run(tt.name, func(t *testing.T) { 172 c := tt.settings 173 if err := c.validate(); (err != nil) != tt.wantErr { 174 t.Errorf("CassandraConsistencySettings.validate() error = %v, wantErr %v", err, tt.wantErr) 175 } 176 }) 177 } 178 } 179 180 func TestCassandraStoreConsistency_validate(t *testing.T) { 181 t.Parallel() 182 183 tests := []struct { 184 name string 185 settings *CassandraStoreConsistency 186 wantErr bool 187 }{ 188 { 189 name: "nil settings", 190 settings: nil, 191 wantErr: false, 192 }, 193 { 194 name: "empty settings", 195 settings: &CassandraStoreConsistency{}, 196 wantErr: false, 197 }, 198 { 199 name: "empty default settings", 200 settings: &CassandraStoreConsistency{ 201 Default: &CassandraConsistencySettings{}, 202 }, 203 wantErr: false, 204 }, 205 { 206 name: "good default settings", 207 settings: &CassandraStoreConsistency{ 208 Default: &CassandraConsistencySettings{ 209 Consistency: "one", 210 }, 211 }, 212 wantErr: false, 213 }, 214 { 215 name: "bad default settings", 216 settings: &CassandraStoreConsistency{ 217 Default: &CassandraConsistencySettings{ 218 Consistency: "fake_value", 219 }, 220 }, 221 wantErr: true, 222 }, 223 } 224 for _, tt := range tests { 225 t.Run(tt.name, func(t *testing.T) { 226 c := tt.settings 227 if err := c.validate(); (err != nil) != tt.wantErr { 228 t.Errorf("CassandraStoreConsistency.validate() error = %v, wantErr %v", err, tt.wantErr) 229 } 230 }) 231 } 232 }