github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/chunk/cassandra/storage_client_test.go (about) 1 package cassandra 2 3 import ( 4 "testing" 5 6 "github.com/gocql/gocql" 7 "github.com/grafana/dskit/flagext" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestConfig_setClusterConfig_noAuth(t *testing.T) { 13 cfg := defaultConfig() 14 cfg.Auth = false 15 require.NoError(t, cfg.Validate()) 16 17 cqlCfg := gocql.NewCluster() 18 err := cfg.setClusterConfig(cqlCfg) 19 require.NoError(t, err) 20 assert.Nil(t, cqlCfg.Authenticator) 21 } 22 23 func TestConfig_setClusterConfig_authWithPassword(t *testing.T) { 24 cfg := defaultConfig() 25 cfg.Auth = true 26 cfg.Username = "user" 27 cfg.Password = flagext.Secret{Value: "pass"} 28 require.NoError(t, cfg.Validate()) 29 30 cqlCfg := gocql.NewCluster() 31 err := cfg.setClusterConfig(cqlCfg) 32 require.NoError(t, err) 33 assert.NotNil(t, cqlCfg.Authenticator) 34 assert.Equal(t, "user", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Username) 35 assert.Equal(t, "pass", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Password) 36 } 37 38 func TestConfig_setClusterConfig_authWithPasswordFile_withoutTrailingNewline(t *testing.T) { 39 cfg := defaultConfig() 40 cfg.Auth = true 41 cfg.Username = "user" 42 cfg.PasswordFile = "testdata/password-without-trailing-newline.txt" 43 require.NoError(t, cfg.Validate()) 44 45 cqlCfg := gocql.NewCluster() 46 err := cfg.setClusterConfig(cqlCfg) 47 require.NoError(t, err) 48 assert.NotNil(t, cqlCfg.Authenticator) 49 assert.Equal(t, "user", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Username) 50 assert.Equal(t, "pass", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Password) 51 } 52 53 func TestConfig_setClusterConfig_authWithPasswordFile_withTrailingNewline(t *testing.T) { 54 cfg := defaultConfig() 55 cfg.Auth = true 56 cfg.Username = "user" 57 cfg.PasswordFile = "testdata/password-with-trailing-newline.txt" 58 require.NoError(t, cfg.Validate()) 59 60 cqlCfg := gocql.NewCluster() 61 err := cfg.setClusterConfig(cqlCfg) 62 require.NoError(t, err) 63 assert.NotNil(t, cqlCfg.Authenticator) 64 assert.Equal(t, "user", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Username) 65 assert.Equal(t, "pass", cqlCfg.Authenticator.(gocql.PasswordAuthenticator).Password) 66 } 67 68 func TestConfig_setClusterConfig_authWithPasswordAndPasswordFile(t *testing.T) { 69 cfg := defaultConfig() 70 cfg.Auth = true 71 cfg.Username = "user" 72 cfg.Password = flagext.Secret{Value: "pass"} 73 cfg.PasswordFile = "testdata/password-with-trailing-newline.txt" 74 assert.Error(t, cfg.Validate()) 75 } 76 77 func TestConfig_setClusterConfig_clientSSL(t *testing.T) { 78 cfg := defaultConfig() 79 cfg.SSL = true 80 cfg.CAPath = "testdata/example.com.ca.pem" 81 cfg.CertPath = "testdata/example.com.pem" 82 cfg.KeyPath = "testdata/example.com-key.pem" 83 require.NoError(t, cfg.Validate()) 84 85 cqlCfg := gocql.NewCluster() 86 err := cfg.setClusterConfig(cqlCfg) 87 require.NoError(t, err) 88 assert.NotNil(t, cqlCfg.SslOpts) 89 assert.Len(t, cqlCfg.SslOpts.Certificates, 1) 90 } 91 92 func TestConfig_setClusterConfig_clientSSLWithOnlyCertificatePath(t *testing.T) { 93 cfg := defaultConfig() 94 cfg.SSL = true 95 cfg.CAPath = "testdata/example.com.ca.pem" 96 cfg.CertPath = "testdata/example.com.pem" 97 assert.Error(t, cfg.Validate(), "TLS certificate specified, but private key configuration is missing.") 98 } 99 100 func TestConfig_setClusterConfig_clientSSLWithOnlyKeyPath(t *testing.T) { 101 cfg := defaultConfig() 102 cfg.SSL = true 103 cfg.CAPath = "testdata/example.com.ca.pem" 104 cfg.KeyPath = "testdata/example.com-key.pem" 105 assert.Error(t, cfg.Validate(), "TLS private key specified, but certificate configuration is missing.") 106 } 107 108 func TestConfig_setClusterConfig_clientSSLWithInvalidParameters(t *testing.T) { 109 cfg := defaultConfig() 110 cfg.SSL = true 111 cfg.CAPath = "testdata/example.com.ca.pem" 112 cfg.CertPath = "testdata/example.com-key.pem" 113 cfg.KeyPath = "testdata/example.com.pem" 114 115 cluster := gocql.NewCluster() 116 assert.Error(t, cfg.setClusterConfig(cluster), "Unable to load TLS certificate and private key.") 117 } 118 119 func TestConfig_setClusterConfig_consistency(t *testing.T) { 120 tests := map[string]struct { 121 cfg Config 122 expectedConsistency string 123 }{ 124 "default config should set default consistency": { 125 cfg: defaultConfig(), 126 expectedConsistency: "QUORUM", 127 }, 128 "should honor configured consistency": { 129 cfg: func() Config { 130 cfg := defaultConfig() 131 cfg.Consistency = "LOCAL_QUORUM" 132 return cfg 133 }(), 134 expectedConsistency: "LOCAL_QUORUM", 135 }, 136 } 137 138 for testName, testData := range tests { 139 t.Run(testName, func(t *testing.T) { 140 require.NoError(t, testData.cfg.Validate()) 141 142 cqlCfg := gocql.NewCluster() 143 err := testData.cfg.setClusterConfig(cqlCfg) 144 require.NoError(t, err) 145 assert.Equal(t, testData.expectedConsistency, cqlCfg.Consistency.String()) 146 }) 147 } 148 } 149 150 func defaultConfig() Config { 151 cfg := Config{} 152 flagext.DefaultValues(&cfg) 153 return cfg 154 }