159 lines
4.4 KiB
Go
159 lines
4.4 KiB
Go
package cassandra
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gocql/gocql"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestOptions(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
option Option
|
|
check func(conf *cassandraConf)
|
|
}{
|
|
{
|
|
name: "WithPort",
|
|
option: WithPort(1234),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 1234, conf.Port, "Port 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithKeyspace",
|
|
option: WithKeyspace("my_keyspace"),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, "my_keyspace", conf.Keyspace, "Keyspace 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithAuth",
|
|
option: WithAuth("user", "pass"),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, "user", conf.Username, "Username 設定錯誤")
|
|
assert.Equal(t, "pass", conf.Password, "Password 設定錯誤")
|
|
assert.True(t, conf.UseAuth, "UseAuth 應該為 true")
|
|
},
|
|
},
|
|
{
|
|
name: "WithConsistency",
|
|
option: WithConsistency(gocql.Quorum),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, gocql.Quorum, conf.Consistency, "Consistency 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithConnectTimeoutSec",
|
|
option: WithConnectTimeoutSec(45),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 45, conf.ConnectTimeoutSec, "ConnectTimeoutSec 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithConnectTimeoutSec_default",
|
|
option: WithConnectTimeoutSec(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultTimeoutSec, conf.ConnectTimeoutSec, "ConnectTimeoutSec 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithNumConns",
|
|
option: WithNumConns(10),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 10, conf.NumConns, "NumConns 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithNumConns_default",
|
|
option: WithNumConns(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultNumConns, conf.NumConns, "NumConns 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithMaxRetries",
|
|
option: WithMaxRetries(5),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 5, conf.MaxRetries, "MaxRetries 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithMaxRetries_default",
|
|
option: WithMaxRetries(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultMaxRetries, conf.MaxRetries, "MaxRetries 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithRetryMinInterval",
|
|
option: WithRetryMinInterval(2 * time.Second),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 2*time.Second, conf.RetryMinInterval, "RetryMinInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithRetryMinInterval_default",
|
|
option: WithRetryMinInterval(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultRetryMinInterval, conf.RetryMinInterval, "RetryMinInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithRetryMaxInterval",
|
|
option: WithRetryMaxInterval(10 * time.Second),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 10*time.Second, conf.RetryMaxInterval, "RetryMaxInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithRetryMaxInterval_default",
|
|
option: WithRetryMaxInterval(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultRetryMaxInterval, conf.RetryMaxInterval, "RetryMaxInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithReconnectInitialInterval",
|
|
option: WithReconnectInitialInterval(1 * time.Second),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 1*time.Second, conf.ReconnectInitialInterval, "ReconnectInitialInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithReconnectInitialInterval_default",
|
|
option: WithReconnectInitialInterval(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultReconnectInitialInterval, conf.ReconnectInitialInterval, "ReconnectInitialInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithReconnectMaxInterval",
|
|
option: WithReconnectMaxInterval(10 * time.Second),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, 10*time.Second, conf.ReconnectMaxInterval, "ReconnectMaxInterval 設定錯誤")
|
|
},
|
|
},
|
|
{
|
|
name: "WithReconnectMaxInterval_default",
|
|
option: WithReconnectMaxInterval(0),
|
|
check: func(conf *cassandraConf) {
|
|
assert.Equal(t, defaultReconnectMaxInterval, conf.ReconnectMaxInterval, "ReconnectMaxInterval 設定錯誤")
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
tc := tc // 避免 closure 捕捉迴圈變數
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
// 為每個測試案例產生一個新的 cassandraConf 實例
|
|
conf := &cassandraConf{}
|
|
// 套用 Option
|
|
tc.option(conf)
|
|
// 執行檢查
|
|
tc.check(conf)
|
|
})
|
|
}
|
|
}
|