github.com/authzed/spicedb@v1.32.1-0.20240520085336-ebda56537386/internal/dispatch/combined/combined_test.go (about) 1 package combined 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/authzed/spicedb/internal/datastore/memdb" 10 datastoremw "github.com/authzed/spicedb/internal/middleware/datastore" 11 "github.com/authzed/spicedb/internal/testfixtures" 12 core "github.com/authzed/spicedb/pkg/proto/core/v1" 13 dispatchv1 "github.com/authzed/spicedb/pkg/proto/dispatch/v1" 14 "github.com/authzed/spicedb/pkg/tuple" 15 ) 16 17 func TestCombinedRecursiveCall(t *testing.T) { 18 dispatcher, err := NewDispatcher() 19 require.NoError(t, err) 20 21 t.Cleanup(func() { dispatcher.Close() }) 22 23 ctx := datastoremw.ContextWithHandle(context.Background()) 24 25 rawDS, err := memdb.NewMemdbDatastore(0, 0, memdb.DisableGC) 26 require.NoError(t, err) 27 28 ds, revision := testfixtures.DatastoreFromSchemaAndTestRelationships(rawDS, ` 29 definition user {} 30 31 definition resource { 32 relation viewer: resource#viewer | user 33 permission view = viewer 34 } 35 `, []*core.RelationTuple{ 36 tuple.MustParse("resource:someresource#viewer@resource:someresource#viewer"), 37 }, require.New(t)) 38 39 require.NoError(t, datastoremw.SetInContext(ctx, ds)) 40 41 _, err = dispatcher.DispatchCheck(ctx, &dispatchv1.DispatchCheckRequest{ 42 ResourceRelation: &core.RelationReference{ 43 Namespace: "resource", 44 Relation: "view", 45 }, 46 ResourceIds: []string{"someresource"}, 47 Subject: &core.ObjectAndRelation{ 48 Namespace: "user", 49 ObjectId: "fred", 50 Relation: tuple.Ellipsis, 51 }, 52 ResultsSetting: dispatchv1.DispatchCheckRequest_REQUIRE_ALL_RESULTS, 53 Metadata: &dispatchv1.ResolverMeta{ 54 AtRevision: revision.String(), 55 DepthRemaining: 50, 56 }, 57 }) 58 require.Error(t, err) 59 require.ErrorContains(t, err, "max depth exceeded") 60 }