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  }