Skip to content

Commit 463ad6d

Browse files
authored
test: refactor revision tests (#3256)
1 parent 88b5ddd commit 463ad6d

24 files changed

Lines changed: 312 additions & 237 deletions

docs/spicedb.md

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/datastore/crdb/crdb_test.go

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,12 @@ import (
4545
"github.com/authzed/spicedb/pkg/tuple"
4646
)
4747

48+
// Plain time.Duration spellings of the shared test constants, for the option
49+
// constructors in this package. See test.RetainAllRevisions and
50+
// test.DisableBackgroundGC for what they mean.
4851
const (
49-
veryLargeGCWindow = 90000 * time.Second
50-
veryLargeGCInterval = 90000 * time.Second
52+
retainAllRevisions = time.Duration(test.RetainAllRevisions)
53+
disableBackgroundGC = time.Duration(test.DisableBackgroundGC)
5154
)
5255

5356
var crdbFactory = test.NewTesterFactory(&pgconn.PgError{Code: pool.CrdbRetryErrCode})
@@ -64,14 +67,14 @@ func crdbTestVersion() string {
6467
func TestCRDBDatastoreWithoutIntegrity(t *testing.T) {
6568
t.Parallel()
6669
b := testdatastore.RunCRDBForTesting(t, crdbTestVersion())
67-
test.All(t, crdbFactory.NewTester(test.DatastoreTesterFunc(func(t testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) {
70+
test.All(t, crdbFactory.NewTester(test.DatastoreTesterFunc(func(t testing.TB, revisionParameters test.RevisionParameters, watchBufferLength uint16) (datastore.Datastore, error) {
6871
ctx := t.Context()
6972
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
7073
ds, err := NewCRDBDatastore(
7174
ctx,
7275
uri,
73-
GCWindow(gcWindow),
74-
RevisionQuantization(revisionQuantization),
76+
GCWindow(time.Duration(revisionParameters.GCRetentionWindow)),
77+
RevisionQuantization(revisionParameters.Quantization),
7578
WatchBufferLength(watchBufferLength),
7679
OverlapStrategy(overlapStrategyPrefix),
7780
DebugAnalyzeBeforeStatistics(),
@@ -91,31 +94,31 @@ func TestCRDBDatastoreWithoutIntegrity(t *testing.T) {
9194
b,
9295
StreamingWatchTest,
9396
RevisionQuantization(0),
94-
GCWindow(veryLargeGCWindow),
97+
GCWindow(retainAllRevisions),
9598
WithAcquireTimeout(5*time.Second),
9699
))
97100

98101
t.Run("TestTransactionMetadataMarking", createDatastoreTest(
99102
b,
100103
TransactionMetadataMarkingTest,
101104
RevisionQuantization(0),
102-
GCWindow(veryLargeGCWindow),
105+
GCWindow(retainAllRevisions),
103106
WithAcquireTimeout(5*time.Second),
104107
))
105108

106109
t.Run("TestTTLChangefeedSuppressionParam", createDatastoreTest(
107110
b,
108111
TTLChangefeedSuppressionParamTest,
109112
RevisionQuantization(0),
110-
GCWindow(veryLargeGCWindow),
113+
GCWindow(retainAllRevisions),
111114
WithAcquireTimeout(5*time.Second),
112115
))
113116

114117
t.Run("TestTTLChangefeedSuppressionWatch", createDatastoreTest(
115118
b,
116119
TTLChangefeedSuppressionWatchTest,
117120
RevisionQuantization(0),
118-
GCWindow(veryLargeGCWindow),
121+
GCWindow(retainAllRevisions),
119122
WithAcquireTimeout(5*time.Second),
120123
))
121124
}
@@ -206,14 +209,14 @@ func TestCRDBDatastoreWithIntegrity(t *testing.T) { //nolint:tparallel
206209
t.Parallel()
207210
b := testdatastore.RunCRDBForTesting(t, crdbTestVersion())
208211

209-
test.All(t, crdbFactory.NewTester(test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) {
212+
test.All(t, crdbFactory.NewTester(test.DatastoreTesterFunc(func(t testing.TB, revisionParameters test.RevisionParameters, watchBufferLength uint16) (datastore.Datastore, error) {
210213
ctx := t.Context()
211214
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
212215
ds, err := NewCRDBDatastore(
213216
ctx,
214217
uri,
215-
GCWindow(gcWindow),
216-
RevisionQuantization(revisionQuantization),
218+
GCWindow(time.Duration(revisionParameters.GCRetentionWindow)),
219+
RevisionQuantization(revisionParameters.Quantization),
217220
WatchBufferLength(watchBufferLength),
218221
OverlapStrategy(overlapStrategyPrefix),
219222
DebugAnalyzeBeforeStatistics(),
@@ -233,14 +236,14 @@ func TestCRDBDatastoreWithIntegrity(t *testing.T) { //nolint:tparallel
233236
return ds, nil
234237
})))
235238

236-
unwrappedTester := test.DatastoreTesterFunc(func(_ testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) {
239+
unwrappedTester := test.DatastoreTesterFunc(func(t testing.TB, revisionParameters test.RevisionParameters, watchBufferLength uint16) (datastore.Datastore, error) {
237240
ctx := t.Context()
238241
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
239242
ds, err := NewCRDBDatastore(
240243
ctx,
241244
uri,
242-
GCWindow(gcWindow),
243-
RevisionQuantization(revisionQuantization),
245+
GCWindow(time.Duration(revisionParameters.GCRetentionWindow)),
246+
RevisionQuantization(revisionParameters.Quantization),
244247
WatchBufferLength(watchBufferLength),
245248
OverlapStrategy(overlapStrategyPrefix),
246249
DebugAnalyzeBeforeStatistics(),
@@ -391,7 +394,7 @@ func newCRDBWithUser(t *testing.T) (adminConn *pgx.Conn, connStrings map[provisi
391394
func RelationshipIntegrityInfoTest(t *testing.T, tester test.DatastoreTester) {
392395
require := require.New(t)
393396

394-
rawDS, err := tester.New(t, 0, veryLargeGCInterval, veryLargeGCWindow, 1)
397+
rawDS, err := tester.New(t, test.DefaultRevisionParameters(), 1)
395398
require.NoError(err)
396399

397400
ds, _ := testfixtures.StandardDatastoreWithSchema(t, rawDS)
@@ -455,7 +458,7 @@ func (f *fakeSource) Next(ctx context.Context) (*tuple.Relationship, error) {
455458
func BulkRelationshipIntegrityInfoTest(t *testing.T, tester test.DatastoreTester) {
456459
require := require.New(t)
457460

458-
rawDS, err := tester.New(t, 0, veryLargeGCInterval, veryLargeGCWindow, 1)
461+
rawDS, err := tester.New(t, test.DefaultRevisionParameters(), 1)
459462
require.NoError(err)
460463

461464
ds, _ := testfixtures.StandardDatastoreWithSchema(t, rawDS)
@@ -505,7 +508,7 @@ func BulkRelationshipIntegrityInfoTest(t *testing.T, tester test.DatastoreTester
505508
func RelationshipIntegrityWatchTest(t *testing.T, tester test.DatastoreTester) {
506509
require := require.New(t)
507510

508-
rawDS, err := tester.New(t, 0, veryLargeGCInterval, veryLargeGCWindow, 1)
511+
rawDS, err := tester.New(t, test.DefaultRevisionParameters(), 1)
509512
require.NoError(err)
510513

511514
ds, rev := testfixtures.StandardDatastoreWithSchema(t, rawDS)

internal/datastore/crdb/partitioner_integration_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestPartitionedExportEndToEnd(t *testing.T) {
2828
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
2929
connectStr = uri
3030
ds, err := NewCRDBDatastore(ctx, uri,
31-
GCWindow(veryLargeGCWindow),
31+
GCWindow(retainAllRevisions),
3232
RevisionQuantization(0),
3333
WithAcquireTimeout(30*time.Second),
3434
)
@@ -96,7 +96,7 @@ func TestStreamPartitionedExportBoundCombinations(t *testing.T) {
9696
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
9797
connectStr = uri
9898
ds, err := NewCRDBDatastore(ctx, uri,
99-
GCWindow(veryLargeGCWindow),
99+
GCWindow(retainAllRevisions),
100100
RevisionQuantization(0),
101101
WithAcquireTimeout(30*time.Second),
102102
)
@@ -215,7 +215,7 @@ func TestCRDBSpecialCharEncodingInRangeKeys(t *testing.T) {
215215
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
216216
connectStr = uri
217217
ds, err := NewCRDBDatastore(ctx, uri,
218-
GCWindow(veryLargeGCWindow),
218+
GCWindow(retainAllRevisions),
219219
RevisionQuantization(0),
220220
WithAcquireTimeout(30*time.Second),
221221
)
@@ -355,7 +355,7 @@ func TestCRDBExhaustiveEscapeScan(t *testing.T) {
355355
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
356356
connStr = uri
357357
ds, err := NewCRDBDatastore(ctx, uri,
358-
GCWindow(veryLargeGCWindow),
358+
GCWindow(retainAllRevisions),
359359
RevisionQuantization(0),
360360
WithAcquireTimeout(30*time.Second),
361361
)
@@ -448,7 +448,7 @@ func TestExplainPartitionedQuery(t *testing.T) {
448448

449449
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
450450
ds, err := NewCRDBDatastore(ctx, uri,
451-
GCWindow(veryLargeGCWindow),
451+
GCWindow(retainAllRevisions),
452452
RevisionQuantization(0),
453453
WithAcquireTimeout(30*time.Second),
454454
)

internal/datastore/crdb/partitioner_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestPlanPartitionedExport(t *testing.T) {
2828
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
2929
connectStr = uri
3030
ds, err := NewCRDBDatastore(ctx, uri,
31-
GCWindow(veryLargeGCWindow),
31+
GCWindow(retainAllRevisions),
3232
RevisionQuantization(0),
3333
WithAcquireTimeout(30*time.Second),
3434
)
@@ -181,7 +181,7 @@ func TestUnwrapAsBulkExportPartitioner(t *testing.T) {
181181
partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](ds)
182182
require.NotNil(t, partitioner, "expected datastore to be unwrappable as BulkExportPartitioner")
183183
},
184-
GCWindow(veryLargeGCWindow),
184+
GCWindow(retainAllRevisions),
185185
RevisionQuantization(0),
186186
WithAcquireTimeout(30*time.Second),
187187
))
@@ -191,7 +191,7 @@ func TestUnwrapAsBulkExportPartitioner(t *testing.T) {
191191
partitioner := datastore.UnwrapAs[datastore.BulkExportPartitioner](roDS)
192192
require.NotNil(t, partitioner, "expected readonly-wrapped datastore to be unwrappable as BulkExportPartitioner")
193193
},
194-
GCWindow(veryLargeGCWindow),
194+
GCWindow(retainAllRevisions),
195195
RevisionQuantization(0),
196196
WithAcquireTimeout(30*time.Second),
197197
))
@@ -216,7 +216,7 @@ func TestPlanPartitionsOnlyUsesPrimaryIndex(t *testing.T) {
216216
ds := b.NewDatastore(t, func(engine, uri string) datastore.Datastore {
217217
connectStr = uri
218218
ds, err := NewCRDBDatastore(ctx, uri,
219-
GCWindow(veryLargeGCWindow),
219+
GCWindow(retainAllRevisions),
220220
RevisionQuantization(0),
221221
WithAcquireTimeout(30*time.Second),
222222
)

internal/datastore/memdb/memdb_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ var memdbFactory = test.NewTesterFactory(ErrSerialization)
2323

2424
type memDBTest struct{}
2525

26-
func (memDBTest) New(_ testing.TB, revisionQuantization, _, gcWindow time.Duration, watchBufferLength uint16) (datastore.Datastore, error) {
27-
return NewMemdbDatastore(watchBufferLength, revisionQuantization, gcWindow)
26+
func (memDBTest) New(_ testing.TB, revisionParameters test.RevisionParameters, watchBufferLength uint16) (datastore.Datastore, error) {
27+
return NewMemdbDatastore(watchBufferLength, revisionParameters.Quantization, time.Duration(revisionParameters.GCRetentionWindow))
2828
}
2929

3030
func TestMemdbDatastore(t *testing.T) {

internal/datastore/mysql/datastore_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ type datastoreTester struct {
3939
prefix string
4040
}
4141

42-
func (dst *datastoreTester) createDatastore(tb testing.TB, revisionQuantization, gcInterval, gcWindow time.Duration, _ uint16) (datastore.Datastore, error) {
42+
func (dst *datastoreTester) createDatastore(tb testing.TB, revisionParameters test.RevisionParameters, _ uint16) (datastore.Datastore, error) {
4343
ctx := tb.Context()
4444
ds := dst.b.NewDatastore(tb, func(engine, uri string) datastore.Datastore {
4545
ds, err := newMySQLDatastore(ctx, uri, primaryInstanceID,
46-
RevisionQuantization(revisionQuantization),
47-
GCWindow(gcWindow),
48-
GCInterval(gcInterval),
46+
RevisionQuantization(revisionParameters.Quantization),
47+
GCWindow(time.Duration(revisionParameters.GCRetentionWindow)),
48+
GCInterval(time.Duration(revisionParameters.GCRunInterval)),
4949
TablePrefix(dst.prefix),
5050
DebugAnalyzeBeforeStatistics(),
5151
OverrideLockWaitTimeout(1),

0 commit comments

Comments
 (0)