-
Notifications
You must be signed in to change notification settings - Fork 429
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: Cleanup helpers part 3 (#2730)
- Add warehouse, role, database role, table, and context helpers - Remove old unused helpers and move deprecated ones (that will be removed with old grant resources removal) - Introduce defaults in new helpers to simplify usage
- Loading branch information
1 parent
a70d1af
commit eb7bee4
Showing
59 changed files
with
1,216 additions
and
1,135 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package helpers | ||
|
||
import ( | ||
"context" | ||
"testing" | ||
|
||
"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
type ContextClient struct { | ||
context *TestClientContext | ||
} | ||
|
||
func NewContextClient(context *TestClientContext) *ContextClient { | ||
return &ContextClient{ | ||
context: context, | ||
} | ||
} | ||
|
||
func (c *ContextClient) client() sdk.ContextFunctions { | ||
return c.context.client.ContextFunctions | ||
} | ||
|
||
func (c *ContextClient) CurrentAccount(t *testing.T) string { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentAccount, err := c.client().CurrentAccount(ctx) | ||
require.NoError(t, err) | ||
|
||
return currentAccount | ||
} | ||
|
||
func (c *ContextClient) CurrentRole(t *testing.T) string { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentRole, err := c.client().CurrentRole(ctx) | ||
require.NoError(t, err) | ||
|
||
return currentRole | ||
} | ||
|
||
func (c *ContextClient) CurrentRegion(t *testing.T) string { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentRegion, err := c.client().CurrentRegion(ctx) | ||
require.NoError(t, err) | ||
|
||
return currentRegion | ||
} | ||
|
||
func (c *ContextClient) CurrentUser(t *testing.T) string { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentUser, err := c.client().CurrentUser(ctx) | ||
require.NoError(t, err) | ||
|
||
return currentUser | ||
} | ||
|
||
func (c *ContextClient) IsRoleInSession(t *testing.T, id sdk.AccountObjectIdentifier) bool { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
isInSession, err := c.client().IsRoleInSession(ctx, id) | ||
require.NoError(t, err) | ||
|
||
return isInSession | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package helpers | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"testing" | ||
|
||
"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" | ||
"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
type DatabaseRoleClient struct { | ||
context *TestClientContext | ||
} | ||
|
||
func NewDatabaseRoleClient(context *TestClientContext) *DatabaseRoleClient { | ||
return &DatabaseRoleClient{ | ||
context: context, | ||
} | ||
} | ||
|
||
func (c *DatabaseRoleClient) client() sdk.DatabaseRoles { | ||
return c.context.client.DatabaseRoles | ||
} | ||
|
||
func (c *DatabaseRoleClient) CreateDatabaseRole(t *testing.T) (*sdk.DatabaseRole, func()) { | ||
t.Helper() | ||
return c.CreateDatabaseRoleInDatabase(t, sdk.NewAccountObjectIdentifier(c.context.database)) | ||
} | ||
|
||
func (c *DatabaseRoleClient) CreateDatabaseRoleInDatabase(t *testing.T, databaseId sdk.AccountObjectIdentifier) (*sdk.DatabaseRole, func()) { | ||
t.Helper() | ||
return c.CreateDatabaseRoleInDatabaseWithName(t, databaseId, random.String()) | ||
} | ||
|
||
func (c *DatabaseRoleClient) CreateDatabaseRoleWithName(t *testing.T, name string) (*sdk.DatabaseRole, func()) { | ||
t.Helper() | ||
return c.CreateDatabaseRoleInDatabaseWithName(t, sdk.NewAccountObjectIdentifier(c.context.database), name) | ||
} | ||
|
||
func (c *DatabaseRoleClient) CreateDatabaseRoleInDatabaseWithName(t *testing.T, databaseId sdk.AccountObjectIdentifier, name string) (*sdk.DatabaseRole, func()) { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
id := sdk.NewDatabaseObjectIdentifier(databaseId.Name(), name) | ||
|
||
err := c.client().Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) | ||
require.NoError(t, err) | ||
|
||
databaseRole, err := c.client().ShowByID(ctx, id) | ||
require.NoError(t, err) | ||
|
||
return databaseRole, c.CleanupDatabaseRoleFunc(t, id) | ||
} | ||
|
||
func (c *DatabaseRoleClient) CleanupDatabaseRoleFunc(t *testing.T, id sdk.DatabaseObjectIdentifier) func() { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
return func() { | ||
// to prevent error when db was removed before the role | ||
_, err := c.context.client.Databases.ShowByID(ctx, sdk.NewAccountObjectIdentifier(id.DatabaseName())) | ||
if errors.Is(err, sdk.ErrObjectNotExistOrAuthorized) { | ||
return | ||
} | ||
|
||
err = c.client().Drop(ctx, sdk.NewDropDatabaseRoleRequest(id).WithIfExists(true)) | ||
require.NoError(t, err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package helpers | ||
|
||
import ( | ||
"context" | ||
"testing" | ||
|
||
"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
type RoleClient struct { | ||
context *TestClientContext | ||
} | ||
|
||
func NewRoleClient(context *TestClientContext) *RoleClient { | ||
return &RoleClient{ | ||
context: context, | ||
} | ||
} | ||
|
||
func (c *RoleClient) client() sdk.Roles { | ||
return c.context.client.Roles | ||
} | ||
|
||
func (c *RoleClient) UseRole(t *testing.T, roleName string) func() { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentRole, err := c.context.client.ContextFunctions.CurrentRole(ctx) | ||
require.NoError(t, err) | ||
|
||
err = c.context.client.Sessions.UseRole(ctx, sdk.NewAccountObjectIdentifier(roleName)) | ||
require.NoError(t, err) | ||
|
||
return func() { | ||
err = c.context.client.Sessions.UseRole(ctx, sdk.NewAccountObjectIdentifier(currentRole)) | ||
require.NoError(t, err) | ||
} | ||
} | ||
|
||
func (c *RoleClient) CreateRole(t *testing.T) (*sdk.Role, func()) { | ||
t.Helper() | ||
return c.CreateRoleWithRequest(t, sdk.NewCreateRoleRequest(sdk.RandomAccountObjectIdentifier())) | ||
} | ||
|
||
func (c *RoleClient) CreateRoleWithName(t *testing.T, name string) (*sdk.Role, func()) { | ||
t.Helper() | ||
return c.CreateRoleWithRequest(t, sdk.NewCreateRoleRequest(sdk.NewAccountObjectIdentifier(name))) | ||
} | ||
|
||
func (c *RoleClient) CreateRoleGrantedToCurrentUser(t *testing.T) (*sdk.Role, func()) { | ||
t.Helper() | ||
|
||
role, roleCleanup := c.CreateRole(t) | ||
c.GrantRoleToCurrentUser(t, role.ID()) | ||
return role, roleCleanup | ||
} | ||
|
||
func (c *RoleClient) CreateRoleWithRequest(t *testing.T, req *sdk.CreateRoleRequest) (*sdk.Role, func()) { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
err := c.client().Create(ctx, req) | ||
require.NoError(t, err) | ||
role, err := c.client().ShowByID(ctx, req.GetName()) | ||
require.NoError(t, err) | ||
return role, c.DropRoleFunc(t, req.GetName()) | ||
} | ||
|
||
func (c *RoleClient) DropRoleFunc(t *testing.T, id sdk.AccountObjectIdentifier) func() { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
return func() { | ||
err := c.client().Drop(ctx, sdk.NewDropRoleRequest(id).WithIfExists(true)) | ||
require.NoError(t, err) | ||
} | ||
} | ||
|
||
func (c *RoleClient) GrantRoleToCurrentUser(t *testing.T, id sdk.AccountObjectIdentifier) { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
currentUser, err := c.context.client.ContextFunctions.CurrentUser(ctx) | ||
require.NoError(t, err) | ||
|
||
err = c.client().Grant(ctx, sdk.NewGrantRoleRequest(id, sdk.GrantRole{ | ||
User: sdk.Pointer(sdk.NewAccountObjectIdentifier(currentUser)), | ||
})) | ||
require.NoError(t, err) | ||
} | ||
|
||
// TODO: move later to grants client | ||
func (c *RoleClient) GrantOwnershipOnAccountObject(t *testing.T, roleId sdk.AccountObjectIdentifier, objectId sdk.AccountObjectIdentifier, objectType sdk.ObjectType) { | ||
t.Helper() | ||
ctx := context.Background() | ||
|
||
err := c.context.client.Grants.GrantOwnership( | ||
ctx, | ||
sdk.OwnershipGrantOn{ | ||
Object: &sdk.Object{ | ||
ObjectType: objectType, | ||
Name: objectId, | ||
}, | ||
}, | ||
sdk.OwnershipGrantTo{ | ||
AccountRoleName: sdk.Pointer(roleId), | ||
}, | ||
new(sdk.GrantOwnershipOptions), | ||
) | ||
require.NoError(t, err) | ||
} |
Oops, something went wrong.