driftctl/pkg/memstore/store_test.go

72 lines
1.6 KiB
Go

package memstore
import (
"encoding/json"
"sync"
"testing"
"github.com/cloudskiff/driftctl/pkg/resource"
"github.com/stretchr/testify/assert"
)
func TestStore(t *testing.T) {
cases := []struct {
name string
bucket BucketName
values map[string]interface{}
expectedJSON string
}{
{
name: "test basic store usage",
bucket: 0,
values: map[string]interface{}{
"test-value_|)": 13,
"duration_key": "23",
"null": nil,
"res": &resource.Resource{Id: "id", Type: "type"},
},
expectedJSON: `{"duration_key":"23","null":null,"res":{"Id":"id","Type":"type","Attrs":null},"test-value_|)":13}`,
},
{
name: "test empty bucket",
bucket: 2,
values: map[string]interface{}{},
expectedJSON: `{}`,
},
{
name: "test bucket with nil values",
bucket: 1,
values: map[string]interface{}{
"version": nil,
"total_resources": nil,
"total_managed": nil,
},
expectedJSON: `{"total_managed":null,"total_resources":null,"version":null}`,
},
}
for _, tt := range cases {
kv := New()
t.Run(tt.name, func(t *testing.T) {
var wg sync.WaitGroup
for key, val := range tt.values {
wg.Add(1)
go func(key string, val interface{}, wg *sync.WaitGroup) {
defer wg.Done()
kv.Bucket(tt.bucket).Set(key, val)
assert.Equal(t, val, kv.Bucket(tt.bucket).Get(key))
assert.Equal(t, nil, kv.Bucket(tt.bucket+1).Get(key))
}(key, val, &wg)
}
wg.Wait()
b, err := json.Marshal(kv.Bucket(tt.bucket).Values())
assert.Nil(t, err)
assert.Equal(t, tt.expectedJSON, string(b))
})
}
}