Add conformance test for TTL in state stores
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
This commit is contained in:
parent
d8c2ce47fd
commit
4d4b98d339
|
@ -7,7 +7,7 @@ components:
|
|||
allOperations: true
|
||||
- component: memcached
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete" ]
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "ttl" ]
|
||||
- component: azure.cosmosdb
|
||||
allOperations: true
|
||||
- component: azure.blobstorage
|
||||
|
@ -36,7 +36,7 @@ components:
|
|||
operations: ["set", "get", "delete", "etag", "bulkset", "bulkdelete", "first-write"]
|
||||
- component: cassandra
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete" ]
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "ttl" ]
|
||||
- component: cockroachdb
|
||||
allOperations: false
|
||||
operations: [ "set", "get", "delete", "bulkset", "bulkdelete", "transaction", "etag", "query" ]
|
||||
|
|
|
@ -19,6 +19,7 @@ import (
|
|||
"sort"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -588,21 +589,20 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
err := statestore.Delete(&state.DeleteRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Set an object.
|
||||
err = statestore.Set(&state.SetRequest{
|
||||
Key: testKey,
|
||||
Value: firstValue,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the set.
|
||||
res, err := statestore.Get(&state.GetRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
assertEquals(t, firstValue, res)
|
||||
etag := res.ETag
|
||||
|
||||
|
@ -612,7 +612,7 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
Value: secondValue,
|
||||
ETag: &fakeEtag,
|
||||
})
|
||||
require.NotNil(t, err)
|
||||
require.Error(t, err)
|
||||
|
||||
// Try and update with corect ETag, expect success.
|
||||
err = statestore.Set(&state.SetRequest{
|
||||
|
@ -620,13 +620,13 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
Value: secondValue,
|
||||
ETag: etag,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the set.
|
||||
res, err = statestore.Get(&state.GetRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
assertEquals(t, secondValue, res)
|
||||
require.NotEqual(t, etag, res.ETag)
|
||||
etag = res.ETag
|
||||
|
@ -636,14 +636,14 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
Key: testKey,
|
||||
ETag: &fakeEtag,
|
||||
})
|
||||
require.NotNil(t, err)
|
||||
require.Error(t, err)
|
||||
|
||||
// Try and delete with correct ETag, expect success.
|
||||
err = statestore.Delete(&state.DeleteRequest{
|
||||
Key: testKey,
|
||||
ETag: etag,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
} else {
|
||||
// Check if eTag feature is NOT listed
|
||||
|
@ -701,21 +701,21 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
err := statestore.Delete(&state.DeleteRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = statestore.Set(requestSet[0])
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the set.
|
||||
res, err := statestore.Get(&state.GetRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
assertEquals(t, firstValue, res)
|
||||
|
||||
// Second write expect fail
|
||||
err = statestore.Set(requestSet[1])
|
||||
require.NotNil(t, err)
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
@ -734,16 +734,16 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
err := statestore.Delete(&state.DeleteRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = statestore.Set(request)
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the set.
|
||||
res, err := statestore.Get(&state.GetRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
assertEquals(t, firstValue, res)
|
||||
|
||||
etag := res.ETag
|
||||
|
@ -758,13 +758,13 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
},
|
||||
}
|
||||
err = statestore.Set(request)
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Validate the set.
|
||||
res, err = statestore.Get(&state.GetRequest{
|
||||
Key: testKey,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NoError(t, err)
|
||||
require.NotEqual(t, etag, res.ETag)
|
||||
assertEquals(t, secondValue, res)
|
||||
|
||||
|
@ -772,12 +772,40 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
|
||||
// Second write expect fail
|
||||
err = statestore.Set(request)
|
||||
require.NotNil(t, err)
|
||||
require.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
if config.HasOperation("ttl") {
|
||||
t.Run("set and get with TTL", func(t *testing.T) {
|
||||
err := statestore.Set(&state.SetRequest{
|
||||
Key: key + "-ttl",
|
||||
Value: "⏱️",
|
||||
Metadata: map[string]string{
|
||||
"ttlInSeconds": "2",
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Request immediately
|
||||
res, err := statestore.Get(&state.GetRequest{
|
||||
Key: key + "-ttl",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assertEquals(t, "⏱️", res)
|
||||
|
||||
// Wait for the object to expire and request again
|
||||
time.Sleep(3 * time.Second)
|
||||
res, err = statestore.Get(&state.GetRequest{
|
||||
Key: key + "-ttl",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.Nil(t, res.Data)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func assertEquals(t *testing.T, value interface{}, res *state.GetResponse) {
|
||||
func assertEquals(t *testing.T, value any, res *state.GetResponse) {
|
||||
switch v := value.(type) {
|
||||
case intValueType:
|
||||
// Custom type requires case mapping
|
||||
|
|
Loading…
Reference in New Issue