Skip to content

Commit 34ed268

Browse files
fix unit test for c1z file
1 parent a35dcba commit 34ed268

File tree

11 files changed

+333
-9
lines changed

11 files changed

+333
-9
lines changed

pkg/connector/function.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,17 @@ func (r *functionSyncer) Grant(ctx context.Context, principal *v2.Resource, enti
150150
return nil, nil, err
151151
}
152152

153-
err = dbClient.GrantSequence(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
154-
return nil, nil, err
153+
err = dbClient.GrantFunction(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
154+
if err != nil {
155+
return nil, nil, err
156+
}
157+
return []*v2.Grant{
158+
{
159+
Id: fmt.Sprintf("%s:%s:%s", entitlement.Id, principal.Id.ResourceType, principal.Id.Resource),
160+
Entitlement: entitlement,
161+
Principal: principal,
162+
},
163+
}, nil, nil
155164
}
156165

157166
func (r *functionSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotations.Annotations, error) {
@@ -182,7 +191,7 @@ func (r *functionSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotatio
182191
return nil, err
183192
}
184193

185-
err = dbClient.RevokeSequence(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
194+
err = dbClient.RevokeFunction(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
186195
return nil, err
187196
}
188197

pkg/connector/function_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package connector
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/conductorone/baton-sdk/pkg/dotc1z"
8+
9+
connectorv2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestGrantRevokeFunction(t *testing.T) {
14+
ctx, syncer, manager, client := newTestConnector(t)
15+
16+
err := syncer.Sync(ctx)
17+
require.NoError(t, err)
18+
err = syncer.Close(ctx)
19+
require.NoError(t, err)
20+
21+
c1z, err := manager.LoadC1Z(ctx)
22+
require.NoError(t, err)
23+
require.NoError(t, err)
24+
defer func(c1z *dotc1z.C1File) {
25+
err := c1z.Close()
26+
require.NoError(t, err)
27+
}(c1z)
28+
29+
dbResource, err := getByDisplayName(ctx, c1z, databaseResourceType, "postgres")
30+
require.NoError(t, err)
31+
require.NotNil(t, dbResource)
32+
33+
roleResource, err := getByDisplayName(ctx, c1z, roleResourceType, "test_role")
34+
require.NoError(t, err)
35+
require.NotNil(t, roleResource)
36+
37+
functionResource, err := getByDisplayName(ctx, c1z, functionResourceType, "get_test_item_count")
38+
require.NoError(t, err)
39+
require.NotNil(t, functionResource)
40+
41+
dbId, rId, err := parseWithDatabaseID(functionResource.Id.Resource)
42+
require.NoError(t, err)
43+
44+
grantResponse, err := client.Grant(ctx, &connectorv2.GrantManagerServiceGrantRequest{
45+
Principal: &connectorv2.Resource{
46+
Id: roleResource.Id,
47+
DisplayName: roleResource.DisplayName,
48+
},
49+
Entitlement: &connectorv2.Entitlement{
50+
Id: fmt.Sprintf("entitlement:function:db%s:%d:execute", dbId, rId),
51+
Resource: &connectorv2.Resource{
52+
Id: &connectorv2.ResourceId{
53+
ResourceType: functionResourceType.Id,
54+
Resource: fmt.Sprintf("function:db%s:%d", dbId, rId),
55+
},
56+
},
57+
},
58+
})
59+
require.NoError(t, err)
60+
require.NotNil(t, grantResponse)
61+
require.Len(t, grantResponse.Grants, 1)
62+
63+
grant := grantResponse.Grants[0]
64+
65+
revokeResponse, err := client.Revoke(ctx, &connectorv2.GrantManagerServiceRevokeRequest{
66+
Grant: grant,
67+
})
68+
require.NoError(t, err)
69+
require.NotNil(t, revokeResponse)
70+
}

pkg/connector/helpers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func formatEntitlementID(resource *v2.Resource, privName string, grant bool) str
9191
// parseEntitlementID parses an entitlement ID and returns the resource type
9292
// resourceTypeId, resourceId, privilegeName, isGrant flag, and an error if any.
9393
func parseEntitlementID(id string) (string, string, string, bool, error) {
94-
parts := strings.SplitN(id, ":", 5)
94+
parts := strings.SplitN(id, ":", 6)
9595

9696
if len(parts) <= 2 {
9797
return "", "", "", false, fmt.Errorf("invalid entitlement ID: %s", id)

pkg/connector/procedure.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,16 @@ func (r *procedureSyncer) Grant(ctx context.Context, principal *v2.Resource, ent
134134
}
135135

136136
err = dbClient.GrantProcedure(ctx, procedure.Schema, procedure.Name, principal.DisplayName, privilegeName, isGrant)
137-
return nil, nil, err
137+
if err != nil {
138+
return nil, nil, err
139+
}
140+
return []*v2.Grant{
141+
{
142+
Id: fmt.Sprintf("%s:%s:%s", entitlement.Id, principal.Id.ResourceType, principal.Id.Resource),
143+
Entitlement: entitlement,
144+
Principal: principal,
145+
},
146+
}, nil, nil
138147
}
139148

140149
func (r *procedureSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotations.Annotations, error) {

pkg/connector/procedure_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package connector
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/conductorone/baton-sdk/pkg/dotc1z"
8+
9+
connectorv2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestGrantRevokeProcedure(t *testing.T) {
14+
ctx, syncer, manager, client := newTestConnector(t)
15+
16+
err := syncer.Sync(ctx)
17+
require.NoError(t, err)
18+
err = syncer.Close(ctx)
19+
require.NoError(t, err)
20+
21+
c1z, err := manager.LoadC1Z(ctx)
22+
require.NoError(t, err)
23+
require.NoError(t, err)
24+
defer func(c1z *dotc1z.C1File) {
25+
err := c1z.Close()
26+
require.NoError(t, err)
27+
}(c1z)
28+
29+
dbResource, err := getByDisplayName(ctx, c1z, databaseResourceType, "postgres")
30+
require.NoError(t, err)
31+
require.NotNil(t, dbResource)
32+
33+
roleResource, err := getByDisplayName(ctx, c1z, roleResourceType, "test_role")
34+
require.NoError(t, err)
35+
require.NotNil(t, roleResource)
36+
37+
procedureResource, err := getByDisplayName(ctx, c1z, procedureResourceType, "add_test_item")
38+
require.NoError(t, err)
39+
require.NotNil(t, procedureResource)
40+
41+
dbId, rId, err := parseWithDatabaseID(procedureResource.Id.Resource)
42+
require.NoError(t, err)
43+
44+
grantResponse, err := client.Grant(ctx, &connectorv2.GrantManagerServiceGrantRequest{
45+
Principal: &connectorv2.Resource{
46+
Id: roleResource.Id,
47+
DisplayName: roleResource.DisplayName,
48+
},
49+
Entitlement: &connectorv2.Entitlement{
50+
Id: fmt.Sprintf("entitlement:procedure:db%s:%d:execute", dbId, rId),
51+
Resource: &connectorv2.Resource{
52+
Id: &connectorv2.ResourceId{
53+
ResourceType: procedureResourceType.Id,
54+
Resource: fmt.Sprintf("procedure:db%s:%d", dbId, rId),
55+
},
56+
},
57+
},
58+
})
59+
require.NoError(t, err)
60+
require.NotNil(t, grantResponse)
61+
require.Len(t, grantResponse.Grants, 1)
62+
63+
grant := grantResponse.Grants[0]
64+
65+
revokeResponse, err := client.Revoke(ctx, &connectorv2.GrantManagerServiceRevokeRequest{
66+
Grant: grant,
67+
})
68+
require.NoError(t, err)
69+
require.NotNil(t, revokeResponse)
70+
}

pkg/connector/sequence.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,17 @@ func (r *sequenceSyncer) Grant(ctx context.Context, principal *v2.Resource, enti
155155
}
156156

157157
err = dbClient.GrantSequence(ctx, sequence.Schema, sequence.Name, principal.DisplayName, privilegeName, isGrant)
158-
return nil, nil, err
158+
if err != nil {
159+
return nil, nil, err
160+
}
161+
162+
return []*v2.Grant{
163+
{
164+
Id: fmt.Sprintf("%s:%s:%s", entitlement.Id, principal.Id.ResourceType, principal.Id.Resource),
165+
Entitlement: entitlement,
166+
Principal: principal,
167+
},
168+
}, nil, nil
159169
}
160170

161171
func (r *sequenceSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotations.Annotations, error) {

pkg/connector/sequence_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package connector
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/conductorone/baton-sdk/pkg/dotc1z"
8+
9+
connectorv2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestGrantRevokeSequence(t *testing.T) {
14+
ctx, syncer, manager, client := newTestConnector(t)
15+
16+
err := syncer.Sync(ctx)
17+
require.NoError(t, err)
18+
err = syncer.Close(ctx)
19+
require.NoError(t, err)
20+
21+
c1z, err := manager.LoadC1Z(ctx)
22+
require.NoError(t, err)
23+
require.NoError(t, err)
24+
defer func(c1z *dotc1z.C1File) {
25+
err := c1z.Close()
26+
require.NoError(t, err)
27+
}(c1z)
28+
29+
dbResource, err := getByDisplayName(ctx, c1z, databaseResourceType, "postgres")
30+
require.NoError(t, err)
31+
require.NotNil(t, dbResource)
32+
33+
roleResource, err := getByDisplayName(ctx, c1z, roleResourceType, "test_role")
34+
require.NoError(t, err)
35+
require.NotNil(t, roleResource)
36+
37+
sequenceResource, err := getByDisplayName(ctx, c1z, sequenceResourceType, "test_table_seq")
38+
require.NoError(t, err)
39+
require.NotNil(t, sequenceResource)
40+
41+
dbId, rId, err := parseWithDatabaseID(sequenceResource.Id.Resource)
42+
require.NoError(t, err)
43+
44+
grantResponse, err := client.Grant(ctx, &connectorv2.GrantManagerServiceGrantRequest{
45+
Principal: &connectorv2.Resource{
46+
Id: roleResource.Id,
47+
DisplayName: roleResource.DisplayName,
48+
},
49+
Entitlement: &connectorv2.Entitlement{
50+
Id: fmt.Sprintf("entitlement:sequence:db%s:%d:select", dbId, rId),
51+
Resource: &connectorv2.Resource{
52+
Id: &connectorv2.ResourceId{
53+
ResourceType: sequenceResourceType.Id,
54+
Resource: fmt.Sprintf("sequence:db%s:%d", dbId, rId),
55+
},
56+
},
57+
},
58+
})
59+
require.NoError(t, err)
60+
require.NotNil(t, grantResponse)
61+
require.Len(t, grantResponse.Grants, 1)
62+
63+
grant := grantResponse.Grants[0]
64+
65+
revokeResponse, err := client.Revoke(ctx, &connectorv2.GrantManagerServiceRevokeRequest{
66+
Grant: grant,
67+
})
68+
require.NoError(t, err)
69+
require.NotNil(t, revokeResponse)
70+
}

pkg/connector/table.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,17 @@ func (r *tableSyncer) Grant(ctx context.Context, principal *v2.Resource, entitle
165165
}
166166

167167
err = dbClient.GrantTable(ctx, table.Schema, table.Name, principal.DisplayName, privilegeName, isGrant)
168-
return nil, nil, err
168+
if err != nil {
169+
return nil, nil, err
170+
}
171+
172+
return []*v2.Grant{
173+
{
174+
Id: fmt.Sprintf("%s:%s:%s", entitlement.Id, principal.Id.ResourceType, principal.Id.Resource),
175+
Entitlement: entitlement,
176+
Principal: principal,
177+
},
178+
}, nil, nil
169179
}
170180

171181
func (r *tableSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotations.Annotations, error) {

pkg/connector/table_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package connector
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/conductorone/baton-sdk/pkg/dotc1z"
8+
9+
connectorv2 "github.com/conductorone/baton-sdk/pb/c1/connector/v2"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestGrantRevokeTable(t *testing.T) {
14+
ctx, syncer, manager, client := newTestConnector(t)
15+
16+
err := syncer.Sync(ctx)
17+
require.NoError(t, err)
18+
err = syncer.Close(ctx)
19+
require.NoError(t, err)
20+
21+
c1z, err := manager.LoadC1Z(ctx)
22+
require.NoError(t, err)
23+
require.NoError(t, err)
24+
defer func(c1z *dotc1z.C1File) {
25+
err := c1z.Close()
26+
require.NoError(t, err)
27+
}(c1z)
28+
29+
dbResource, err := getByDisplayName(ctx, c1z, databaseResourceType, "postgres")
30+
require.NoError(t, err)
31+
require.NotNil(t, dbResource)
32+
33+
roleResource, err := getByDisplayName(ctx, c1z, roleResourceType, "test_role")
34+
require.NoError(t, err)
35+
require.NotNil(t, roleResource)
36+
37+
tableResource, err := getByDisplayName(ctx, c1z, tableResourceType, "test_table")
38+
require.NoError(t, err)
39+
require.NotNil(t, tableResource)
40+
41+
dbId, rId, err := parseWithDatabaseID(tableResource.Id.Resource)
42+
require.NoError(t, err)
43+
44+
grantResponse, err := client.Grant(ctx, &connectorv2.GrantManagerServiceGrantRequest{
45+
Principal: &connectorv2.Resource{
46+
Id: roleResource.Id,
47+
DisplayName: roleResource.DisplayName,
48+
},
49+
Entitlement: &connectorv2.Entitlement{
50+
Id: fmt.Sprintf("entitlement:table:db%s:%d:select", dbId, rId),
51+
Resource: &connectorv2.Resource{
52+
Id: &connectorv2.ResourceId{
53+
ResourceType: tableResourceType.Id,
54+
Resource: fmt.Sprintf("table:db%s:%d", dbId, rId),
55+
},
56+
},
57+
},
58+
})
59+
require.NoError(t, err)
60+
require.NotNil(t, grantResponse)
61+
require.Len(t, grantResponse.Grants, 1)
62+
63+
grant := grantResponse.Grants[0]
64+
65+
revokeResponse, err := client.Revoke(ctx, &connectorv2.GrantManagerServiceRevokeRequest{
66+
Grant: grant,
67+
})
68+
require.NoError(t, err)
69+
require.NotNil(t, revokeResponse)
70+
}

pkg/connector/view.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func (r *viewSyncer) Grant(ctx context.Context, principal *v2.Resource, entitlem
165165
Entitlement: entitlement,
166166
Principal: principal,
167167
},
168-
}, nil, err
168+
}, nil, nil
169169
}
170170

171171
func (r *viewSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotations.Annotations, error) {

0 commit comments

Comments
 (0)