Skip to content

Commit 491f7ad

Browse files
add integration test for function and procedures
1 parent c46516e commit 491f7ad

File tree

9 files changed

+136
-5
lines changed

9 files changed

+136
-5
lines changed

pkg/connector/function.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ 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.Signature(), principal.DisplayName, privilegeName, isGrant)
153+
err = dbClient.GrantSequence(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
154154
return nil, nil, err
155155
}
156156

@@ -182,7 +182,7 @@ func (r *functionSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotatio
182182
return nil, err
183183
}
184184

185-
err = dbClient.RevokeSequence(ctx, function.Schema, function.Signature(), principal.DisplayName, privilegeName, isGrant)
185+
err = dbClient.RevokeSequence(ctx, function.Schema, function.Name, principal.DisplayName, privilegeName, isGrant)
186186
return nil, err
187187
}
188188

pkg/connector/procedure.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (r *procedureSyncer) Grant(ctx context.Context, principal *v2.Resource, ent
133133
return nil, nil, err
134134
}
135135

136-
err = dbClient.GrantProcedure(ctx, procedure.Schema, procedure.Signature(), principal.DisplayName, privilegeName, isGrant)
136+
err = dbClient.GrantProcedure(ctx, procedure.Schema, procedure.Name, principal.DisplayName, privilegeName, isGrant)
137137
return nil, nil, err
138138
}
139139

@@ -165,7 +165,7 @@ func (r *procedureSyncer) Revoke(ctx context.Context, grant *v2.Grant) (annotati
165165
return nil, err
166166
}
167167

168-
err = dbClient.RevokeProcedure(ctx, procedure.Schema, procedure.Signature(), principal.DisplayName, privilegeName, isGrant)
168+
err = dbClient.RevokeProcedure(ctx, procedure.Schema, procedure.Name, principal.DisplayName, privilegeName, isGrant)
169169
return nil, err
170170
}
171171

pkg/postgres/functions.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func (t *FunctionModel) AllPrivileges() PrivilegeSet {
4040
func (t *FunctionModel) DefaultPrivileges() PrivilegeSet {
4141
return Execute
4242
}
43+
4344
func (t *FunctionModel) Signature() string {
4445
return fmt.Sprintf("%s(%s)", t.Name, t.Arguments)
4546
}

pkg/postgres/functions_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package postgres
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/conductorone/baton-postgresql/pkg/testutil"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestFunctionGrantRevoke(t *testing.T) {
12+
ctx := context.Background()
13+
14+
container := testutil.SetupPostgresContainer(ctx, t)
15+
16+
client, err := New(ctx, container.Dsn())
17+
assert.NoError(t, err)
18+
19+
// Is grant true
20+
err = client.GrantFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), true)
21+
assert.NoError(t, err)
22+
23+
err = client.RevokeFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), true)
24+
assert.NoError(t, err)
25+
26+
// is grant false
27+
err = client.GrantFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), false)
28+
assert.NoError(t, err)
29+
30+
err = client.RevokeFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), false)
31+
assert.NoError(t, err)
32+
33+
// revoke without grant
34+
err = client.RevokeFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), false)
35+
assert.NoError(t, err)
36+
37+
err = client.RevokeFunction(ctx, "public", "get_test_item_count", container.Role(), Execute.Name(), true)
38+
assert.NoError(t, err)
39+
}

pkg/postgres/procedures.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ func (t *ProcedureModel) AllPrivileges() PrivilegeSet {
3939
func (t *ProcedureModel) DefaultPrivileges() PrivilegeSet {
4040
return Execute
4141
}
42+
4243
func (t *ProcedureModel) Signature() string {
4344
return fmt.Sprintf("%s(%s)", t.Name, t.Arguments)
4445
}

pkg/postgres/procedures_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package postgres
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/conductorone/baton-postgresql/pkg/testutil"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestProcedureGrantRevoke(t *testing.T) {
12+
ctx := context.Background()
13+
14+
container := testutil.SetupPostgresContainer(ctx, t)
15+
16+
client, err := New(ctx, container.Dsn())
17+
assert.NoError(t, err)
18+
19+
// Is grant true
20+
err = client.GrantProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), true)
21+
assert.NoError(t, err)
22+
23+
err = client.RevokeProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), true)
24+
assert.NoError(t, err)
25+
26+
// is grant false
27+
err = client.GrantProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), false)
28+
assert.NoError(t, err)
29+
30+
err = client.RevokeProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), false)
31+
assert.NoError(t, err)
32+
33+
// revoke without grant
34+
err = client.RevokeProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), false)
35+
assert.NoError(t, err)
36+
37+
err = client.RevokeProcedure(ctx, "public", "add_test_item", container.Role(), Execute.Name(), true)
38+
assert.NoError(t, err)
39+
}

pkg/postgres/sequences_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package postgres
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/conductorone/baton-postgresql/pkg/testutil"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestSequencesGrantRevoke(t *testing.T) {
12+
ctx := context.Background()
13+
14+
container := testutil.SetupPostgresContainer(ctx, t)
15+
16+
client, err := New(ctx, container.Dsn())
17+
assert.NoError(t, err)
18+
19+
// Is grant true
20+
err = client.GrantSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), true)
21+
assert.NoError(t, err)
22+
23+
err = client.RevokeSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), true)
24+
assert.NoError(t, err)
25+
26+
// is grant false
27+
err = client.GrantSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), false)
28+
assert.NoError(t, err)
29+
30+
err = client.RevokeSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), false)
31+
assert.NoError(t, err)
32+
33+
// revoke without grant
34+
err = client.RevokeSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), false)
35+
assert.NoError(t, err)
36+
37+
err = client.RevokeSequence(ctx, "public", "test_table_seq", container.Role(), Select.Name(), true)
38+
assert.NoError(t, err)
39+
}

pkg/testutil/container.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ func SetupPostgresContainer(ctx context.Context, t *testing.T) *SQLContainer {
5151
postgres.WithPassword("postgres"),
5252
testcontainers.WithWaitStrategy(
5353
wait.ForLog("database system is ready to accept connections").
54-
WithOccurrence(2).WithStartupTimeout(5*time.Second)),
54+
WithOccurrence(2).
55+
WithStartupTimeout(5*time.Second),
56+
),
5557
)
5658

5759
assert.NoError(t, err)

pkg/testutil/init.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,16 @@ CREATE SEQUENCE test_table_seq
5656
NO MAXVALUE
5757
CACHE 1;
5858

59+
-- Create procedures for testing
60+
CREATE OR REPLACE PROCEDURE add_test_item(item_name VARCHAR)
61+
LANGUAGE plpgsql
62+
AS
63+
$$
64+
BEGIN
65+
INSERT INTO test_table (name) VALUES (item_name);
66+
END;
67+
$$;
68+
5969
-- create roles and users
6070

6171
CREATE ROLE test_role WITH LOGIN PASSWORD 'test_password';

0 commit comments

Comments
 (0)