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  }