main
1package rpc
2
3import (
4 "net"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 grpc "google.golang.org/grpc"
10 "google.golang.org/grpc/credentials/insecure"
11)
12
13func TestServer(t *testing.T) {
14 listener, err := net.Listen("tcp", "localhost:0")
15 require.NoError(t, err)
16 defer listener.Close()
17
18 server := New()
19 defer server.Stop()
20
21 go func() {
22 require.NoError(t, server.Serve(listener))
23 }()
24
25 connection, err := grpc.NewClient(
26 listener.Addr().String(),
27 grpc.WithTransportCredentials(insecure.NewCredentials()),
28 )
29 require.NoError(t, err)
30
31 defer connection.Close()
32 client := NewAbilityClient(connection)
33
34 t.Run("forbids", func(t *testing.T) {
35 reply, err := client.Allowed(t.Context(), &AllowRequest{
36 Subject: "",
37 Permission: "",
38 Resource: "",
39 })
40 require.NoError(t, err)
41 assert.False(t, reply.Result)
42 })
43
44 t.Run("allows alice:view:jane_vacation", func(t *testing.T) {
45 reply, err := client.Allowed(t.Context(), &AllowRequest{
46 Subject: "gid://example/User/alice",
47 Permission: "view",
48 Resource: "gid://example/Album/jane_vacation",
49 })
50 require.NoError(t, err)
51 assert.True(t, reply.Result)
52 })
53
54 t.Run("allows gid://User/1 read gid://Organization/2", func(t *testing.T) {
55 reply, err := client.Allowed(t.Context(), &AllowRequest{
56 Subject: "gid://example/User/1",
57 Permission: "read",
58 Resource: "gid://example/Organization/2",
59 })
60 require.NoError(t, err)
61 assert.True(t, reply.Result)
62 })
63}