blockchain/internal/lib/cassandra/option_test.go

110 lines
2.7 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: "WithNumConns",
option: WithNumConns(10),
check: func(conf *cassandraConf) {
assert.Equal(t, 10, conf.NumConns, "NumConns 設定錯誤")
},
},
{
name: "WithMaxRetries",
option: WithMaxRetries(5),
check: func(conf *cassandraConf) {
assert.Equal(t, 5, conf.MaxRetries, "MaxRetries 設定錯誤")
},
},
{
name: "WithRetryMin",
option: WithRetryMin(2 * time.Second),
check: func(conf *cassandraConf) {
assert.Equal(t, 2*time.Second, conf.RetryMin, "RetryMin 設定錯誤")
},
},
{
name: "WithRetryMax",
option: WithRetryMax(10 * time.Second),
check: func(conf *cassandraConf) {
assert.Equal(t, 10*time.Second, conf.RetryMax, "RetryMax 設定錯誤")
},
},
{
name: "WithReconnectInitial",
option: WithReconnectInitial(1 * time.Second),
check: func(conf *cassandraConf) {
assert.Equal(t, 1*time.Second, conf.ReconnectInitial, "ReconnectInitial 設定錯誤")
},
},
{
name: "WithReconnectMax",
option: WithReconnectMax(5 * time.Second),
check: func(conf *cassandraConf) {
assert.Equal(t, 5*time.Second, conf.ReconnectMax, "ReconnectMax 設定錯誤")
},
},
}
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)
})
}
}