MCPcopy
hub / github.com/openfga/openfga / TupleWritingAndReadingTest

Function TupleWritingAndReadingTest

pkg/storage/test/tuples.go:624–1788  ·  view source on GitHub ↗
(t *testing.T, datastore storage.OpenFGADatastore)

Source from the content-addressed store, hash-verified

622}
623
624func TupleWritingAndReadingTest(t *testing.T, datastore storage.OpenFGADatastore) {
625 ctx := context.Background()
626
627 t.Run("lots_of_writes_and_read_returns_everything", func(t *testing.T) {
628 storeID := ulid.Make().String()
629
630 var writtenTuples []*openfgav1.TupleKey
631 for i := 0; i < storage.DefaultPageSize*50; i++ {
632 newTuple := tuple.NewTupleKey(fmt.Sprintf("document:%d", i), "viewer", "user:jon")
633 err := datastore.Write(context.Background(), storeID, nil, []*openfgav1.TupleKey{newTuple})
634 require.NoError(t, err)
635 writtenTuples = append(writtenTuples, newTuple)
636 }
637
638 t.Run("read_returns_everything", func(t *testing.T) {
639 tupleIterator, err := datastore.Read(ctx, storeID, storage.ReadFilter{}, storage.ReadOptions{})
640 require.NoError(t, err)
641 defer tupleIterator.Stop()
642
643 seenTuples := iterateThroughAllTuples(t, tupleIterator)
644 if diff := cmp.Diff(writtenTuples, seenTuples, cmpSortTupleKeys...); diff != "" {
645 t.Fatalf("mismatch (-want +got):\n%s", diff)
646 }
647 })
648
649 t.Run("read_page_size_1_returns_everything", func(t *testing.T) {
650 seenTuples := testutils.ConvertTuplesToTupleKeys(readWithPageSize(t, datastore, storeID, 1, storage.ReadFilter{}))
651 if diff := cmp.Diff(writtenTuples, seenTuples, cmpSortTupleKeys...); diff != "" {
652 t.Fatalf("mismatch (-want +got):\n%s", diff)
653 }
654 })
655
656 t.Run("read_page_size_2_returns_everything", func(t *testing.T) {
657 seenTuples := testutils.ConvertTuplesToTupleKeys(readWithPageSize(t, datastore, storeID, 2, storage.ReadFilter{}))
658 if diff := cmp.Diff(writtenTuples, seenTuples, cmpSortTupleKeys...); diff != "" {
659 t.Fatalf("mismatch (-want +got):\n%s", diff)
660 }
661 })
662
663 t.Run("read_page_size_default_returns_everything", func(t *testing.T) {
664 seenTuples := testutils.ConvertTuplesToTupleKeys(readWithPageSize(t, datastore, storeID, storage.DefaultPageSize, storage.ReadFilter{}))
665 if diff := cmp.Diff(writtenTuples, seenTuples, cmpSortTupleKeys...); diff != "" {
666 t.Fatalf("mismatch (-want +got):\n%s", diff)
667 }
668 })
669
670 t.Run("read_page_size_infinite_returns_everything", func(t *testing.T) {
671 seenTuples := testutils.ConvertTuplesToTupleKeys(readWithPageSize(t, datastore, storeID, storage.DefaultPageSize*50000, storage.ReadFilter{}))
672 if diff := cmp.Diff(writtenTuples, seenTuples, cmpSortTupleKeys...); diff != "" {
673 t.Fatalf("mismatch (-want +got):\n%s", diff)
674 }
675 })
676 })
677
678 t.Run("deletes_would_succeed_and_write_would_fail,_fails_and_introduces_no_changes", func(t *testing.T) {
679 storeID := ulid.Make().String()
680 tks := []*openfgav1.TupleKey{
681 {

Callers 1

RunAllTestsFunction · 0.85

Calls 15

NewTupleKeyFunction · 0.92
ConvertTuplesToTupleKeysFunction · 0.92
InvalidWriteInputErrorFunction · 0.92
WithOnMissingDeleteFunction · 0.92
NewPaginationOptionsFunction · 0.92
WithOnDuplicateInsertFunction · 0.92
MustNewStructFunction · 0.92
DirectRelationReferenceFunction · 0.92
GetTypeFunction · 0.92

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…