go-sdk/client/configuration_test.go

93 lines
2.6 KiB
Go

package client
import (
"context"
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/assert"
)
const (
valueSuffix = "_value"
)
func TestGetConfigurationItem(t *testing.T) {
ctx := context.Background()
t.Run("get configuration item", func(t *testing.T) {
resp, err := testClient.GetConfigurationItem(ctx, "example-config", "mykey")
require.NoError(t, err)
assert.Equal(t, "mykey"+valueSuffix, resp.Value)
})
t.Run("get configuration item with invalid storeName", func(t *testing.T) {
_, err := testClient.GetConfigurationItem(ctx, "", "mykey")
require.Error(t, err)
})
}
func TestGetConfigurationItems(t *testing.T) {
ctx := context.Background()
keys := []string{"mykey1", "mykey2", "mykey3"}
t.Run("Test get configuration items", func(t *testing.T) {
resp, err := testClient.GetConfigurationItems(ctx, "example-config", keys)
require.NoError(t, err)
for _, k := range keys {
assert.Equal(t, k+valueSuffix, resp[k].Value)
}
})
}
func TestSubscribeConfigurationItems(t *testing.T) {
ctx := context.Background()
var counter, totalCounter uint32
counter = 0
totalCounter = 0
keys := []string{"mykey1", "mykey2", "mykey3"}
t.Run("Test subscribe configuration items", func(t *testing.T) {
_, err := testClient.SubscribeConfigurationItems(ctx, "example-config",
keys, func(s string, items map[string]*ConfigurationItem) {
atomic.AddUint32(&counter, 1)
for _, k := range keys {
assert.Equal(t, k+valueSuffix, items[k].Value)
atomic.AddUint32(&totalCounter, 1)
}
})
require.NoError(t, err)
})
time.Sleep(time.Second*5 + time.Millisecond*500)
assert.Equal(t, uint32(5), atomic.LoadUint32(&counter))
assert.Equal(t, uint32(15), atomic.LoadUint32(&totalCounter))
}
func TestUnSubscribeConfigurationItems(t *testing.T) {
ctx := context.Background()
var counter, totalCounter uint32
t.Run("Test unsubscribe configuration items", func(t *testing.T) {
keys := []string{"mykey1", "mykey2", "mykey3"}
subscribeID, err := testClient.SubscribeConfigurationItems(ctx, "example-config",
keys, func(id string, items map[string]*ConfigurationItem) {
atomic.AddUint32(&counter, 1)
for _, k := range keys {
assert.Equal(t, k+valueSuffix, items[k].Value)
atomic.AddUint32(&totalCounter, 1)
}
})
require.NoError(t, err)
time.Sleep(time.Second * 2)
time.Sleep(time.Millisecond * 500)
err = testClient.UnsubscribeConfigurationItems(ctx, "example-config", subscribeID)
require.NoError(t, err)
})
time.Sleep(time.Second * 5)
assert.Equal(t, uint32(3), atomic.LoadUint32(&counter))
assert.Equal(t, uint32(9), atomic.LoadUint32(&totalCounter))
}