diff --git a/pkg/sdk/common_types.go b/pkg/sdk/common_types.go index 26a1330804..57a4f862e0 100644 --- a/pkg/sdk/common_types.go +++ b/pkg/sdk/common_types.go @@ -191,13 +191,13 @@ type ForeignKeyOnAction struct { func (row *propertyRow) toBoolProperty() *BoolProperty { var value bool if row.Value != "" && row.Value != "null" { - value = toBool(row.Value) + value = ToBool(row.Value) } else { value = false } var defaultValue bool if row.DefaultValue != "" && row.Value != "null" { - defaultValue = toBool(row.DefaultValue) + defaultValue = ToBool(row.DefaultValue) } else { defaultValue = false } diff --git a/pkg/sdk/conversion_functions_integration_test.go b/pkg/sdk/conversion_functions_integration_test.go deleted file mode 100644 index 6cf12b80fb..0000000000 --- a/pkg/sdk/conversion_functions_integration_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package sdk - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestInt_ToTimestampLTZ(t *testing.T) { - client := testClient(t) - ctx := context.Background() - err := client.Accounts.Alter(ctx, &AlterAccountOptions{ - Set: &AccountSet{ - Parameters: &AccountLevelParameters{ - SessionParameters: &SessionParameters{ - TimestampTypeMapping: String("TIMESTAMP_LTZ"), - Timezone: String("UTC"), - }, - }, - }, - }) - require.NoError(t, err) - t.Cleanup(func() { - err := client.Accounts.Alter(ctx, &AlterAccountOptions{ - Unset: &AccountUnset{ - Parameters: &AccountLevelParametersUnset{ - SessionParameters: &SessionParametersUnset{ - TimestampTypeMapping: Bool(true), - Timezone: Bool(true), - }, - }, - }, - }) - require.NoError(t, err) - }) - warehouseTest, warehouseCleanup := createWarehouse(t, client) - t.Cleanup(warehouseCleanup) - err = client.Sessions.UseWarehouse(ctx, warehouseTest.ID()) - require.NoError(t, err) - now := time.Now() - actual, err := client.ConversionFunctions.ToTimestampLTZ(ctx, now) - require.NoError(t, err) - expected := now.UTC() - assert.Equal(t, expected, actual) -} - -func TestInt_ToTimestampNTZ(t *testing.T) { - client := testClient(t) - ctx := context.Background() - err := client.Accounts.Alter(ctx, &AlterAccountOptions{ - Set: &AccountSet{ - Parameters: &AccountLevelParameters{ - SessionParameters: &SessionParameters{ - TimestampTypeMapping: String("TIMESTAMP_NTZ"), - Timezone: String("UTC"), - }, - }, - }, - }) - require.NoError(t, err) - t.Cleanup(func() { - err := client.Accounts.Alter(ctx, &AlterAccountOptions{ - Unset: &AccountUnset{ - Parameters: &AccountLevelParametersUnset{ - SessionParameters: &SessionParametersUnset{ - TimestampTypeMapping: Bool(true), - Timezone: Bool(true), - }, - }, - }, - }) - require.NoError(t, err) - }) - warehouseTest, warehouseCleanup := createWarehouse(t, client) - t.Cleanup(warehouseCleanup) - err = client.Sessions.UseWarehouse(ctx, warehouseTest.ID()) - require.NoError(t, err) - now := time.Now() - actual, err := client.ConversionFunctions.ToTimestampNTZ(ctx, now) - require.NoError(t, err) - assert.Equal(t, time.UTC, actual.Location()) -} diff --git a/pkg/sdk/external_tables_dto.go b/pkg/sdk/external_tables_dto.go index ea9e9d9f2d..127e4e0a45 100644 --- a/pkg/sdk/external_tables_dto.go +++ b/pkg/sdk/external_tables_dto.go @@ -250,50 +250,50 @@ func (v TagAssociationRequest) toOpts() TagAssociation { } } -func (v *CreateExternalTableRequest) toOpts() *CreateExternalTableOptions { - columns := make([]ExternalTableColumn, len(v.columns)) - if v.columns != nil { - for i, c := range v.columns { +func (s *CreateExternalTableRequest) toOpts() *CreateExternalTableOptions { + columns := make([]ExternalTableColumn, len(s.columns)) + if s.columns != nil { + for i, c := range s.columns { columns[i] = c.toOpts() } } var fileFormat []ExternalTableFileFormat - if v.fileFormat != nil { - fileFormat = []ExternalTableFileFormat{v.fileFormat.toOpts()} + if s.fileFormat != nil { + fileFormat = []ExternalTableFileFormat{s.fileFormat.toOpts()} } var cloudProviderParams *CloudProviderParams - if v.cloudProviderParams != nil { - cloudProviderParams = v.cloudProviderParams.toOpts() + if s.cloudProviderParams != nil { + cloudProviderParams = s.cloudProviderParams.toOpts() } var rowAccessPolicy *RowAccessPolicy - if v.rowAccessPolicy != nil { - rowAccessPolicy = v.rowAccessPolicy.toOpts() + if s.rowAccessPolicy != nil { + rowAccessPolicy = s.rowAccessPolicy.toOpts() } - tag := make([]TagAssociation, len(v.tag)) - if v.tag != nil { - for i, t := range v.tag { + tag := make([]TagAssociation, len(s.tag)) + if s.tag != nil { + for i, t := range s.tag { tag[i] = t.toOpts() } } return &CreateExternalTableOptions{ - OrReplace: v.orReplace, - IfNotExists: v.ifNotExists, - name: v.name, + OrReplace: s.orReplace, + IfNotExists: s.ifNotExists, + name: s.name, Columns: columns, CloudProviderParams: cloudProviderParams, - Location: v.location, - RefreshOnCreate: v.refreshOnCreate, - AutoRefresh: v.autoRefresh, - Pattern: v.pattern, + Location: s.location, + RefreshOnCreate: s.refreshOnCreate, + AutoRefresh: s.autoRefresh, + Pattern: s.pattern, FileFormat: fileFormat, - AwsSnsTopic: v.awsSnsTopic, - CopyGrants: v.copyGrants, - Comment: v.comment, + AwsSnsTopic: s.awsSnsTopic, + CopyGrants: s.copyGrants, + Comment: s.comment, RowAccessPolicy: rowAccessPolicy, Tag: tag, } diff --git a/pkg/sdk/helper_test.go b/pkg/sdk/helper_test.go index 7b01ff3988..c6b7c68f32 100644 --- a/pkg/sdk/helper_test.go +++ b/pkg/sdk/helper_test.go @@ -1,110 +1,9 @@ package sdk import ( - "context" - "errors" - "fmt" "testing" - "time" - - "github.com/brianvoe/gofakeit/v6" - "github.com/hashicorp/go-uuid" - "github.com/stretchr/testify/require" ) -// there is no direct way to get the account identifier from Snowflake API, but you can get it if you know -// the account locator and by filtering the list of accounts in replication accounts by the account locator -func getAccountIdentifier(t *testing.T, client *Client) AccountIdentifier { - t.Helper() - ctx := context.Background() - currentAccountLocator, err := client.ContextFunctions.CurrentAccount(ctx) - require.NoError(t, err) - replicationAccounts, err := client.ReplicationFunctions.ShowReplicationAccounts(ctx) - require.NoError(t, err) - for _, replicationAccount := range replicationAccounts { - if replicationAccount.AccountLocator == currentAccountLocator { - return AccountIdentifier{ - organizationName: replicationAccount.OrganizationName, - accountName: replicationAccount.AccountName, - } - } - } - return AccountIdentifier{} -} - -func getPrimaryAccountIdentifier(t *testing.T) AccountIdentifier { - t.Helper() - client := testClient(t) - return getAccountIdentifier(t, client) -} - -func getSecondaryAccountIdentifier(t *testing.T) AccountIdentifier { - t.Helper() - client := testSecondaryClient(t) - return getAccountIdentifier(t, client) -} - -func randomSchemaObjectIdentifier(t *testing.T) SchemaObjectIdentifier { - t.Helper() - return NewSchemaObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12), randomStringN(t, 12)) -} - -func randomDatabaseObjectIdentifier(t *testing.T) DatabaseObjectIdentifier { - t.Helper() - return NewDatabaseObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12)) -} - -func alphanumericDatabaseObjectIdentifier(t *testing.T) DatabaseObjectIdentifier { - t.Helper() - return NewDatabaseObjectIdentifier(randomAlphanumericN(t, 12), randomAlphanumericN(t, 12)) -} - -func randomAccountObjectIdentifier(t *testing.T) AccountObjectIdentifier { - t.Helper() - return NewAccountObjectIdentifier(randomStringN(t, 12)) -} - -func useDatabase(t *testing.T, client *Client, databaseID AccountObjectIdentifier) func() { - t.Helper() - ctx := context.Background() - orgDB, err := client.ContextFunctions.CurrentDatabase(ctx) - require.NoError(t, err) - err = client.Sessions.UseDatabase(ctx, databaseID) - require.NoError(t, err) - return func() { - err := client.Sessions.UseDatabase(ctx, NewAccountObjectIdentifier(orgDB)) - require.NoError(t, err) - } -} - -func useSchema(t *testing.T, client *Client, schemaID DatabaseObjectIdentifier) func() { - t.Helper() - ctx := context.Background() - orgDB, err := client.ContextFunctions.CurrentDatabase(ctx) - require.NoError(t, err) - orgSchema, err := client.ContextFunctions.CurrentSchema(ctx) - require.NoError(t, err) - err = client.Sessions.UseSchema(ctx, schemaID) - require.NoError(t, err) - return func() { - err := client.Sessions.UseSchema(ctx, NewDatabaseObjectIdentifier(orgDB, orgSchema)) - require.NoError(t, err) - } -} - -func useWarehouse(t *testing.T, client *Client, warehouseID AccountObjectIdentifier) func() { - t.Helper() - ctx := context.Background() - orgWarehouse, err := client.ContextFunctions.CurrentWarehouse(ctx) - require.NoError(t, err) - err = client.Sessions.UseWarehouse(ctx, warehouseID) - require.NoError(t, err) - return func() { - err := client.Sessions.UseWarehouse(ctx, NewAccountObjectIdentifier(orgWarehouse)) - require.NoError(t, err) - } -} - func testClient(t *testing.T) *Client { t.Helper() @@ -139,655 +38,3 @@ func testClientFromProfile(t *testing.T, profile string) (*Client, error) { } return NewClient(config) } - -func randomUUID(t *testing.T) string { - t.Helper() - v, err := uuid.GenerateUUID() - require.NoError(t, err) - return v -} - -func randomComment(t *testing.T) string { - t.Helper() - return gofakeit.Sentence(10) -} - -func randomBool(t *testing.T) bool { - t.Helper() - return gofakeit.Bool() -} - -func randomString(t *testing.T) string { - t.Helper() - return gofakeit.Password(true, true, true, true, false, 28) -} - -func randomStringN(t *testing.T, num int) string { - t.Helper() - return gofakeit.Password(true, true, true, true, false, num) -} - -func randomAlphanumericN(t *testing.T, num int) string { - t.Helper() - return gofakeit.Password(true, true, true, false, false, num) -} - -func randomStringRange(t *testing.T, min, max int) string { - t.Helper() - if min > max { - t.Errorf("min %d is greater than max %d", min, max) - } - return gofakeit.Password(true, true, true, true, false, randomIntRange(t, min, max)) -} - -func randomIntRange(t *testing.T, min, max int) int { - t.Helper() - if min > max { - t.Errorf("min %d is greater than max %d", min, max) - } - return gofakeit.IntRange(min, max) -} - -func createSessionPolicy(t *testing.T, client *Client, database *Database, schema *Schema) (*SessionPolicy, func()) { - t.Helper() - id := NewSchemaObjectIdentifier(database.Name, schema.Name, randomStringN(t, 12)) - return createSessionPolicyWithOptions(t, client, id, NewCreateSessionPolicyRequest(id)) -} - -func createSessionPolicyWithOptions(t *testing.T, client *Client, id SchemaObjectIdentifier, request *CreateSessionPolicyRequest) (*SessionPolicy, func()) { - t.Helper() - ctx := context.Background() - err := client.SessionPolicies.Create(ctx, request) - require.NoError(t, err) - sessionPolicy, err := client.SessionPolicies.ShowByID(ctx, id) - require.NoError(t, err) - return sessionPolicy, func() { - err := client.SessionPolicies.Drop(ctx, NewDropSessionPolicyRequest(id)) - require.NoError(t, err) - } -} - -func createResourceMonitor(t *testing.T, client *Client) (*ResourceMonitor, func()) { - t.Helper() - return createResourceMonitorWithOptions(t, client, &CreateResourceMonitorOptions{ - With: &ResourceMonitorWith{ - CreditQuota: Pointer(100), - Triggers: []TriggerDefinition{ - { - Threshold: 100, - TriggerAction: TriggerActionSuspend, - }, - { - Threshold: 70, - TriggerAction: TriggerActionSuspendImmediate, - }, - { - Threshold: 90, - TriggerAction: TriggerActionNotify, - }, - }, - }, - }) -} - -func createResourceMonitorWithOptions(t *testing.T, client *Client, opts *CreateResourceMonitorOptions) (*ResourceMonitor, func()) { - t.Helper() - id := randomAccountObjectIdentifier(t) - ctx := context.Background() - err := client.ResourceMonitors.Create(ctx, id, opts) - require.NoError(t, err) - resourceMonitor, err := client.ResourceMonitors.ShowByID(ctx, id) - require.NoError(t, err) - return resourceMonitor, func() { - err := client.ResourceMonitors.Drop(ctx, id) - require.NoError(t, err) - } -} - -func createFailoverGroup(t *testing.T, client *Client) (*FailoverGroup, func()) { - t.Helper() - objectTypes := []PluralObjectType{PluralObjectTypeRoles} - ctx := context.Background() - currentAccount, err := client.ContextFunctions.CurrentAccount(ctx) - require.NoError(t, err) - accountID := NewAccountIdentifierFromAccountLocator(currentAccount) - allowedAccounts := []AccountIdentifier{accountID} - return createFailoverGroupWithOptions(t, client, objectTypes, allowedAccounts, nil) -} - -func createFailoverGroupWithOptions(t *testing.T, client *Client, objectTypes []PluralObjectType, allowedAccounts []AccountIdentifier, opts *CreateFailoverGroupOptions) (*FailoverGroup, func()) { - t.Helper() - id := randomAccountObjectIdentifier(t) - ctx := context.Background() - err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, opts) - require.NoError(t, err) - failoverGroup, err := client.FailoverGroups.ShowByID(ctx, id) - require.NoError(t, err) - return failoverGroup, func() { - err := client.FailoverGroups.Drop(ctx, id, nil) - require.NoError(t, err) - } -} - -func createShare(t *testing.T, client *Client) (*Share, func()) { - t.Helper() - return createShareWithOptions(t, client, &CreateShareOptions{}) -} - -func createShareWithOptions(t *testing.T, client *Client, opts *CreateShareOptions) (*Share, func()) { - t.Helper() - id := randomAccountObjectIdentifier(t) - ctx := context.Background() - err := client.Shares.Create(ctx, id, opts) - require.NoError(t, err) - share, err := client.Shares.ShowByID(ctx, id) - require.NoError(t, err) - return share, func() { - err := client.Shares.Drop(ctx, id) - require.NoError(t, err) - } -} - -func createFileFormat(t *testing.T, client *Client, schema DatabaseObjectIdentifier) (*FileFormat, func()) { - t.Helper() - return createFileFormatWithOptions(t, client, schema, &CreateFileFormatOptions{ - Type: FileFormatTypeCSV, - }) -} - -func createFileFormatWithOptions(t *testing.T, client *Client, schema DatabaseObjectIdentifier, opts *CreateFileFormatOptions) (*FileFormat, func()) { - t.Helper() - id := NewSchemaObjectIdentifier(schema.databaseName, schema.name, randomString(t)) - ctx := context.Background() - err := client.FileFormats.Create(ctx, id, opts) - require.NoError(t, err) - fileFormat, err := client.FileFormats.ShowByID(ctx, id) - require.NoError(t, err) - return fileFormat, func() { - err := client.FileFormats.Drop(ctx, id, nil) - require.NoError(t, err) - } -} - -func createWarehouse(t *testing.T, client *Client) (*Warehouse, func()) { - t.Helper() - return createWarehouseWithOptions(t, client, &CreateWarehouseOptions{}) -} - -func createWarehouseWithOptions(t *testing.T, client *Client, opts *CreateWarehouseOptions) (*Warehouse, func()) { - t.Helper() - name := randomStringRange(t, 8, 28) - id := NewAccountObjectIdentifier(name) - ctx := context.Background() - err := client.Warehouses.Create(ctx, id, opts) - require.NoError(t, err) - return &Warehouse{ - Name: name, - }, func() { - err := client.Warehouses.Drop(ctx, id, nil) - require.NoError(t, err) - } -} - -func createDatabase(t *testing.T, client *Client) (*Database, func()) { - t.Helper() - return createDatabaseWithOptions(t, client, randomAccountObjectIdentifier(t), &CreateDatabaseOptions{}) -} - -func createDatabaseWithIdentifier(t *testing.T, client *Client, id AccountObjectIdentifier) (*Database, func()) { - t.Helper() - return createDatabaseWithOptions(t, client, id, &CreateDatabaseOptions{}) -} - -func createDatabaseWithOptions(t *testing.T, client *Client, id AccountObjectIdentifier, opts *CreateDatabaseOptions) (*Database, func()) { - t.Helper() - ctx := context.Background() - err := client.Databases.Create(ctx, id, opts) - require.NoError(t, err) - database, err := client.Databases.ShowByID(ctx, id) - require.NoError(t, err) - return database, func() { - err := client.Databases.Drop(ctx, id, nil) - if errors.Is(err, errObjectNotExistOrAuthorized) { - return - } - require.NoError(t, err) - } -} - -func createSchema(t *testing.T, client *Client, database *Database) (*Schema, func()) { - t.Helper() - return createSchemaWithIdentifier(t, client, database, randomStringRange(t, 8, 28)) -} - -func createSchemaWithIdentifier(t *testing.T, client *Client, database *Database, name string) (*Schema, func()) { - t.Helper() - ctx := context.Background() - schemaID := NewDatabaseObjectIdentifier(database.Name, name) - err := client.Schemas.Create(ctx, schemaID, nil) - require.NoError(t, err) - schema, err := client.Schemas.ShowByID(ctx, NewDatabaseObjectIdentifier(database.Name, name)) - require.NoError(t, err) - return schema, func() { - err := client.Schemas.Drop(ctx, schemaID, nil) - if errors.Is(err, errObjectNotExistOrAuthorized) { - return - } - require.NoError(t, err) - } -} - -func createTable(t *testing.T, client *Client, database *Database, schema *Schema) (*Table, func()) { - t.Helper() - name := randomStringRange(t, 8, 28) - ctx := context.Background() - _, err := client.exec(ctx, fmt.Sprintf("CREATE TABLE \"%s\".\"%s\".\"%s\" (id NUMBER)", database.Name, schema.Name, name)) - require.NoError(t, err) - return &Table{ - DatabaseName: database.Name, - SchemaName: schema.Name, - Name: name, - }, func() { - _, err := client.exec(ctx, fmt.Sprintf("DROP TABLE \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) - require.NoError(t, err) - } -} - -func createTag(t *testing.T, client *Client, database *Database, schema *Schema) (*Tag, func()) { - t.Helper() - return createTagWithOptions(t, client, database, schema, &CreateTagOptions{}) -} - -func createTagWithOptions(t *testing.T, client *Client, database *Database, schema *Schema, _ *CreateTagOptions) (*Tag, func()) { - t.Helper() - name := randomStringRange(t, 8, 28) - ctx := context.Background() - _, err := client.exec(ctx, fmt.Sprintf("CREATE TAG \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) - require.NoError(t, err) - return &Tag{ - Name: name, - DatabaseName: database.Name, - SchemaName: schema.Name, - }, func() { - _, err := client.exec(ctx, fmt.Sprintf("DROP TAG \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) - require.NoError(t, err) - } -} - -func createPasswordPolicyWithOptions(t *testing.T, client *Client, database *Database, schema *Schema, options *CreatePasswordPolicyOptions) (*PasswordPolicy, func()) { - t.Helper() - var databaseCleanup func() - if database == nil { - database, databaseCleanup = createDatabase(t, client) - } - var schemaCleanup func() - if schema == nil { - schema, schemaCleanup = createSchema(t, client, database) - } - name := randomUUID(t) - id := NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) - ctx := context.Background() - err := client.PasswordPolicies.Create(ctx, id, options) - require.NoError(t, err) - - showOptions := &ShowPasswordPolicyOptions{ - Like: &Like{ - Pattern: String(name), - }, - In: &In{ - Schema: schema.ID(), - }, - } - passwordPolicyList, err := client.PasswordPolicies.Show(ctx, showOptions) - require.NoError(t, err) - require.Equal(t, 1, len(passwordPolicyList)) - return &passwordPolicyList[0], func() { - err := client.PasswordPolicies.Drop(ctx, id, nil) - require.NoError(t, err) - if schemaCleanup != nil { - schemaCleanup() - } - if databaseCleanup != nil { - databaseCleanup() - } - } -} - -func createPasswordPolicy(t *testing.T, client *Client, database *Database, schema *Schema) (*PasswordPolicy, func()) { - t.Helper() - return createPasswordPolicyWithOptions(t, client, database, schema, nil) -} - -func createMaskingPolicyWithOptions(t *testing.T, client *Client, database *Database, schema *Schema, signature []TableColumnSignature, returns DataType, expression string, options *CreateMaskingPolicyOptions) (*MaskingPolicy, func()) { - t.Helper() - var databaseCleanup func() - if database == nil { - database, databaseCleanup = createDatabase(t, client) - } - var schemaCleanup func() - if schema == nil { - schema, schemaCleanup = createSchema(t, client, database) - } - name := randomString(t) - id := NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) - ctx := context.Background() - err := client.MaskingPolicies.Create(ctx, id, signature, returns, expression, options) - require.NoError(t, err) - - showOptions := &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(name), - }, - In: &In{ - Schema: schema.ID(), - }, - } - maskingPolicyList, err := client.MaskingPolicies.Show(ctx, showOptions) - require.NoError(t, err) - require.Equal(t, 1, len(maskingPolicyList)) - return &maskingPolicyList[0], func() { - err := client.MaskingPolicies.Drop(ctx, id) - require.NoError(t, err) - if schemaCleanup != nil { - schemaCleanup() - } - if databaseCleanup != nil { - databaseCleanup() - } - } -} - -func createRole(t *testing.T, client *Client) (*Role, func()) { - t.Helper() - return createRoleWithRequest(t, client, NewCreateRoleRequest(randomAccountObjectIdentifier(t))) -} - -func createRoleWithRequest(t *testing.T, client *Client, req *CreateRoleRequest) (*Role, func()) { - t.Helper() - require.True(t, validObjectidentifier(req.name)) - ctx := context.Background() - err := client.Roles.Create(ctx, req) - require.NoError(t, err) - role, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(req.name)) - require.NoError(t, err) - return role, func() { - err = client.Roles.Drop(ctx, NewDropRoleRequest(req.name)) - require.NoError(t, err) - } -} - -func createDatabaseRole(t *testing.T, client *Client, database *Database) (*DatabaseRole, func()) { - t.Helper() - name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) - ctx := context.Background() - - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) - require.NoError(t, err) - - databaseRole, err := client.DatabaseRoles.ShowByID(ctx, id) - require.NoError(t, err) - - return databaseRole, cleanupDatabaseRoleProvider(t, ctx, client, id) -} - -func cleanupDatabaseRoleProvider(t *testing.T, ctx context.Context, client *Client, id DatabaseObjectIdentifier) func() { - t.Helper() - return func() { - err := client.DatabaseRoles.Drop(ctx, NewDropDatabaseRoleRequest(id)) - require.NoError(t, err) - } -} - -func createMaskingPolicy(t *testing.T, client *Client, database *Database, schema *Schema) (*MaskingPolicy, func()) { - t.Helper() - signature := []TableColumnSignature{ - { - Name: randomString(t), - Type: DataTypeVARCHAR, - }, - } - n := randomIntRange(t, 0, 5) - for i := 0; i < n; i++ { - signature = append(signature, TableColumnSignature{ - Name: randomString(t), - Type: DataTypeVARCHAR, - }) - } - expression := "REPLACE('X', 1, 2)" - return createMaskingPolicyWithOptions(t, client, database, schema, signature, DataTypeVARCHAR, expression, &CreateMaskingPolicyOptions{}) -} - -func createAlertWithOptions(t *testing.T, client *Client, database *Database, schema *Schema, warehouse *Warehouse, schedule string, condition string, action string, opts *CreateAlertOptions) (*Alert, func()) { - t.Helper() - var databaseCleanup func() - if database == nil { - database, databaseCleanup = createDatabase(t, client) - } - var schemaCleanup func() - if schema == nil { - schema, schemaCleanup = createSchema(t, client, database) - } - var warehouseCleanup func() - if warehouse == nil { - warehouse, warehouseCleanup = createWarehouse(t, client) - } - - name := randomString(t) - id := NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) - ctx := context.Background() - err := client.Alerts.Create(ctx, id, warehouse.ID(), schedule, condition, action, opts) - require.NoError(t, err) - - showOptions := &ShowAlertOptions{ - Like: &Like{ - Pattern: String(name), - }, - In: &In{ - Schema: schema.ID(), - }, - } - alertList, err := client.Alerts.Show(ctx, showOptions) - require.NoError(t, err) - require.Equal(t, 1, len(alertList)) - return &alertList[0], func() { - err := client.Alerts.Drop(ctx, id) - require.NoError(t, err) - if schemaCleanup != nil { - schemaCleanup() - } - if databaseCleanup != nil { - databaseCleanup() - } - if warehouseCleanup != nil { - warehouseCleanup() - } - } -} - -func createAlert(t *testing.T, client *Client, database *Database, schema *Schema, warehouse *Warehouse) (*Alert, func()) { - t.Helper() - schedule := "USING CRON * * * * * UTC" - condition := "SELECT 1" - action := "SELECT 1" - return createAlertWithOptions(t, client, database, schema, warehouse, schedule, condition, action, &CreateAlertOptions{}) -} - -func ParseTimestampWithOffset(s string) (*time.Time, error) { - t, err := time.Parse("2006-01-02T15:04:05-07:00", s) - if err != nil { - return nil, err - } - _, offset := t.Zone() - adjustedTime := t.Add(-time.Duration(offset) * time.Second) - return &adjustedTime, nil -} - -func createUser(t *testing.T, client *Client) (*User, func()) { - t.Helper() - name := randomStringRange(t, 8, 28) - id := NewAccountObjectIdentifier(name) - return createUserWithOptions(t, client, id, &CreateUserOptions{}) -} - -func createUserWithName(t *testing.T, client *Client, name string) (*User, func()) { - t.Helper() - id := NewAccountObjectIdentifier(name) - return createUserWithOptions(t, client, id, &CreateUserOptions{}) -} - -func createUserWithOptions(t *testing.T, client *Client, id AccountObjectIdentifier, opts *CreateUserOptions) (*User, func()) { - t.Helper() - ctx := context.Background() - err := client.Users.Create(ctx, id, opts) - require.NoError(t, err) - user, err := client.Users.ShowByID(ctx, id) - require.NoError(t, err) - return user, func() { - err := client.Users.Drop(ctx, id) - require.NoError(t, err) - } -} - -func createPipe(t *testing.T, client *Client, database *Database, schema *Schema, name string, copyStatement string) (*Pipe, func()) { - t.Helper() - require.NotNil(t, database, "database has to be created") - require.NotNil(t, schema, "schema has to be created") - - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) - ctx := context.Background() - - pipeCleanup := func() { - err := client.Pipes.Drop(ctx, id) - require.NoError(t, err) - } - - err := client.Pipes.Create(ctx, id, copyStatement, &CreatePipeOptions{}) - if err != nil { - return nil, pipeCleanup - } - require.NoError(t, err) - - createdPipe, errDescribe := client.Pipes.Describe(ctx, id) - if errDescribe != nil { - return nil, pipeCleanup - } - require.NoError(t, errDescribe) - - return createdPipe, pipeCleanup -} - -func createStageWithName(t *testing.T, client *Client, name string) (*string, func()) { - t.Helper() - ctx := context.Background() - stageCleanup := func() { - _, err := client.exec(ctx, fmt.Sprintf("DROP STAGE %s", name)) - require.NoError(t, err) - } - _, err := client.exec(ctx, fmt.Sprintf("CREATE STAGE %s", name)) - if err != nil { - return nil, stageCleanup - } - require.NoError(t, err) - return &name, stageCleanup -} - -func createStage(t *testing.T, client *Client, database *Database, schema *Schema, name string) (*Stage, func()) { - t.Helper() - require.NotNil(t, database, "database has to be created") - require.NotNil(t, schema, "schema has to be created") - - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) - ctx := context.Background() - - stageCleanup := func() { - _, err := client.exec(ctx, fmt.Sprintf("DROP STAGE %s", id.FullyQualifiedName())) - require.NoError(t, err) - } - - _, err := client.exec(ctx, fmt.Sprintf("CREATE STAGE %s", id.FullyQualifiedName())) - if err != nil { - return nil, stageCleanup - } - require.NoError(t, err) - - return &Stage{ - DatabaseName: database.Name, - SchemaName: schema.Name, - Name: name, - }, stageCleanup -} - -func createDynamicTable(t *testing.T, client *Client) (*DynamicTable, func()) { - t.Helper() - return createDynamicTableWithOptions(t, client, nil, nil, nil, nil) -} - -func createDynamicTableWithOptions(t *testing.T, client *Client, warehouse *Warehouse, database *Database, schema *Schema, table *Table) (*DynamicTable, func()) { - t.Helper() - var warehouseCleanup func() - if warehouse == nil { - warehouse, warehouseCleanup = createWarehouse(t, client) - } - var databaseCleanup func() - if database == nil { - database, databaseCleanup = createDatabase(t, client) - } - var schemaCleanup func() - if schema == nil { - schema, schemaCleanup = createSchema(t, client, database) - } - var tableCleanup func() - if table == nil { - table, tableCleanup = createTable(t, client, database, schema) - } - name := NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, randomString(t)) - targetLag := TargetLag{ - Lagtime: String("2 minutes"), - } - query := "select id from " + table.ID().FullyQualifiedName() - comment := randomComment(t) - ctx := context.Background() - err := client.DynamicTables.Create(ctx, NewCreateDynamicTableRequest(name, warehouse.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) - require.NoError(t, err) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(name.Name())}).WithIn(&In{Schema: schema.ID()})) - require.NoError(t, err) - require.Equal(t, 1, len(entities)) - return &entities[0], func() { - require.NoError(t, client.DynamicTables.Drop(ctx, NewDropDynamicTableRequest(name))) - if tableCleanup != nil { - tableCleanup() - } - if schemaCleanup != nil { - schemaCleanup() - } - if databaseCleanup != nil { - databaseCleanup() - } - if warehouseCleanup != nil { - warehouseCleanup() - } - } -} - -func createStageWithURL(t *testing.T, client *Client, name AccountObjectIdentifier, url string) (*Stage, func()) { - t.Helper() - ctx := context.Background() - _, err := client.exec(ctx, fmt.Sprintf(`CREATE STAGE "%s" URL = '%s'`, name.Name(), url)) - require.NoError(t, err) - - return nil, func() { - _, err := client.exec(ctx, fmt.Sprintf(`DROP STAGE "%s"`, name.Name())) - require.NoError(t, err) - } -} - -func createNetworkPolicy(t *testing.T, client *Client, req *CreateNetworkPolicyRequest) (error, func()) { - t.Helper() - ctx := context.Background() - err := client.NetworkPolicies.Create(ctx, req) - return err, func() { - err := client.NetworkPolicies.Drop(ctx, NewDropNetworkPolicyRequest(req.name)) - require.NoError(t, err) - } -} diff --git a/pkg/sdk/integration_test_imports.go b/pkg/sdk/integration_test_imports.go new file mode 100644 index 0000000000..a996de087a --- /dev/null +++ b/pkg/sdk/integration_test_imports.go @@ -0,0 +1,75 @@ +package sdk + +import ( + "context" + "database/sql" + + "github.com/snowflakedb/gosnowflake" +) + +// All the contents of this file were added to be able to use them outside the sdk package (i.e. integration tests package). +// It was easier to do it that way, so that we do not include big rename changes in the first moving PR. +// For each of them we will have to decide what do we do: +// - do we expose the field/method (e.g. errors or ValidObjectIdentifier) +// - do we keep the workaround +// - do we copy the code (e.g. ExecForTests) +// - do we move the code to other place and use it from both places (e.g. findOne) +// - something else. +// This will be handled in subsequent PRs, so that the main difficulty (moving) is already merged. + +var ( + ErrObjectNotExistOrAuthorized = errObjectNotExistOrAuthorized + ErrDifferentDatabase = errDifferentDatabase +) + +// ExecForTests is an exact copy of exec (that is unexported), that some integration tests/helpers were using +func (c *Client) ExecForTests(ctx context.Context, sql string) (sql.Result, error) { + ctx = context.WithValue(ctx, snowflakeAccountLocatorContextKey, c.accountLocator) + result, err := c.db.ExecContext(ctx, sql) + return result, decodeDriverError(err) +} + +// ValidObjectIdentifier is just a delegate to existing unexported validObjectidentifier +func ValidObjectIdentifier(objectIdentifier ObjectIdentifier) bool { + return validObjectidentifier(objectIdentifier) +} + +// GetName is just an accessor to unexported name field +func (r *CreateNetworkPolicyRequest) GetName() AccountObjectIdentifier { + return r.name +} + +// GetName is just an accessor to unexported name field +func (s *CreateRoleRequest) GetName() AccountObjectIdentifier { + return s.name +} + +// GetName is just an accessor to unexported name field +func (r *CreateTaskRequest) GetName() SchemaObjectIdentifier { + return r.name +} + +// GetName is just an accessor to unexported name field +func (r *CloneTaskRequest) GetName() SchemaObjectIdentifier { + return r.name +} + +// GetColumns is just an accessor to unexported name field +func (s *CreateExternalTableRequest) GetColumns() []*ExternalTableColumnRequest { + return s.columns +} + +// GetAccountLocator is an accessor to unexported accountLocator, which is needed in some tests +func (c *Client) GetAccountLocator() string { + return c.accountLocator +} + +// GetConfig is an accessor to unexported config, which is needed in some tests +func (c *Client) GetConfig() *gosnowflake.Config { + return c.config +} + +// FindOne just delegates to our util findOne from SDK +func FindOne[T any](collection []T, condition func(T) bool) (*T, error) { + return findOne(collection, condition) +} diff --git a/pkg/sdk/pipes_integration_test.go b/pkg/sdk/pipes_integration_test.go deleted file mode 100644 index 059b8e7855..0000000000 --- a/pkg/sdk/pipes_integration_test.go +++ /dev/null @@ -1,403 +0,0 @@ -package sdk - -import ( - "context" - "fmt" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func createPipeCopyStatement(t *testing.T, table *Table, stage *Stage) string { - t.Helper() - require.NotNil(t, table, "table has to be created") - require.NotNil(t, stage, "stage has to be created") - return fmt.Sprintf("COPY INTO %s\nFROM @%s", table.ID().FullyQualifiedName(), stage.ID().FullyQualifiedName()) -} - -func TestInt_IncorrectCreatePipeBehaviour(t *testing.T) { - client := testClient(t) - ctx := context.Background() - - schemaIdentifier := NewDatabaseObjectIdentifier("TXR@=9,TBnLj", "tcK1>AJ+") - database, databaseCleanup := createDatabaseWithIdentifier(t, client, AccountObjectIdentifier{schemaIdentifier.databaseName}) - t.Cleanup(databaseCleanup) - - schema, schemaCleanup := createSchemaWithIdentifier(t, client, database, schemaIdentifier.name) - t.Cleanup(schemaCleanup) - - table, tableCleanup := createTable(t, client, database, schema) - t.Cleanup(tableCleanup) - - stageName := randomAlphanumericN(t, 20) - stage, stageCleanup := createStage(t, client, database, schema, stageName) - t.Cleanup(stageCleanup) - - t.Run("if we have special characters in db or schema name, create pipe returns error in copy <> from <> section", func(t *testing.T) { - err := client.Pipes.Create( - ctx, - NewSchemaObjectIdentifier(database.Name, schema.Name, randomAlphanumericN(t, 20)), - createPipeCopyStatement(t, table, stage), - &CreatePipeOptions{}, - ) - - require.ErrorContains(t, err, "(42000): SQL compilation error:\nsyntax error line") - require.ErrorContains(t, err, "at position") - require.ErrorContains(t, err, "unexpected ','") - }) - - t.Run("the same works with using db and schema statements", func(t *testing.T) { - useDatabaseCleanup := useDatabase(t, client, database.ID()) - t.Cleanup(useDatabaseCleanup) - useSchemaCleanup := useSchema(t, client, schema.ID()) - t.Cleanup(useSchemaCleanup) - - createCopyStatementWithoutQualifiersForStage := func(t *testing.T, table *Table, stage *Stage) string { - t.Helper() - require.NotNil(t, table, "table has to be created") - require.NotNil(t, stage, "stage has to be created") - return fmt.Sprintf("COPY INTO %s\nFROM @\"%s\"", table.ID().FullyQualifiedName(), stage.Name) - } - - err := client.Pipes.Create( - ctx, - NewSchemaObjectIdentifier(database.Name, schema.Name, randomAlphanumericN(t, 20)), - createCopyStatementWithoutQualifiersForStage(t, table, stage), - &CreatePipeOptions{}, - ) - - require.NoError(t, err) - }) -} - -func TestInt_PipesShowAndDescribe(t *testing.T) { - client := testClient(t) - ctx := context.Background() - - schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) - database, databaseCleanup := createDatabaseWithIdentifier(t, client, AccountObjectIdentifier{schemaIdentifier.databaseName}) - t.Cleanup(databaseCleanup) - - schema, schemaCleanup := createSchemaWithIdentifier(t, client, database, schemaIdentifier.name) - t.Cleanup(schemaCleanup) - - table1, table1Cleanup := createTable(t, client, database, schema) - t.Cleanup(table1Cleanup) - - table2, table2Cleanup := createTable(t, client, database, schema) - t.Cleanup(table2Cleanup) - - stageName := randomAlphanumericN(t, 20) - stage, stageCleanup := createStage(t, client, database, schema, stageName) - t.Cleanup(stageCleanup) - - pipe1Name := randomAlphanumericN(t, 20) - pipe1CopyStatement := createPipeCopyStatement(t, table1, stage) - pipe1, pipe1Cleanup := createPipe(t, client, database, schema, pipe1Name, pipe1CopyStatement) - t.Cleanup(pipe1Cleanup) - - pipe2Name := randomAlphanumericN(t, 20) - pipe2CopyStatement := createPipeCopyStatement(t, table2, stage) - pipe2, pipe2Cleanup := createPipe(t, client, database, schema, pipe2Name, pipe2CopyStatement) - t.Cleanup(pipe2Cleanup) - - t.Run("show: without options", func(t *testing.T) { - pipes, err := client.Pipes.Show(ctx, &ShowPipeOptions{}) - - require.NoError(t, err) - assert.Equal(t, 2, len(pipes)) - assert.Contains(t, pipes, *pipe1) - assert.Contains(t, pipes, *pipe2) - }) - - t.Run("show: in schema", func(t *testing.T) { - showOptions := &ShowPipeOptions{ - In: &In{ - Schema: schema.ID(), - }, - } - pipes, err := client.Pipes.Show(ctx, showOptions) - - require.NoError(t, err) - assert.Equal(t, 2, len(pipes)) - assert.Contains(t, pipes, *pipe1) - assert.Contains(t, pipes, *pipe2) - }) - - t.Run("show: like", func(t *testing.T) { - showOptions := &ShowPipeOptions{ - Like: &Like{ - Pattern: String(pipe1Name), - }, - } - pipes, err := client.Pipes.Show(ctx, showOptions) - - require.NoError(t, err) - assert.Equal(t, 1, len(pipes)) - assert.Contains(t, pipes, *pipe1) - }) - - t.Run("show: non-existent pipe", func(t *testing.T) { - showOptions := &ShowPipeOptions{ - Like: &Like{ - Pattern: String("non-existent"), - }, - } - pipes, err := client.Pipes.Show(ctx, showOptions) - - require.NoError(t, err) - assert.Equal(t, 0, len(pipes)) - }) - - t.Run("describe: existing pipe", func(t *testing.T) { - pipe, err := client.Pipes.Describe(ctx, pipe1.ID()) - - require.NoError(t, err) - assert.Equal(t, pipe1.Name, pipe.Name) - }) - - t.Run("describe: non-existing pipe", func(t *testing.T) { - id := NewSchemaObjectIdentifier(database.Name, database.Name, "does_not_exist") - - _, err := client.Pipes.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) - }) -} - -func TestInt_PipeCreate(t *testing.T) { - client := testClient(t) - ctx := context.Background() - - schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) - database, databaseCleanup := createDatabaseWithIdentifier(t, client, AccountObjectIdentifier{schemaIdentifier.databaseName}) - t.Cleanup(databaseCleanup) - - schema, schemaCleanup := createSchemaWithIdentifier(t, client, database, schemaIdentifier.name) - t.Cleanup(schemaCleanup) - - table, tableCleanup := createTable(t, client, database, schema) - t.Cleanup(tableCleanup) - - stageName := randomAlphanumericN(t, 20) - stage, stageCleanup := createStage(t, client, database, schema, stageName) - t.Cleanup(stageCleanup) - - copyStatement := createPipeCopyStatement(t, table, stage) - - assertPipe := func(t *testing.T, pipeDetails *Pipe, expectedName string, expectedComment string) { - t.Helper() - assert.NotEmpty(t, pipeDetails.CreatedOn) - assert.Equal(t, expectedName, pipeDetails.Name) - assert.Equal(t, database.Name, pipeDetails.DatabaseName) - assert.Equal(t, schema.Name, pipeDetails.SchemaName) - assert.Equal(t, copyStatement, pipeDetails.Definition) - assert.Equal(t, "ACCOUNTADMIN", pipeDetails.Owner) - assert.Empty(t, pipeDetails.NotificationChannel) - assert.Equal(t, expectedComment, pipeDetails.Comment) - assert.Empty(t, pipeDetails.Integration) - assert.Empty(t, pipeDetails.Pattern) - assert.Empty(t, pipeDetails.ErrorIntegration) - assert.Equal(t, "ROLE", pipeDetails.OwnerRoleType) - assert.Empty(t, pipeDetails.InvalidReason) - } - - // TODO: test error integration, aws sns topic and integration when we have them in project - t.Run("test complete case", func(t *testing.T) { - name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) - comment := randomComment(t) - - err := client.Pipes.Create(ctx, id, copyStatement, &CreatePipeOptions{ - OrReplace: Bool(false), - IfNotExists: Bool(true), - AutoIngest: Bool(false), - Comment: String(comment), - }) - require.NoError(t, err) - - pipe, err := client.Pipes.Describe(ctx, id) - - require.NoError(t, err) - assertPipe(t, pipe, name, comment) - }) - - t.Run("test if not exists and or replace are incompatible", func(t *testing.T) { - name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) - - err := client.Pipes.Create(ctx, id, copyStatement, &CreatePipeOptions{ - OrReplace: Bool(true), - IfNotExists: Bool(true), - }) - require.ErrorContains(t, err, "(0A000): SQL compilation error:\noptions IF NOT EXISTS and OR REPLACE are incompatible") - }) - - t.Run("test no options", func(t *testing.T) { - name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) - - err := client.Pipes.Create(ctx, id, copyStatement, nil) - require.NoError(t, err) - - pipe, err := client.Pipes.Describe(ctx, id) - - require.NoError(t, err) - assertPipe(t, pipe, name, "") - }) -} - -func TestInt_PipeDrop(t *testing.T) { - client := testClient(t) - ctx := context.Background() - - schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) - database, databaseCleanup := createDatabaseWithIdentifier(t, client, AccountObjectIdentifier{schemaIdentifier.databaseName}) - t.Cleanup(databaseCleanup) - - schema, schemaCleanup := createSchemaWithIdentifier(t, client, database, schemaIdentifier.name) - t.Cleanup(schemaCleanup) - - table, tableCleanup := createTable(t, client, database, schema) - t.Cleanup(tableCleanup) - - stageName := randomAlphanumericN(t, 20) - stage, stageCleanup := createStage(t, client, database, schema, stageName) - t.Cleanup(stageCleanup) - - t.Run("pipe exists", func(t *testing.T) { - pipeName := randomAlphanumericN(t, 20) - pipeCopyStatement := createPipeCopyStatement(t, table, stage) - pipe, _ := createPipe(t, client, database, schema, pipeName, pipeCopyStatement) - - err := client.Pipes.Drop(ctx, pipe.ID()) - - require.NoError(t, err) - _, err = client.Pipes.Describe(ctx, pipe.ID()) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) - }) - - t.Run("pipe does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(database.Name, database.Name, "does_not_exist") - - err := client.Alerts.Drop(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) - }) -} - -func TestInt_PipeAlter(t *testing.T) { - client := testClient(t) - ctx := context.Background() - - schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) - database, databaseCleanup := createDatabaseWithIdentifier(t, client, AccountObjectIdentifier{schemaIdentifier.databaseName}) - t.Cleanup(databaseCleanup) - - schema, schemaCleanup := createSchemaWithIdentifier(t, client, database, schemaIdentifier.name) - t.Cleanup(schemaCleanup) - - table, tableCleanup := createTable(t, client, database, schema) - t.Cleanup(tableCleanup) - - stageName := randomAlphanumericN(t, 20) - stage, stageCleanup := createStage(t, client, database, schema, stageName) - t.Cleanup(stageCleanup) - - pipeCopyStatement := createPipeCopyStatement(t, table, stage) - - // TODO: test error integration when we have them in project - t.Run("set value and unset value", func(t *testing.T) { - pipeName := randomAlphanumericN(t, 20) - pipe, pipeCleanup := createPipe(t, client, database, schema, pipeName, pipeCopyStatement) - t.Cleanup(pipeCleanup) - - alterOptions := &AlterPipeOptions{ - Set: &PipeSet{ - Comment: String("new comment"), - PipeExecutionPaused: Bool(true), - }, - } - - err := client.Pipes.Alter(ctx, pipe.ID(), alterOptions) - require.NoError(t, err) - - alteredPipe, err := client.Pipes.ShowByID(ctx, pipe.ID()) - require.NoError(t, err) - - assert.Equal(t, "new comment", alteredPipe.Comment) - - alterOptions = &AlterPipeOptions{ - Unset: &PipeUnset{ - Comment: Bool(true), - PipeExecutionPaused: Bool(true), - }, - } - - err = client.Pipes.Alter(ctx, pipe.ID(), alterOptions) - require.NoError(t, err) - - alteredPipe, err = client.Pipes.ShowByID(ctx, pipe.ID()) - require.NoError(t, err) - - assert.Equal(t, "", alteredPipe.Comment) - }) - - t.Run("set and unset tag", func(t *testing.T) { - tag, tagCleanup := createTag(t, client, database, schema) - t.Cleanup(tagCleanup) - - pipeName := randomAlphanumericN(t, 20) - pipe, pipeCleanup := createPipe(t, client, database, schema, pipeName, pipeCopyStatement) - t.Cleanup(pipeCleanup) - - tagValue := "abc" - alterOptions := &AlterPipeOptions{ - SetTags: &PipeSetTags{ - Tag: []TagAssociation{ - { - Name: tag.ID(), - Value: tagValue, - }, - }, - }, - } - - err := client.Pipes.Alter(ctx, pipe.ID(), alterOptions) - require.NoError(t, err) - - returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), pipe.ID(), ObjectTypePipe) - require.NoError(t, err) - - assert.Equal(t, tagValue, returnedTagValue) - - alterOptions = &AlterPipeOptions{ - UnsetTags: &PipeUnsetTags{ - Tag: []ObjectIdentifier{ - tag.ID(), - }, - }, - } - - err = client.Pipes.Alter(ctx, pipe.ID(), alterOptions) - require.NoError(t, err) - - _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), pipe.ID(), ObjectTypePipe) - assert.Error(t, err) - }) - - t.Run("refresh with all", func(t *testing.T) { - pipeName := randomAlphanumericN(t, 20) - pipe, pipeCleanup := createPipe(t, client, database, schema, pipeName, pipeCopyStatement) - t.Cleanup(pipeCleanup) - - alterOptions := &AlterPipeOptions{ - Refresh: &PipeRefresh{ - Prefix: String("/d1"), - ModifiedAfter: String("2018-07-30T13:56:46-07:00"), - }, - } - - err := client.Pipes.Alter(ctx, pipe.ID(), alterOptions) - require.NoError(t, err) - }) -} diff --git a/pkg/sdk/random.go b/pkg/sdk/random.go new file mode 100644 index 0000000000..2bb6205228 --- /dev/null +++ b/pkg/sdk/random.go @@ -0,0 +1,77 @@ +package sdk + +import ( + "testing" + + "github.com/brianvoe/gofakeit/v6" + "github.com/hashicorp/go-uuid" + "github.com/stretchr/testify/require" +) + +func randomUUID(t *testing.T) string { + t.Helper() + v, err := uuid.GenerateUUID() + require.NoError(t, err) + return v +} + +func randomComment(t *testing.T) string { + t.Helper() + return gofakeit.Sentence(10) +} + +func randomBool(t *testing.T) bool { + t.Helper() + return gofakeit.Bool() +} + +func randomString(t *testing.T) string { + t.Helper() + return gofakeit.Password(true, true, true, true, false, 28) +} + +func randomStringN(t *testing.T, num int) string { + t.Helper() + return gofakeit.Password(true, true, true, true, false, num) +} + +func randomAlphanumericN(t *testing.T, num int) string { + t.Helper() + return gofakeit.Password(true, true, true, false, false, num) +} + +func randomStringRange(t *testing.T, min, max int) string { + t.Helper() + if min > max { + t.Errorf("min %d is greater than max %d", min, max) + } + return gofakeit.Password(true, true, true, true, false, randomIntRange(t, min, max)) +} + +func randomIntRange(t *testing.T, min, max int) int { + t.Helper() + if min > max { + t.Errorf("min %d is greater than max %d", min, max) + } + return gofakeit.IntRange(min, max) +} + +func randomSchemaObjectIdentifier(t *testing.T) SchemaObjectIdentifier { + t.Helper() + return NewSchemaObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12), randomStringN(t, 12)) +} + +func randomDatabaseObjectIdentifier(t *testing.T) DatabaseObjectIdentifier { + t.Helper() + return NewDatabaseObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12)) +} + +func alphanumericDatabaseObjectIdentifier(t *testing.T) DatabaseObjectIdentifier { + t.Helper() + return NewDatabaseObjectIdentifier(randomAlphanumericN(t, 12), randomAlphanumericN(t, 12)) +} + +func randomAccountObjectIdentifier(t *testing.T) AccountObjectIdentifier { + t.Helper() + return NewAccountObjectIdentifier(randomStringN(t, 12)) +} diff --git a/pkg/sdk/accounts_integration_test.go b/pkg/sdk/testint/accounts_integration_test.go similarity index 61% rename from pkg/sdk/accounts_integration_test.go rename to pkg/sdk/testint/accounts_integration_test.go index e14a0870ec..dfed16a8ba 100644 --- a/pkg/sdk/accounts_integration_test.go +++ b/pkg/sdk/testint/accounts_integration_test.go @@ -1,13 +1,13 @@ -package sdk +package testint import ( - "context" "fmt" "log" "strings" "testing" "time" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/avast/retry-go" "github.com/brianvoe/gofakeit/v6" "github.com/stretchr/testify/assert" @@ -16,17 +16,17 @@ import ( func TestInt_AccountShow(t *testing.T) { client := testClient(t) - ctx := context.Background() - ok, err := client.ContextFunctions.IsRoleInSession(ctx, NewAccountObjectIdentifier("ORGADMIN")) + ctx := testContext(t) + ok, err := client.ContextFunctions.IsRoleInSession(ctx, sdk.NewAccountObjectIdentifier("ORGADMIN")) require.NoError(t, err) if !ok { t.Skip("ORGADMIN role is not in current session") } currentAccount, err := client.ContextFunctions.CurrentAccount(ctx) require.NoError(t, err) - opts := &ShowAccountOptions{ - Like: &Like{ - Pattern: String(currentAccount), + opts := &sdk.ShowAccountOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(currentAccount), }, } accounts, err := client.Accounts.Show(ctx, opts) @@ -38,45 +38,45 @@ func TestInt_AccountShow(t *testing.T) { func TestInt_AccountShowByID(t *testing.T) { client := testClient(t) - ctx := context.Background() - ok, err := client.ContextFunctions.IsRoleInSession(ctx, NewAccountObjectIdentifier("ORGADMIN")) + ctx := testContext(t) + ok, err := client.ContextFunctions.IsRoleInSession(ctx, sdk.NewAccountObjectIdentifier("ORGADMIN")) require.NoError(t, err) if !ok { t.Skip("ORGADMIN role is not in current session") } require.NoError(t, err) - _, err = client.Accounts.ShowByID(ctx, NewAccountObjectIdentifier("NOT_EXISTING_ACCOUNT")) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + _, err = client.Accounts.ShowByID(ctx, sdk.NewAccountObjectIdentifier("NOT_EXISTING_ACCOUNT")) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) } func TestInt_AccountCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() - ok, err := client.ContextFunctions.IsRoleInSession(ctx, NewAccountObjectIdentifier("ORGADMIN")) + ctx := testContext(t) + ok, err := client.ContextFunctions.IsRoleInSession(ctx, sdk.NewAccountObjectIdentifier("ORGADMIN")) require.NoError(t, err) if !ok { t.Skip("ORGADMIN role is not in current session") } t.Run("complete case", func(t *testing.T) { - accountID := NewAccountObjectIdentifier("TF_" + strings.ToUpper(gofakeit.Fruit()) + "_" + fmt.Sprintf("%d", (randomIntRange(t, 100, 999)))) + accountID := sdk.NewAccountObjectIdentifier("TF_" + strings.ToUpper(gofakeit.Fruit()) + "_" + fmt.Sprintf("%d", randomIntRange(t, 100, 999))) region, err := client.ContextFunctions.CurrentRegion(ctx) require.NoError(t, err) - opts := &CreateAccountOptions{ + opts := &sdk.CreateAccountOptions{ AdminName: "someadmin", - AdminPassword: String(randomStringN(t, 12)), - FirstName: String("Ad"), - LastName: String("Min"), + AdminPassword: sdk.String(randomStringN(t, 12)), + FirstName: sdk.String("Ad"), + LastName: sdk.String("Min"), Email: "admin@example.com", - MustChangePassword: Bool(false), - Edition: EditionBusinessCritical, - Comment: String("Please delete me!"), - Region: String(region), + MustChangePassword: sdk.Bool(false), + Edition: sdk.EditionBusinessCritical, + Comment: sdk.String("Please delete me!"), + Region: sdk.String(region), } err = client.Accounts.Create(ctx, accountID, opts) require.NoError(t, err) - var account *Account + var account *sdk.Account err = retry.Do( func() error { account, err = client.Accounts.ShowByID(ctx, accountID) @@ -90,17 +90,17 @@ func TestInt_AccountCreate(t *testing.T) { ) require.NoError(t, err) assert.Equal(t, accountID.Name(), account.AccountName) - assert.Equal(t, EditionBusinessCritical, account.Edition) + assert.Equal(t, sdk.EditionBusinessCritical, account.Edition) assert.Equal(t, "Please delete me!", account.Comment) assert.Equal(t, region, account.SnowflakeRegion) // rename - newAccountID := NewAccountObjectIdentifier("TF_" + strings.ToUpper(gofakeit.Animal()) + "_" + fmt.Sprintf("%d", (randomIntRange(t, 100, 999)))) - alterOpts := &AlterAccountOptions{ - Rename: &AccountRename{ + newAccountID := sdk.NewAccountObjectIdentifier("TF_" + strings.ToUpper(gofakeit.Animal()) + "_" + fmt.Sprintf("%d", randomIntRange(t, 100, 999))) + alterOpts := &sdk.AlterAccountOptions{ + Rename: &sdk.AccountRename{ Name: accountID, NewName: newAccountID, - SaveOldURL: Bool(true), + SaveOldURL: sdk.Bool(true), }, } err = client.Accounts.Alter(ctx, alterOpts) @@ -121,10 +121,10 @@ func TestInt_AccountCreate(t *testing.T) { assert.Equal(t, newAccountID.Name(), account.AccountName) // drop old url - alterOpts = &AlterAccountOptions{ - Drop: &AccountDrop{ + alterOpts = &sdk.AlterAccountOptions{ + Drop: &sdk.AccountDrop{ Name: newAccountID, - OldURL: Bool(true), + OldURL: sdk.Bool(true), }, } err = client.Accounts.Alter(ctx, alterOpts) @@ -133,8 +133,8 @@ func TestInt_AccountCreate(t *testing.T) { require.NoError(t, err) // drop account - err = client.Accounts.Drop(ctx, newAccountID, 3, &DropAccountOptions{ - IfExists: Bool(true), + err = client.Accounts.Drop(ctx, newAccountID, 3, &sdk.DropAccountOptions{ + IfExists: sdk.Bool(true), }) require.NoError(t, err) @@ -162,56 +162,56 @@ func TestInt_AccountCreate(t *testing.T) { func TestInt_AccountAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() - ok, err := client.ContextFunctions.IsRoleInSession(ctx, NewAccountObjectIdentifier("ACCOUNTADMIN")) + ctx := testContext(t) + ok, err := client.ContextFunctions.IsRoleInSession(ctx, sdk.NewAccountObjectIdentifier("ACCOUNTADMIN")) require.NoError(t, err) if !ok { t.Skip("ACCOUNTADMIN role is not in current session") } t.Run("set and unset params", func(t *testing.T) { - opts := &AlterAccountOptions{ - Set: &AccountSet{ - Parameters: &AccountLevelParameters{ - AccountParameters: &AccountParameters{ - ClientEncryptionKeySize: Int(128), - PreventUnloadToInternalStages: Bool(true), + opts := &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ + Parameters: &sdk.AccountLevelParameters{ + AccountParameters: &sdk.AccountParameters{ + ClientEncryptionKeySize: sdk.Int(128), + PreventUnloadToInternalStages: sdk.Bool(true), }, - SessionParameters: &SessionParameters{ - JSONIndent: Int(16), + SessionParameters: &sdk.SessionParameters{ + JSONIndent: sdk.Int(16), }, - ObjectParameters: &ObjectParameters{ - MaxDataExtensionTimeInDays: Int(30), + ObjectParameters: &sdk.ObjectParameters{ + MaxDataExtensionTimeInDays: sdk.Int(30), }, }, }, } err := client.Accounts.Alter(ctx, opts) require.NoError(t, err) - p, err := client.Parameters.ShowAccountParameter(ctx, AccountParameterClientEncryptionKeySize) + p, err := client.Parameters.ShowAccountParameter(ctx, sdk.AccountParameterClientEncryptionKeySize) require.NoError(t, err) - assert.Equal(t, 128, toInt(p.Value)) - p, err = client.Parameters.ShowAccountParameter(ctx, AccountParameterPreventUnloadToInternalStages) + assert.Equal(t, 128, sdk.ToInt(p.Value)) + p, err = client.Parameters.ShowAccountParameter(ctx, sdk.AccountParameterPreventUnloadToInternalStages) require.NoError(t, err) - assert.Equal(t, true, toBool(p.Value)) - p, err = client.Parameters.ShowAccountParameter(ctx, AccountParameterJSONIndent) + assert.Equal(t, true, sdk.ToBool(p.Value)) + p, err = client.Parameters.ShowAccountParameter(ctx, sdk.AccountParameterJSONIndent) require.NoError(t, err) - assert.Equal(t, 16, toInt(p.Value)) - p, err = client.Parameters.ShowAccountParameter(ctx, AccountParameterMaxDataExtensionTimeInDays) + assert.Equal(t, 16, sdk.ToInt(p.Value)) + p, err = client.Parameters.ShowAccountParameter(ctx, sdk.AccountParameterMaxDataExtensionTimeInDays) require.NoError(t, err) - assert.Equal(t, 30, toInt(p.Value)) + assert.Equal(t, 30, sdk.ToInt(p.Value)) - opts = &AlterAccountOptions{ - Unset: &AccountUnset{ - Parameters: &AccountLevelParametersUnset{ - AccountParameters: &AccountParametersUnset{ - ClientEncryptionKeySize: Bool(true), - PreventUnloadToInternalStages: Bool(true), + opts = &sdk.AlterAccountOptions{ + Unset: &sdk.AccountUnset{ + Parameters: &sdk.AccountLevelParametersUnset{ + AccountParameters: &sdk.AccountParametersUnset{ + ClientEncryptionKeySize: sdk.Bool(true), + PreventUnloadToInternalStages: sdk.Bool(true), }, - SessionParameters: &SessionParametersUnset{ - JSONIndent: Bool(true), + SessionParameters: &sdk.SessionParametersUnset{ + JSONIndent: sdk.Bool(true), }, - ObjectParameters: &ObjectParametersUnset{ - MaxDataExtensionTimeInDays: Bool(true), + ObjectParameters: &sdk.ObjectParametersUnset{ + MaxDataExtensionTimeInDays: sdk.Bool(true), }, }, }, @@ -223,8 +223,8 @@ func TestInt_AccountAlter(t *testing.T) { t.Run("set resource monitor", func(t *testing.T) { resourceMonitorTest, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) - opts := &AlterAccountOptions{ - Set: &AccountSet{ + opts := &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ ResourceMonitor: resourceMonitorTest.ID(), }, } @@ -239,8 +239,8 @@ func TestInt_AccountAlter(t *testing.T) { t.Cleanup(schemaCleanup) passwordPolicyTest, passwordPolicyCleanup := createPasswordPolicy(t, client, databaseTest, schemaTest) t.Cleanup(passwordPolicyCleanup) - opts := &AlterAccountOptions{ - Set: &AccountSet{ + opts := &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ PasswordPolicy: passwordPolicyTest.ID(), }, } @@ -248,9 +248,9 @@ func TestInt_AccountAlter(t *testing.T) { require.NoError(t, err) // now unset - opts = &AlterAccountOptions{ - Unset: &AccountUnset{ - PasswordPolicy: Bool(true), + opts = &sdk.AlterAccountOptions{ + Unset: &sdk.AccountUnset{ + PasswordPolicy: sdk.Bool(true), }, } err = client.Accounts.Alter(ctx, opts) @@ -264,8 +264,8 @@ func TestInt_AccountAlter(t *testing.T) { t.Cleanup(schemaCleanup) sessionPolicyTest, sessionPolicyCleanup := createSessionPolicy(t, client, databaseTest, schemaTest) t.Cleanup(sessionPolicyCleanup) - opts := &AlterAccountOptions{ - Set: &AccountSet{ + opts := &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ SessionPolicy: sessionPolicyTest.ID(), }, } @@ -273,9 +273,9 @@ func TestInt_AccountAlter(t *testing.T) { require.NoError(t, err) // now unset - opts = &AlterAccountOptions{ - Unset: &AccountUnset{ - SessionPolicy: Bool(true), + opts = &sdk.AlterAccountOptions{ + Unset: &sdk.AccountUnset{ + SessionPolicy: sdk.Bool(true), }, } err = client.Accounts.Alter(ctx, opts) @@ -292,9 +292,9 @@ func TestInt_AccountAlter(t *testing.T) { tagTest2, tagCleanup2 := createTag(t, client, databaseTest, schemaTest) t.Cleanup(tagCleanup2) - opts := &AlterAccountOptions{ - Set: &AccountSet{ - Tag: []TagAssociation{ + opts := &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ + Tag: []sdk.TagAssociation{ { Name: tagTest1.ID(), Value: "abc", @@ -310,10 +310,10 @@ func TestInt_AccountAlter(t *testing.T) { require.NoError(t, err) currentAccount, err := client.ContextFunctions.CurrentAccount(ctx) require.NoError(t, err) - tagValue, err := client.SystemFunctions.GetTag(ctx, tagTest1.ID(), NewAccountObjectIdentifier(currentAccount), ObjectTypeAccount) + tagValue, err := client.SystemFunctions.GetTag(ctx, tagTest1.ID(), sdk.NewAccountObjectIdentifier(currentAccount), sdk.ObjectTypeAccount) require.NoError(t, err) assert.Equal(t, "abc", tagValue) - tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), NewAccountObjectIdentifier(currentAccount), ObjectTypeAccount) + tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), sdk.NewAccountObjectIdentifier(currentAccount), sdk.ObjectTypeAccount) require.NoError(t, err) assert.Equal(t, "123", tagValue) }) diff --git a/pkg/sdk/alerts_integration_test.go b/pkg/sdk/testint/alerts_integration_test.go similarity index 74% rename from pkg/sdk/alerts_integration_test.go rename to pkg/sdk/testint/alerts_integration_test.go index fca3720703..a696d03cb5 100644 --- a/pkg/sdk/alerts_integration_test.go +++ b/pkg/sdk/testint/alerts_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "strings" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_AlertsShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -35,8 +35,8 @@ func TestInt_AlertsShow(t *testing.T) { }) t.Run("with show options", func(t *testing.T) { - showOptions := &ShowAlertOptions{ - In: &In{ + showOptions := &sdk.ShowAlertOptions{ + In: &sdk.In{ Schema: schemaTest.ID(), }, } @@ -48,11 +48,11 @@ func TestInt_AlertsShow(t *testing.T) { }) t.Run("with show options and like", func(t *testing.T) { - showOptions := &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alertTest.Name), + showOptions := &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alertTest.Name), }, - In: &In{ + In: &sdk.In{ Database: databaseTest.ID(), }, } @@ -63,9 +63,9 @@ func TestInt_AlertsShow(t *testing.T) { }) t.Run("when searching a non-existent alert", func(t *testing.T) { - showOptions := &ShowAlertOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } alerts, err := client.Alerts.Show(ctx, showOptions) @@ -74,11 +74,11 @@ func TestInt_AlertsShow(t *testing.T) { }) t.Run("when limiting the number of results", func(t *testing.T) { - showOptions := &ShowAlertOptions{ - In: &In{ + showOptions := &sdk.ShowAlertOptions{ + In: &sdk.In{ Schema: schemaTest.ID(), }, - Limit: Int(1), + Limit: sdk.Int(1), } alerts, err := client.Alerts.Show(ctx, showOptions) require.NoError(t, err) @@ -88,7 +88,7 @@ func TestInt_AlertsShow(t *testing.T) { func TestInt_AlertCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -104,11 +104,11 @@ func TestInt_AlertCreate(t *testing.T) { condition := "SELECT 1" action := "SELECT 1" comment := randomComment(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, &CreateAlertOptions{ - OrReplace: Bool(true), - IfNotExists: Bool(false), - Comment: String(comment), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, &sdk.CreateAlertOptions{ + OrReplace: sdk.Bool(true), + IfNotExists: sdk.Bool(false), + Comment: sdk.String(comment), }) require.NoError(t, err) alertDetails, err := client.Alerts.Describe(ctx, id) @@ -120,11 +120,11 @@ func TestInt_AlertCreate(t *testing.T) { assert.Equal(t, condition, alertDetails.Condition) assert.Equal(t, action, alertDetails.Action) - alert, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(name), + alert, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -140,11 +140,11 @@ func TestInt_AlertCreate(t *testing.T) { condition := "SELECT 1" action := "SELECT 1" comment := randomComment(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, &CreateAlertOptions{ - OrReplace: Bool(false), - IfNotExists: Bool(true), - Comment: String(comment), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, &sdk.CreateAlertOptions{ + OrReplace: sdk.Bool(false), + IfNotExists: sdk.Bool(true), + Comment: sdk.String(comment), }) require.NoError(t, err) alertDetails, err := client.Alerts.Describe(ctx, id) @@ -156,11 +156,11 @@ func TestInt_AlertCreate(t *testing.T) { assert.Equal(t, condition, alertDetails.Condition) assert.Equal(t, action, alertDetails.Action) - alert, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(name), + alert, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -175,7 +175,7 @@ func TestInt_AlertCreate(t *testing.T) { schedule := "USING CRON * * * * TUE,THU UTC" condition := "SELECT 1" action := "SELECT 1" - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, nil) require.NoError(t, err) alertDetails, err := client.Alerts.Describe(ctx, id) @@ -186,11 +186,11 @@ func TestInt_AlertCreate(t *testing.T) { assert.Equal(t, condition, alertDetails.Condition) assert.Equal(t, action, alertDetails.Action) - alert, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(name), + alert, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -213,7 +213,7 @@ func TestInt_AlertCreate(t *testing.T) { 2 end ` - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) err := client.Alerts.Create(ctx, id, testWarehouse.ID(), schedule, condition, action, nil) require.NoError(t, err) alertDetails, err := client.Alerts.Describe(ctx, id) @@ -224,11 +224,11 @@ func TestInt_AlertCreate(t *testing.T) { assert.Equal(t, condition, alertDetails.Condition) assert.Equal(t, strings.TrimSpace(action), alertDetails.Action) - alert, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(name), + alert, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -241,7 +241,7 @@ func TestInt_AlertCreate(t *testing.T) { func TestInt_AlertDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -262,15 +262,15 @@ func TestInt_AlertDescribe(t *testing.T) { }) t.Run("when alert does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") _, err := client.Alerts.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_AlertAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -286,19 +286,19 @@ func TestInt_AlertAlter(t *testing.T) { t.Cleanup(alertCleanup) newSchedule := "USING CRON * * * * TUE,FRI GMT" - alterOptions := &AlterAlertOptions{ - Set: &AlertSet{ + alterOptions := &sdk.AlterAlertOptions{ + Set: &sdk.AlertSet{ Schedule: &newSchedule, }, } err := client.Alerts.Alter(ctx, alert.ID(), alterOptions) require.NoError(t, err) - alerts, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alert.Name), + alerts, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alert.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -312,17 +312,17 @@ func TestInt_AlertAlter(t *testing.T) { t.Cleanup(alertCleanup) newCondition := "select * from DUAL where false" - alterOptions := &AlterAlertOptions{ + alterOptions := &sdk.AlterAlertOptions{ ModifyCondition: &[]string{newCondition}, } err := client.Alerts.Alter(ctx, alert.ID(), alterOptions) require.NoError(t, err) - alerts, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alert.Name), + alerts, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alert.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -332,17 +332,17 @@ func TestInt_AlertAlter(t *testing.T) { newAction := "create table FOO(ID INT)" - alterOptions = &AlterAlertOptions{ + alterOptions = &sdk.AlterAlertOptions{ ModifyAction: &newAction, } err = client.Alerts.Alter(ctx, alert.ID(), alterOptions) require.NoError(t, err) - alerts, err = client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alert.Name), + alerts, err = client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alert.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -355,47 +355,47 @@ func TestInt_AlertAlter(t *testing.T) { alert, alertCleanup := createAlert(t, client, databaseTest, schemaTest, warehouseTest) t.Cleanup(alertCleanup) - alterOptions := &AlterAlertOptions{ - Action: &AlertActionResume, + alterOptions := &sdk.AlterAlertOptions{ + Action: &sdk.AlertActionResume, } err := client.Alerts.Alter(ctx, alert.ID(), alterOptions) require.NoError(t, err) - alerts, err := client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alert.Name), + alerts, err := client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alert.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(alerts)) - assert.True(t, alerts[0].State == AlertStateStarted) + assert.True(t, alerts[0].State == sdk.AlertStateStarted) - alterOptions = &AlterAlertOptions{ - Action: &AlertActionSuspend, + alterOptions = &sdk.AlterAlertOptions{ + Action: &sdk.AlertActionSuspend, } err = client.Alerts.Alter(ctx, alert.ID(), alterOptions) require.NoError(t, err) - alerts, err = client.Alerts.Show(ctx, &ShowAlertOptions{ - Like: &Like{ - Pattern: String(alert.Name), + alerts, err = client.Alerts.Show(ctx, &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(alert.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(alerts)) - assert.True(t, alerts[0].State == AlertStateSuspended) + assert.True(t, alerts[0].State == sdk.AlertStateSuspended) }) } func TestInt_AlertDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -412,12 +412,12 @@ func TestInt_AlertDrop(t *testing.T) { err := client.Alerts.Drop(ctx, id) require.NoError(t, err) _, err = client.PasswordPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when alert does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") err := client.Alerts.Drop(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/comments_integration_test.go b/pkg/sdk/testint/comments_integration_test.go similarity index 80% rename from pkg/sdk/comments_integration_test.go rename to pkg/sdk/testint/comments_integration_test.go index 8e58c70fcb..9f85718a68 100644 --- a/pkg/sdk/comments_integration_test.go +++ b/pkg/sdk/testint/comments_integration_test.go @@ -1,26 +1,26 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_Comment(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) testWarehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) t.Run("set", func(t *testing.T) { comment := randomComment(t) - err := client.Comments.Set(ctx, &SetCommentOptions{ - ObjectType: ObjectTypeWarehouse, + err := client.Comments.Set(ctx, &sdk.SetCommentOptions{ + ObjectType: sdk.ObjectTypeWarehouse, ObjectName: testWarehouse.ID(), - Value: String(comment), + Value: sdk.String(comment), }) require.NoError(t, err) wh, err := client.Warehouses.ShowByID(ctx, testWarehouse.ID()) diff --git a/pkg/sdk/context_functions_integration_test.go b/pkg/sdk/testint/context_functions_integration_test.go similarity index 78% rename from pkg/sdk/context_functions_integration_test.go rename to pkg/sdk/testint/context_functions_integration_test.go index 958de09544..8d025a38ef 100644 --- a/pkg/sdk/context_functions_integration_test.go +++ b/pkg/sdk/testint/context_functions_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_CurrentAccount(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) account, err := client.ContextFunctions.CurrentAccount(ctx) require.NoError(t, err) @@ -19,7 +19,7 @@ func TestInt_CurrentAccount(t *testing.T) { func TestInt_CurrentRole(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) role, err := client.ContextFunctions.CurrentRole(ctx) require.NoError(t, err) assert.NotEmpty(t, role) @@ -27,7 +27,7 @@ func TestInt_CurrentRole(t *testing.T) { func TestInt_CurrentRegion(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) region, err := client.ContextFunctions.CurrentRegion(ctx) require.NoError(t, err) assert.NotEmpty(t, region) @@ -35,7 +35,7 @@ func TestInt_CurrentRegion(t *testing.T) { func TestInt_CurrentSession(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) session, err := client.ContextFunctions.CurrentSession(ctx) require.NoError(t, err) assert.NotEmpty(t, session) @@ -43,7 +43,7 @@ func TestInt_CurrentSession(t *testing.T) { func TestInt_CurrentUser(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) user, err := client.ContextFunctions.CurrentUser(ctx) require.NoError(t, err) assert.NotEmpty(t, user) @@ -51,7 +51,7 @@ func TestInt_CurrentUser(t *testing.T) { func TestInt_CurrentDatabase(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) err := client.Sessions.UseDatabase(ctx, databaseTest.ID()) @@ -63,7 +63,7 @@ func TestInt_CurrentDatabase(t *testing.T) { func TestInt_CurrentSchema(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -78,7 +78,7 @@ func TestInt_CurrentSchema(t *testing.T) { func TestInt_CurrentWarehouse(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) warehouseTest, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) @@ -91,26 +91,26 @@ func TestInt_CurrentWarehouse(t *testing.T) { func TestInt_IsRoleInSession(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) currentRole, err := client.ContextFunctions.CurrentRole(ctx) require.NoError(t, err) - role, err := client.ContextFunctions.IsRoleInSession(ctx, NewAccountObjectIdentifier(currentRole)) + role, err := client.ContextFunctions.IsRoleInSession(ctx, sdk.NewAccountObjectIdentifier(currentRole)) require.NoError(t, err) assert.True(t, role) } func TestInt_RolesUse(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) currentRole, err := client.ContextFunctions.CurrentRole(ctx) - currentRoleID := NewAccountObjectIdentifier(currentRole) + currentRoleID := sdk.NewAccountObjectIdentifier(currentRole) require.NoError(t, err) role, cleanup := createRole(t, client) t.Cleanup(cleanup) require.NotEqual(t, currentRole, role.Name) - err = client.Roles.Grant(ctx, NewGrantRoleRequest(role.ID(), GrantRole{Role: ¤tRoleID})) + err = client.Roles.Grant(ctx, sdk.NewGrantRoleRequest(role.ID(), sdk.GrantRole{Role: ¤tRoleID})) require.NoError(t, err) err = client.Sessions.UseRole(ctx, role.ID()) @@ -127,7 +127,7 @@ func TestInt_RolesUse(t *testing.T) { func TestInt_RolesUseSecondaryRoles(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) currentRole, err := client.ContextFunctions.CurrentRole(ctx) require.NoError(t, err) @@ -137,15 +137,15 @@ func TestInt_RolesUseSecondaryRoles(t *testing.T) { user, err := client.ContextFunctions.CurrentUser(ctx) require.NoError(t, err) - userID := NewAccountObjectIdentifier(user) + userID := sdk.NewAccountObjectIdentifier(user) - err = client.Roles.Grant(ctx, NewGrantRoleRequest(role.ID(), GrantRole{User: &userID})) + err = client.Roles.Grant(ctx, sdk.NewGrantRoleRequest(role.ID(), sdk.GrantRole{User: &userID})) require.NoError(t, err) err = client.Sessions.UseRole(ctx, role.ID()) require.NoError(t, err) - err = client.Sessions.UseSecondaryRoles(ctx, SecondaryRolesAll) + err = client.Sessions.UseSecondaryRoles(ctx, sdk.SecondaryRolesAll) require.NoError(t, err) r, err := client.ContextFunctions.CurrentSecondaryRoles(ctx) @@ -155,20 +155,20 @@ func TestInt_RolesUseSecondaryRoles(t *testing.T) { for i, v := range r.Roles { names[i] = v.Name() } - assert.Equal(t, SecondaryRolesAll, r.Value) + assert.Equal(t, sdk.SecondaryRolesAll, r.Value) assert.Contains(t, names, currentRole) - err = client.Sessions.UseSecondaryRoles(ctx, SecondaryRolesNone) + err = client.Sessions.UseSecondaryRoles(ctx, sdk.SecondaryRolesNone) require.NoError(t, err) secondaryRolesAfter, err := client.ContextFunctions.CurrentSecondaryRoles(ctx) require.NoError(t, err) - assert.Equal(t, SecondaryRolesNone, secondaryRolesAfter.Value) + assert.Equal(t, sdk.SecondaryRolesNone, secondaryRolesAfter.Value) assert.Equal(t, 0, len(secondaryRolesAfter.Roles)) t.Cleanup(func() { - err = client.Sessions.UseRole(ctx, NewAccountObjectIdentifier(currentRole)) + err = client.Sessions.UseRole(ctx, sdk.NewAccountObjectIdentifier(currentRole)) require.NoError(t, err) }) } diff --git a/pkg/sdk/testint/conversion_functions_integration_test.go b/pkg/sdk/testint/conversion_functions_integration_test.go new file mode 100644 index 0000000000..7192a94160 --- /dev/null +++ b/pkg/sdk/testint/conversion_functions_integration_test.go @@ -0,0 +1,85 @@ +package testint + +import ( + "testing" + "time" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestInt_ToTimestampLTZ(t *testing.T) { + client := testClient(t) + ctx := testContext(t) + err := client.Accounts.Alter(ctx, &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ + Parameters: &sdk.AccountLevelParameters{ + SessionParameters: &sdk.SessionParameters{ + TimestampTypeMapping: sdk.String("TIMESTAMP_LTZ"), + Timezone: sdk.String("UTC"), + }, + }, + }, + }) + require.NoError(t, err) + t.Cleanup(func() { + err := client.Accounts.Alter(ctx, &sdk.AlterAccountOptions{ + Unset: &sdk.AccountUnset{ + Parameters: &sdk.AccountLevelParametersUnset{ + SessionParameters: &sdk.SessionParametersUnset{ + TimestampTypeMapping: sdk.Bool(true), + Timezone: sdk.Bool(true), + }, + }, + }, + }) + require.NoError(t, err) + }) + warehouseTest, warehouseCleanup := createWarehouse(t, client) + t.Cleanup(warehouseCleanup) + err = client.Sessions.UseWarehouse(ctx, warehouseTest.ID()) + require.NoError(t, err) + now := time.Now() + actual, err := client.ConversionFunctions.ToTimestampLTZ(ctx, now) + require.NoError(t, err) + expected := now.UTC() + assert.Equal(t, expected, actual) +} + +func TestInt_ToTimestampNTZ(t *testing.T) { + client := testClient(t) + ctx := testContext(t) + err := client.Accounts.Alter(ctx, &sdk.AlterAccountOptions{ + Set: &sdk.AccountSet{ + Parameters: &sdk.AccountLevelParameters{ + SessionParameters: &sdk.SessionParameters{ + TimestampTypeMapping: sdk.String("TIMESTAMP_NTZ"), + Timezone: sdk.String("UTC"), + }, + }, + }, + }) + require.NoError(t, err) + t.Cleanup(func() { + err := client.Accounts.Alter(ctx, &sdk.AlterAccountOptions{ + Unset: &sdk.AccountUnset{ + Parameters: &sdk.AccountLevelParametersUnset{ + SessionParameters: &sdk.SessionParametersUnset{ + TimestampTypeMapping: sdk.Bool(true), + Timezone: sdk.Bool(true), + }, + }, + }, + }) + require.NoError(t, err) + }) + warehouseTest, warehouseCleanup := createWarehouse(t, client) + t.Cleanup(warehouseCleanup) + err = client.Sessions.UseWarehouse(ctx, warehouseTest.ID()) + require.NoError(t, err) + now := time.Now() + actual, err := client.ConversionFunctions.ToTimestampNTZ(ctx, now) + require.NoError(t, err) + assert.Equal(t, time.UTC, actual.Location()) +} diff --git a/pkg/sdk/database_role_integration_test.go b/pkg/sdk/testint/database_role_integration_test.go similarity index 64% rename from pkg/sdk/database_role_integration_test.go rename to pkg/sdk/testint/database_role_integration_test.go index 265524608f..449dce8eff 100644 --- a/pkg/sdk/database_role_integration_test.go +++ b/pkg/sdk/testint/database_role_integration_test.go @@ -1,21 +1,21 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_DatabaseRoles(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - assertDatabaseRole := func(t *testing.T, databaseRole *DatabaseRole, expectedName string, expectedComment string) { + assertDatabaseRole := func(t *testing.T, databaseRole *sdk.DatabaseRole, expectedName string, expectedComment string) { t.Helper() assert.NotEmpty(t, databaseRole.CreatedOn) assert.Equal(t, expectedName, databaseRole.Name) @@ -26,19 +26,19 @@ func TestInt_DatabaseRoles(t *testing.T) { assert.Equal(t, 0, databaseRole.GrantedDatabaseRoles) } - cleanupDatabaseRoleProvider := func(id DatabaseObjectIdentifier) func() { + cleanupDatabaseRoleProvider := func(id sdk.DatabaseObjectIdentifier) func() { return func() { - err := client.DatabaseRoles.Drop(ctx, NewDropDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Drop(ctx, sdk.NewDropDatabaseRoleRequest(id)) require.NoError(t, err) } } - createDatabaseRole := func(t *testing.T) *DatabaseRole { + createDatabaseRole := func(t *testing.T) *sdk.DatabaseRole { t.Helper() name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) t.Cleanup(cleanupDatabaseRoleProvider(id)) @@ -50,10 +50,10 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Run("create database_role: complete case", func(t *testing.T) { name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) comment := randomComment(t) - request := NewCreateDatabaseRoleRequest(id).WithComment(&comment).WithIfNotExists(true) + request := sdk.NewCreateDatabaseRoleRequest(id).WithComment(&comment).WithIfNotExists(true) err := client.DatabaseRoles.Create(ctx, request) require.NoError(t, err) t.Cleanup(cleanupDatabaseRoleProvider(id)) @@ -66,9 +66,9 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Run("create database_role: no optionals", func(t *testing.T) { name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) t.Cleanup(cleanupDatabaseRoleProvider(id)) @@ -80,34 +80,34 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Run("drop database_role: existing", func(t *testing.T) { name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) - err = client.DatabaseRoles.Drop(ctx, NewDropDatabaseRoleRequest(id)) + err = client.DatabaseRoles.Drop(ctx, sdk.NewDropDatabaseRoleRequest(id)) require.NoError(t, err) _, err = client.DatabaseRoles.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("drop database_role: non-existing", func(t *testing.T) { - id := NewDatabaseObjectIdentifier(database.Name, "does_not_exist") + id := sdk.NewDatabaseObjectIdentifier(database.Name, "does_not_exist") - err := client.DatabaseRoles.Drop(ctx, NewDropDatabaseRoleRequest(id)) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + err := client.DatabaseRoles.Drop(ctx, sdk.NewDropDatabaseRoleRequest(id)) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("alter database_role: set value and unset value", func(t *testing.T) { name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) t.Cleanup(cleanupDatabaseRoleProvider(id)) - alterRequest := NewAlterDatabaseRoleRequest(id).WithSetComment("new comment") + alterRequest := sdk.NewAlterDatabaseRoleRequest(id).WithSetComment("new comment") err = client.DatabaseRoles.Alter(ctx, alterRequest) require.NoError(t, err) @@ -116,7 +116,7 @@ func TestInt_DatabaseRoles(t *testing.T) { assert.Equal(t, "new comment", alteredDatabaseRole.Comment) - alterRequest = NewAlterDatabaseRoleRequest(id).WithUnsetComment() + alterRequest = sdk.NewAlterDatabaseRoleRequest(id).WithUnsetComment() err = client.DatabaseRoles.Alter(ctx, alterRequest) require.NoError(t, err) @@ -128,14 +128,14 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Run("alter database_role: rename", func(t *testing.T) { name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) newName := randomString(t) - newId := NewDatabaseObjectIdentifier(database.Name, newName) - alterRequest := NewAlterDatabaseRoleRequest(id).WithRename(newId) + newId := sdk.NewDatabaseObjectIdentifier(database.Name, newName) + alterRequest := sdk.NewAlterDatabaseRoleRequest(id).WithRename(newId) err = client.DatabaseRoles.Alter(ctx, alterRequest) if err != nil { @@ -146,7 +146,7 @@ func TestInt_DatabaseRoles(t *testing.T) { require.NoError(t, err) _, err = client.DatabaseRoles.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) databaseRole, err := client.DatabaseRoles.ShowByID(ctx, newId) require.NoError(t, err) @@ -159,25 +159,25 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Cleanup(secondDatabaseCleanup) name := randomString(t) - id := NewDatabaseObjectIdentifier(database.Name, name) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) - err := client.DatabaseRoles.Create(ctx, NewCreateDatabaseRoleRequest(id)) + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) require.NoError(t, err) t.Cleanup(cleanupDatabaseRoleProvider(id)) newName := randomString(t) - newId := NewDatabaseObjectIdentifier(secondDatabase.Name, newName) - alterRequest := NewAlterDatabaseRoleRequest(id).WithRename(newId) + newId := sdk.NewDatabaseObjectIdentifier(secondDatabase.Name, newName) + alterRequest := sdk.NewAlterDatabaseRoleRequest(id).WithRename(newId) err = client.DatabaseRoles.Alter(ctx, alterRequest) - assert.ErrorIs(t, err, errDifferentDatabase) + assert.ErrorIs(t, err, sdk.ErrDifferentDatabase) }) t.Run("show database_role: without like", func(t *testing.T) { role1 := createDatabaseRole(t) role2 := createDatabaseRole(t) - showRequest := NewShowDatabaseRoleRequest(database.ID()) + showRequest := sdk.NewShowDatabaseRoleRequest(database.ID()) returnedDatabaseRoles, err := client.DatabaseRoles.Show(ctx, showRequest) require.NoError(t, err) @@ -190,7 +190,7 @@ func TestInt_DatabaseRoles(t *testing.T) { role1 := createDatabaseRole(t) role2 := createDatabaseRole(t) - showRequest := NewShowDatabaseRoleRequest(database.ID()).WithLike(role1.Name) + showRequest := sdk.NewShowDatabaseRoleRequest(database.ID()).WithLike(role1.Name) returnedDatabaseRoles, err := client.DatabaseRoles.Show(ctx, showRequest) require.NoError(t, err) @@ -200,7 +200,7 @@ func TestInt_DatabaseRoles(t *testing.T) { }) t.Run("show database_role: no matches", func(t *testing.T) { - showRequest := NewShowDatabaseRoleRequest(database.ID()).WithLike("non-existent") + showRequest := sdk.NewShowDatabaseRoleRequest(database.ID()).WithLike("non-existent") returnedDatabaseRoles, err := client.DatabaseRoles.Show(ctx, showRequest) require.NoError(t, err) @@ -209,11 +209,11 @@ func TestInt_DatabaseRoles(t *testing.T) { t.Run("grant and revoke database_role: to database role", func(t *testing.T) { role1 := createDatabaseRole(t) - id1 := NewDatabaseObjectIdentifier(database.Name, role1.Name) + id1 := sdk.NewDatabaseObjectIdentifier(database.Name, role1.Name) role2 := createDatabaseRole(t) - id2 := NewDatabaseObjectIdentifier(database.Name, role2.Name) + id2 := sdk.NewDatabaseObjectIdentifier(database.Name, role2.Name) - grantRequest := NewGrantDatabaseRoleRequest(id1).WithDatabaseRole(id2) + grantRequest := sdk.NewGrantDatabaseRoleRequest(id1).WithDatabaseRole(id2) err := client.DatabaseRoles.Grant(ctx, grantRequest) require.NoError(t, err) @@ -229,19 +229,19 @@ func TestInt_DatabaseRoles(t *testing.T) { assert.Equal(t, 0, extractedRole.GrantedToDatabaseRoles) assert.Equal(t, 1, extractedRole.GrantedDatabaseRoles) - revokeRequest := NewRevokeDatabaseRoleRequest(id1).WithDatabaseRole(id2) + revokeRequest := sdk.NewRevokeDatabaseRoleRequest(id1).WithDatabaseRole(id2) err = client.DatabaseRoles.Revoke(ctx, revokeRequest) require.NoError(t, err) }) t.Run("grant and revoke database_role: to account role", func(t *testing.T) { role := createDatabaseRole(t) - roleId := NewDatabaseObjectIdentifier(database.Name, role.Name) + roleId := sdk.NewDatabaseObjectIdentifier(database.Name, role.Name) accountRole, accountRoleCleanup := createRole(t, client) t.Cleanup(accountRoleCleanup) - grantRequest := NewGrantDatabaseRoleRequest(roleId).WithAccountRole(accountRole.ID()) + grantRequest := sdk.NewGrantDatabaseRoleRequest(roleId).WithAccountRole(accountRole.ID()) err := client.DatabaseRoles.Grant(ctx, grantRequest) require.NoError(t, err) @@ -251,26 +251,26 @@ func TestInt_DatabaseRoles(t *testing.T) { assert.Equal(t, 0, extractedRole.GrantedToDatabaseRoles) assert.Equal(t, 0, extractedRole.GrantedDatabaseRoles) - revokeRequest := NewRevokeDatabaseRoleRequest(roleId).WithAccountRole(accountRole.ID()) + revokeRequest := sdk.NewRevokeDatabaseRoleRequest(roleId).WithAccountRole(accountRole.ID()) err = client.DatabaseRoles.Revoke(ctx, revokeRequest) require.NoError(t, err) }) t.Run("grant and revoke database_role: to share", func(t *testing.T) { role := createDatabaseRole(t) - roleId := NewDatabaseObjectIdentifier(database.Name, role.Name) + roleId := sdk.NewDatabaseObjectIdentifier(database.Name, role.Name) share, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{Database: database.ID()}, share.ID()) + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{Database: database.ID()}, share.ID()) require.NoError(t, err) - grantRequest := NewGrantDatabaseRoleToShareRequest(roleId, share.ID()) + grantRequest := sdk.NewGrantDatabaseRoleToShareRequest(roleId, share.ID()) err = client.DatabaseRoles.GrantToShare(ctx, grantRequest) require.NoError(t, err) - revokeRequest := NewRevokeDatabaseRoleFromShareRequest(roleId, share.ID()) + revokeRequest := sdk.NewRevokeDatabaseRoleFromShareRequest(roleId, share.ID()) err = client.DatabaseRoles.RevokeFromShare(ctx, revokeRequest) require.NoError(t, err) }) diff --git a/pkg/sdk/databases_integration_test.go b/pkg/sdk/testint/databases_integration_test.go similarity index 79% rename from pkg/sdk/databases_integration_test.go rename to pkg/sdk/testint/databases_integration_test.go index 440337daee..24aa53cc37 100644 --- a/pkg/sdk/databases_integration_test.go +++ b/pkg/sdk/testint/databases_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "strings" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_DatabasesCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("minimal", func(t *testing.T) { databaseID := randomAccountObjectIdentifier(t) @@ -30,11 +30,11 @@ func TestInt_DatabasesCreate(t *testing.T) { cloneDatabase, cloneDatabaseCleanup := createDatabase(t, client) t.Cleanup(cloneDatabaseCleanup) databaseID := randomAccountObjectIdentifier(t) - opts := &CreateDatabaseOptions{ - Clone: &Clone{ + opts := &sdk.CreateDatabaseOptions{ + Clone: &sdk.Clone{ SourceObject: cloneDatabase.ID(), - At: &TimeTravel{ - Offset: Int(0), + At: &sdk.TimeTravel{ + Offset: sdk.Int(0), }, }, } @@ -62,13 +62,13 @@ func TestInt_DatabasesCreate(t *testing.T) { t.Cleanup(tag2Cleanup) comment := randomComment(t) - opts := &CreateDatabaseOptions{ - OrReplace: Bool(true), - Transient: Bool(true), - Comment: String(comment), - DataRetentionTimeInDays: Int(1), - MaxDataExtensionTimeInDays: Int(1), - Tag: []TagAssociation{ + opts := &sdk.CreateDatabaseOptions{ + OrReplace: sdk.Bool(true), + Transient: sdk.Bool(true), + Comment: sdk.String(comment), + DataRetentionTimeInDays: sdk.Int(1), + MaxDataExtensionTimeInDays: sdk.Int(1), + Tag: []sdk.TagAssociation{ { Name: tagTest.ID(), Value: "v1", @@ -87,15 +87,15 @@ func TestInt_DatabasesCreate(t *testing.T) { assert.Equal(t, comment, database.Comment) assert.Equal(t, 1, database.RetentionTime) // MAX_DATA_EXTENSION_IN_DAYS is an object parameter, not in Database object - param, err := client.Parameters.ShowObjectParameter(ctx, "MAX_DATA_EXTENSION_TIME_IN_DAYS", Object{ObjectType: ObjectTypeDatabase, Name: databaseID}) + param, err := client.Parameters.ShowObjectParameter(ctx, "MAX_DATA_EXTENSION_TIME_IN_DAYS", sdk.Object{ObjectType: sdk.ObjectTypeDatabase, Name: databaseID}) assert.NoError(t, err) assert.Equal(t, "1", param.Value) // verify tags - tag1Value, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), database.ID(), ObjectTypeDatabase) + tag1Value, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), database.ID(), sdk.ObjectTypeDatabase) require.NoError(t, err) assert.Equal(t, "v1", tag1Value) - tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2Test.ID(), database.ID(), ObjectTypeDatabase) + tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2Test.ID(), database.ID(), sdk.ObjectTypeDatabase) require.NoError(t, err) assert.Equal(t, "v2", tag2Value) @@ -108,29 +108,29 @@ func TestInt_DatabasesCreate(t *testing.T) { func TestInt_CreateShared(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) shareTest, _ := createShare(t, client) // t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) }) require.NoError(t, err) secondaryClient := testSecondaryClient(t) - accountsToSet := []AccountIdentifier{ + accountsToSet := []sdk.AccountIdentifier{ getAccountIdentifier(t, secondaryClient), } // first add the account. - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Set: &ShareSet{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Set: &sdk.ShareSet{ Accounts: accountsToSet, }, }) @@ -153,7 +153,7 @@ func TestInt_DatabasesCreateSecondary(t *testing.T) { func TestInt_DatabasesDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, _ := createDatabase(t, client) databaseID := databaseTest.ID() t.Run("drop with nil options", func(t *testing.T) { @@ -167,7 +167,7 @@ this test keeps failing need to fix. func TestInt_DatabasesUndrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) databaseID := databaseTest.ID() @@ -188,7 +188,7 @@ func TestInt_DatabasesDescribe(t *testing.T) { t.Cleanup(databaseCleanup) schemaTest, schemaCleanup := createSchema(t, client, databaseTest) t.Cleanup(schemaCleanup) - ctx := context.Background() + ctx := testContext(t) databaseDetails, err := client.Databases.Describe(ctx, databaseTest.ID()) require.NoError(t, err) rows := databaseDetails.Rows @@ -203,12 +203,12 @@ func TestInt_DatabasesDescribe(t *testing.T) { func TestInt_DatabasesAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("renaming", func(t *testing.T) { databaseTest, _ := createDatabase(t, client) newName := randomAccountObjectIdentifier(t) - err := client.Databases.Alter(ctx, databaseTest.ID(), &AlterDatabaseOptions{ + err := client.Databases.Alter(ctx, databaseTest.ID(), &sdk.AlterDatabaseOptions{ NewName: newName, }) require.NoError(t, err) @@ -225,7 +225,7 @@ func TestInt_DatabasesAlter(t *testing.T) { t.Cleanup(databaseCleanup) databaseTest2, databaseCleanup2 := createDatabase(t, client) t.Cleanup(databaseCleanup2) - err := client.Databases.Alter(ctx, databaseTest.ID(), &AlterDatabaseOptions{ + err := client.Databases.Alter(ctx, databaseTest.ID(), &sdk.AlterDatabaseOptions{ SwapWith: databaseTest2.ID(), }) require.NoError(t, err) @@ -233,10 +233,10 @@ func TestInt_DatabasesAlter(t *testing.T) { t.Run("setting and unsetting retention time + comment ", func(t *testing.T) { databaseTest, _ := createDatabase(t, client) - err := client.Databases.Alter(ctx, databaseTest.ID(), &AlterDatabaseOptions{ - Set: &DatabaseSet{ - DataRetentionTimeInDays: Int(42), - Comment: String("test comment"), + err := client.Databases.Alter(ctx, databaseTest.ID(), &sdk.AlterDatabaseOptions{ + Set: &sdk.DatabaseSet{ + DataRetentionTimeInDays: sdk.Int(42), + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -244,10 +244,10 @@ func TestInt_DatabasesAlter(t *testing.T) { require.NoError(t, err) assert.Equal(t, 42, database.RetentionTime) assert.Equal(t, "test comment", database.Comment) - err = client.Databases.Alter(ctx, databaseTest.ID(), &AlterDatabaseOptions{ - Unset: &DatabaseUnset{ - DataRetentionTimeInDays: Bool(true), - Comment: Bool(true), + err = client.Databases.Alter(ctx, databaseTest.ID(), &sdk.AlterDatabaseOptions{ + Unset: &sdk.DatabaseUnset{ + DataRetentionTimeInDays: sdk.Bool(true), + Comment: sdk.Bool(true), }, }) require.NoError(t, err) @@ -264,17 +264,17 @@ func TestInt_AlterReplication(t *testing.T) { func TestInt_AlterFailover(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) secondaryClient := testSecondaryClient(t) - toAccounts := []AccountIdentifier{ + toAccounts := []sdk.AccountIdentifier{ getAccountIdentifier(t, secondaryClient), } t.Run("enable and disable failover", func(t *testing.T) { - opts := &AlterDatabaseFailoverOptions{ - EnableFailover: &EnableFailover{ + opts := &sdk.AlterDatabaseFailoverOptions{ + EnableFailover: &sdk.EnableFailover{ ToAccounts: toAccounts, }, } @@ -283,15 +283,15 @@ func TestInt_AlterFailover(t *testing.T) { t.Skip("Skipping test because secondary account not enabled for replication") } require.NoError(t, err) - opts = &AlterDatabaseFailoverOptions{ - DisableFailover: &DisableFailover{ + opts = &sdk.AlterDatabaseFailoverOptions{ + DisableFailover: &sdk.DisableFailover{ ToAccounts: toAccounts, }, } err = client.Databases.AlterFailover(ctx, databaseTest.ID(), opts) require.NoError(t, err) - opts = &AlterDatabaseFailoverOptions{ - Primary: Bool(true), + opts = &sdk.AlterDatabaseFailoverOptions{ + Primary: sdk.Bool(true), } err = client.Databases.AlterFailover(ctx, databaseTest.ID(), opts) require.NoError(t, err) @@ -300,7 +300,7 @@ func TestInt_AlterFailover(t *testing.T) { func TestInt_DatabasesShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -310,7 +310,7 @@ func TestInt_DatabasesShow(t *testing.T) { databases, err := client.Databases.Show(ctx, nil) require.NoError(t, err) assert.GreaterOrEqual(t, len(databases), 2) - databaseIDs := make([]AccountObjectIdentifier, len(databases)) + databaseIDs := make([]sdk.AccountObjectIdentifier, len(databases)) for i, database := range databases { databaseIDs[i] = database.ID() } @@ -319,10 +319,10 @@ func TestInt_DatabasesShow(t *testing.T) { }) t.Run("with terse", func(t *testing.T) { - showOptions := &ShowDatabasesOptions{ - Terse: Bool(true), - Like: &Like{ - Pattern: String(databaseTest.Name), + showOptions := &sdk.ShowDatabasesOptions{ + Terse: sdk.Bool(true), + Like: &sdk.Like{ + Pattern: sdk.String(databaseTest.Name), }, } databases, err := client.Databases.Show(ctx, showOptions) @@ -354,10 +354,10 @@ func TestInt_DatabasesShow(t *testing.T) { }) */ t.Run("with like starts with", func(t *testing.T) { - showOptions := &ShowDatabasesOptions{ - StartsWith: String(databaseTest.Name), - LimitFrom: &LimitFrom{ - Rows: Int(1), + showOptions := &sdk.ShowDatabasesOptions{ + StartsWith: sdk.String(databaseTest.Name), + LimitFrom: &sdk.LimitFrom{ + Rows: sdk.Int(1), }, } databases, err := client.Databases.Show(ctx, showOptions) @@ -368,9 +368,9 @@ func TestInt_DatabasesShow(t *testing.T) { }) t.Run("when searching a non-existent database", func(t *testing.T) { - showOptions := &ShowDatabasesOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowDatabasesOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } databases, err := client.Databases.Show(ctx, showOptions) diff --git a/pkg/sdk/dynamic_table_integration_test.go b/pkg/sdk/testint/dynamic_table_integration_test.go similarity index 50% rename from pkg/sdk/dynamic_table_integration_test.go rename to pkg/sdk/testint/dynamic_table_integration_test.go index efcaa6a760..d7279196f6 100644 --- a/pkg/sdk/dynamic_table_integration_test.go +++ b/pkg/sdk/testint/dynamic_table_integration_test.go @@ -1,9 +1,9 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -20,21 +20,21 @@ func TestInt_DynamicTableCreateAndDrop(t *testing.T) { tableTest, tableCleanup := createTable(t, client, databaseTest, schemaTest) t.Cleanup(tableCleanup) - ctx := context.Background() + ctx := testContext(t) t.Run("test complete", func(t *testing.T) { - name := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, randomString(t)) - targetLag := TargetLag{ - Lagtime: String("2 minutes"), + name := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, randomString(t)) + targetLag := sdk.TargetLag{ + Lagtime: sdk.String("2 minutes"), } query := "select id from " + tableTest.ID().FullyQualifiedName() comment := randomComment(t) - err := client.DynamicTables.Create(ctx, NewCreateDynamicTableRequest(name, warehouseTest.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) + err := client.DynamicTables.Create(ctx, sdk.NewCreateDynamicTableRequest(name, warehouseTest.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) require.NoError(t, err) t.Cleanup(func() { - err = client.DynamicTables.Drop(ctx, NewDropDynamicTableRequest(name)) + err = client.DynamicTables.Drop(ctx, sdk.NewDropDynamicTableRequest(name)) require.NoError(t, err) }) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(name.Name())})) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(name.Name())})) require.NoError(t, err) require.Equal(t, 1, len(entities)) @@ -45,19 +45,19 @@ func TestInt_DynamicTableCreateAndDrop(t *testing.T) { }) t.Run("test complete with target lag", func(t *testing.T) { - name := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, randomString(t)) - targetLag := TargetLag{ - Downstream: Bool(true), + name := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, randomString(t)) + targetLag := sdk.TargetLag{ + Downstream: sdk.Bool(true), } query := "select id from " + tableTest.ID().FullyQualifiedName() comment := randomComment(t) - err := client.DynamicTables.Create(ctx, NewCreateDynamicTableRequest(name, warehouseTest.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) + err := client.DynamicTables.Create(ctx, sdk.NewCreateDynamicTableRequest(name, warehouseTest.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) require.NoError(t, err) t.Cleanup(func() { - err = client.DynamicTables.Drop(ctx, NewDropDynamicTableRequest(name)) + err = client.DynamicTables.Drop(ctx, sdk.NewDropDynamicTableRequest(name)) require.NoError(t, err) }) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(name.Name())})) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(name.Name())})) require.NoError(t, err) require.Equal(t, 1, len(entities)) @@ -70,61 +70,61 @@ func TestInt_DynamicTableCreateAndDrop(t *testing.T) { func TestInt_DynamicTableDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) dynamicTable, dynamicTableCleanup := createDynamicTable(t, client) t.Cleanup(dynamicTableCleanup) t.Run("when dynamic table exists", func(t *testing.T) { - _, err := client.DynamicTables.Describe(ctx, NewDescribeDynamicTableRequest(dynamicTable.ID())) + _, err := client.DynamicTables.Describe(ctx, sdk.NewDescribeDynamicTableRequest(dynamicTable.ID())) require.NoError(t, err) }) t.Run("when dynamic table does not exist", func(t *testing.T) { - name := NewSchemaObjectIdentifier("my_db", "my_schema", "does_not_exist") - _, err := client.DynamicTables.Describe(ctx, NewDescribeDynamicTableRequest(name)) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + name := sdk.NewSchemaObjectIdentifier("my_db", "my_schema", "does_not_exist") + _, err := client.DynamicTables.Describe(ctx, sdk.NewDescribeDynamicTableRequest(name)) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_DynamicTableAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("alter with suspend or resume", func(t *testing.T) { dynamicTable, dynamicTableCleanup := createDynamicTable(t, client) t.Cleanup(dynamicTableCleanup) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(dynamicTable.Name)})) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(dynamicTable.Name)})) require.NoError(t, err) require.Equal(t, 1, len(entities)) - require.Equal(t, DynamicTableSchedulingStateRunning, entities[0].SchedulingState) + require.Equal(t, sdk.DynamicTableSchedulingStateRunning, entities[0].SchedulingState) - err = client.DynamicTables.Alter(ctx, NewAlterDynamicTableRequest(dynamicTable.ID()).WithSuspend(Bool(true))) + err = client.DynamicTables.Alter(ctx, sdk.NewAlterDynamicTableRequest(dynamicTable.ID()).WithSuspend(sdk.Bool(true))) require.NoError(t, err) - entities, err = client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(dynamicTable.Name)})) + entities, err = client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(dynamicTable.Name)})) require.NoError(t, err) require.Equal(t, 1, len(entities)) - require.Equal(t, DynamicTableSchedulingStateSuspended, entities[0].SchedulingState) + require.Equal(t, sdk.DynamicTableSchedulingStateSuspended, entities[0].SchedulingState) - err = client.DynamicTables.Alter(ctx, NewAlterDynamicTableRequest(dynamicTable.ID()).WithResume(Bool(true))) + err = client.DynamicTables.Alter(ctx, sdk.NewAlterDynamicTableRequest(dynamicTable.ID()).WithResume(sdk.Bool(true))) require.NoError(t, err) - entities, err = client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(dynamicTable.Name)})) + entities, err = client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(dynamicTable.Name)})) require.NoError(t, err) require.Equal(t, 1, len(entities)) - require.Equal(t, DynamicTableSchedulingStateRunning, entities[0].SchedulingState) + require.Equal(t, sdk.DynamicTableSchedulingStateRunning, entities[0].SchedulingState) }) t.Run("alter with refresh", func(t *testing.T) { dynamicTable, dynamicTableCleanup := createDynamicTable(t, client) t.Cleanup(dynamicTableCleanup) - err := client.DynamicTables.Alter(ctx, NewAlterDynamicTableRequest(dynamicTable.ID()).WithRefresh(Bool(true))) + err := client.DynamicTables.Alter(ctx, sdk.NewAlterDynamicTableRequest(dynamicTable.ID()).WithRefresh(sdk.Bool(true))) require.NoError(t, err) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(dynamicTable.Name)})) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(dynamicTable.Name)})) require.NoError(t, err) require.Equal(t, 1, len(entities)) }) @@ -133,7 +133,7 @@ func TestInt_DynamicTableAlter(t *testing.T) { dynamicTable, dynamicTableCleanup := createDynamicTable(t, client) t.Cleanup(dynamicTableCleanup) - err := client.DynamicTables.Alter(ctx, NewAlterDynamicTableRequest(dynamicTable.ID()).WithSuspend(Bool(true)).WithResume(Bool(true))) + err := client.DynamicTables.Alter(ctx, sdk.NewAlterDynamicTableRequest(dynamicTable.ID()).WithSuspend(sdk.Bool(true)).WithResume(sdk.Bool(true))) require.Error(t, err) expected := "alter statement needs exactly one action from: set, unset, refresh" require.Equal(t, expected, err.Error()) @@ -145,9 +145,9 @@ func TestInt_DynamicTableAlter(t *testing.T) { targetLagCases := []string{"10 minutes", "DOWNSTREAM"} for _, value := range targetLagCases { - err := client.DynamicTables.Alter(ctx, NewAlterDynamicTableRequest(dynamicTable.ID()).WithSet(NewDynamicTableSetRequest().WithTargetLag(&TargetLag{Lagtime: String(value)}))) + err := client.DynamicTables.Alter(ctx, sdk.NewAlterDynamicTableRequest(dynamicTable.ID()).WithSet(sdk.NewDynamicTableSetRequest().WithTargetLag(&sdk.TargetLag{Lagtime: sdk.String(value)}))) require.NoError(t, err) - entities, err := client.DynamicTables.Show(ctx, NewShowDynamicTableRequest().WithLike(&Like{Pattern: String(dynamicTable.Name)})) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(dynamicTable.Name)})) require.NoError(t, err) require.Equal(t, 1, len(entities)) require.Equal(t, value, entities[0].TargetLag) diff --git a/pkg/sdk/external_tables_integration_test.go b/pkg/sdk/testint/external_tables_integration_test.go similarity index 57% rename from pkg/sdk/external_tables_integration_test.go rename to pkg/sdk/testint/external_tables_integration_test.go index 062cadabe0..f686d90bd6 100644 --- a/pkg/sdk/external_tables_integration_test.go +++ b/pkg/sdk/testint/external_tables_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "fmt" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_ExternalTables(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDB := createDatabase(t, client) t.Cleanup(cleanupDB) @@ -23,48 +23,48 @@ func TestInt_ExternalTables(t *testing.T) { err = client.Sessions.UseSchema(ctx, schema.ID()) require.NoError(t, err) - stageID := NewAccountObjectIdentifier("EXTERNAL_TABLE_STAGE") + stageID := sdk.NewAccountObjectIdentifier("EXTERNAL_TABLE_STAGE") stageLocation := "@external_table_stage" _, _ = createStageWithURL(t, client, stageID, "s3://snowflake-workshop-lab/weather-nyc") tag, _ := createTag(t, client, db, schema) - defaultColumns := func() []*ExternalTableColumnRequest { - return []*ExternalTableColumnRequest{ - NewExternalTableColumnRequest("filename", DataTypeString, "metadata$filename::string"), - NewExternalTableColumnRequest("city", DataTypeString, "value:city:findname::string"), - NewExternalTableColumnRequest("time", DataTypeTimestamp, "to_timestamp(value:time::int)"), - NewExternalTableColumnRequest("weather", DataTypeVariant, "value:weather::variant"), + defaultColumns := func() []*sdk.ExternalTableColumnRequest { + return []*sdk.ExternalTableColumnRequest{ + sdk.NewExternalTableColumnRequest("filename", sdk.DataTypeString, "metadata$filename::string"), + sdk.NewExternalTableColumnRequest("city", sdk.DataTypeString, "value:city:findname::string"), + sdk.NewExternalTableColumnRequest("time", sdk.DataTypeTimestamp, "to_timestamp(value:time::int)"), + sdk.NewExternalTableColumnRequest("weather", sdk.DataTypeVariant, "value:weather::variant"), } } columns := defaultColumns() - columnsWithPartition := append(defaultColumns(), []*ExternalTableColumnRequest{ - NewExternalTableColumnRequest("weather_date", DataTypeDate, "to_date(to_timestamp(value:time::int))"), - NewExternalTableColumnRequest("part_date", DataTypeDate, "parse_json(metadata$external_table_partition):weather_date::date"), + columnsWithPartition := append(defaultColumns(), []*sdk.ExternalTableColumnRequest{ + sdk.NewExternalTableColumnRequest("weather_date", sdk.DataTypeDate, "to_date(to_timestamp(value:time::int))"), + sdk.NewExternalTableColumnRequest("part_date", sdk.DataTypeDate, "parse_json(metadata$external_table_partition):weather_date::date"), }...) - minimalCreateExternalTableReq := func(id AccountObjectIdentifier) *CreateExternalTableRequest { - return NewCreateExternalTableRequest( + minimalCreateExternalTableReq := func(id sdk.AccountObjectIdentifier) *sdk.CreateExternalTableRequest { + return sdk.NewCreateExternalTableRequest( id, stageLocation, - NewExternalTableFileFormatRequest().WithFileFormatType(&ExternalTableFileFormatTypeJSON), + sdk.NewExternalTableFileFormatRequest().WithFileFormatType(&sdk.ExternalTableFileFormatTypeJSON), ) } - createExternalTableWithManualPartitioningReq := func(id AccountObjectIdentifier) *CreateWithManualPartitioningExternalTableRequest { - return NewCreateWithManualPartitioningExternalTableRequest( + createExternalTableWithManualPartitioningReq := func(id sdk.AccountObjectIdentifier) *sdk.CreateWithManualPartitioningExternalTableRequest { + return sdk.NewCreateWithManualPartitioningExternalTableRequest( id, stageLocation, - NewExternalTableFileFormatRequest().WithFileFormatType(&ExternalTableFileFormatTypeJSON), + sdk.NewExternalTableFileFormatRequest().WithFileFormatType(&sdk.ExternalTableFileFormatTypeJSON), ). - WithOrReplace(Bool(true)). + WithOrReplace(sdk.Bool(true)). WithColumns(columnsWithPartition). - WithUserSpecifiedPartitionType(Bool(true)). + WithUserSpecifiedPartitionType(sdk.Bool(true)). WithPartitionBy([]string{"part_date"}). - WithCopyGrants(Bool(true)). - WithComment(String("some_comment")). - WithTag([]*TagAssociationRequest{NewTagAssociationRequest(tag.ID(), "tag-value")}) + WithCopyGrants(sdk.Bool(true)). + WithComment(sdk.String("some_comment")). + WithTag([]*sdk.TagAssociationRequest{sdk.NewTagAssociationRequest(tag.ID(), "tag-value")}) } t.Run("Create: minimal", func(t *testing.T) { @@ -72,7 +72,7 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.Create(ctx, minimalCreateExternalTableReq(externalTableID)) require.NoError(t, err) - externalTable, err := client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(externalTableID)) + externalTable, err := client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(externalTableID)) require.NoError(t, err) assert.Equal(t, externalTableID.Name(), externalTable.Name) }) @@ -81,24 +81,24 @@ func TestInt_ExternalTables(t *testing.T) { externalTableID := randomAccountObjectIdentifier(t) err := client.ExternalTables.Create( ctx, - NewCreateExternalTableRequest( + sdk.NewCreateExternalTableRequest( externalTableID, stageLocation, - NewExternalTableFileFormatRequest().WithFileFormatType(&ExternalTableFileFormatTypeJSON), + sdk.NewExternalTableFileFormatRequest().WithFileFormatType(&sdk.ExternalTableFileFormatTypeJSON), ). - WithOrReplace(Bool(true)). + WithOrReplace(sdk.Bool(true)). WithColumns(columns). WithPartitionBy([]string{"filename"}). - WithRefreshOnCreate(Bool(false)). - WithAutoRefresh(Bool(false)). - WithPattern(String("weather-nyc/weather_2_3_0.json.gz")). - WithCopyGrants(Bool(true)). - WithComment(String("some_comment")). - WithTag([]*TagAssociationRequest{NewTagAssociationRequest(tag.ID(), "tag-value")}), + WithRefreshOnCreate(sdk.Bool(false)). + WithAutoRefresh(sdk.Bool(false)). + WithPattern(sdk.String("weather-nyc/weather_2_3_0.json.gz")). + WithCopyGrants(sdk.Bool(true)). + WithComment(sdk.String("some_comment")). + WithTag([]*sdk.TagAssociationRequest{sdk.NewTagAssociationRequest(tag.ID(), "tag-value")}), ) require.NoError(t, err) - externalTable, err := client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(externalTableID)) + externalTable, err := client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(externalTableID)) require.NoError(t, err) assert.Equal(t, externalTableID.Name(), externalTable.Name) }) @@ -115,16 +115,16 @@ func TestInt_ExternalTables(t *testing.T) { query := fmt.Sprintf(`SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*)) WITHIN GROUP (ORDER BY order_id) FROM TABLE (INFER_SCHEMA(location => '%s', FILE_FORMAT=>'%s', ignore_case => true))`, stageLocation, fileFormat.ID().FullyQualifiedName()) err = client.ExternalTables.CreateUsingTemplate( ctx, - NewCreateExternalTableUsingTemplateRequest( + sdk.NewCreateExternalTableUsingTemplateRequest( id, stageLocation, - NewExternalTableFileFormatRequest().WithName(String(fileFormat.ID().FullyQualifiedName())), + sdk.NewExternalTableFileFormatRequest().WithName(sdk.String(fileFormat.ID().FullyQualifiedName())), ). WithQuery(query). - WithAutoRefresh(Bool(false))) + WithAutoRefresh(sdk.Bool(false))) require.NoError(t, err) - _, err = client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(id)) + _, err = client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(id)) require.NoError(t, err) }) @@ -133,7 +133,7 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.CreateWithManualPartitioning(ctx, createExternalTableWithManualPartitioningReq(externalTableID)) require.NoError(t, err) - externalTable, err := client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(externalTableID)) + externalTable, err := client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(externalTableID)) require.NoError(t, err) assert.Equal(t, externalTableID.Name(), externalTable.Name) }) @@ -142,24 +142,24 @@ func TestInt_ExternalTables(t *testing.T) { externalTableID := randomAccountObjectIdentifier(t) err := client.ExternalTables.CreateDeltaLake( ctx, - NewCreateDeltaLakeExternalTableRequest( + sdk.NewCreateDeltaLakeExternalTableRequest( externalTableID, stageLocation, - NewExternalTableFileFormatRequest().WithFileFormatType(&ExternalTableFileFormatTypeParquet), + sdk.NewExternalTableFileFormatRequest().WithFileFormatType(&sdk.ExternalTableFileFormatTypeParquet), ). - WithOrReplace(Bool(true)). + WithOrReplace(sdk.Bool(true)). WithColumns(columnsWithPartition). WithPartitionBy([]string{"filename"}). - WithDeltaTableFormat(Bool(true)). - WithAutoRefresh(Bool(false)). - WithRefreshOnCreate(Bool(false)). - WithCopyGrants(Bool(true)). - WithComment(String("some_comment")). - WithTag([]*TagAssociationRequest{NewTagAssociationRequest(tag.ID(), "tag-value")}), + WithDeltaTableFormat(sdk.Bool(true)). + WithAutoRefresh(sdk.Bool(false)). + WithRefreshOnCreate(sdk.Bool(false)). + WithCopyGrants(sdk.Bool(true)). + WithComment(sdk.String("some_comment")). + WithTag([]*sdk.TagAssociationRequest{sdk.NewTagAssociationRequest(tag.ID(), "tag-value")}), ) require.NoError(t, err) - externalTable, err := client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(externalTableID)) + externalTable, err := client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(externalTableID)) require.NoError(t, err) assert.Equal(t, externalTableID.Name(), externalTable.Name) }) @@ -171,9 +171,9 @@ func TestInt_ExternalTables(t *testing.T) { err = client.ExternalTables.Alter( ctx, - NewAlterExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithRefresh(NewRefreshExternalTableRequest("weather-nyc")), + sdk.NewAlterExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithRefresh(sdk.NewRefreshExternalTableRequest("weather-nyc")), ) require.NoError(t, err) }) @@ -183,15 +183,15 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.Create( ctx, minimalCreateExternalTableReq(externalTableID). - WithPattern(String("weather-nyc/weather_2_3_0.json.gz")), + WithPattern(sdk.String("weather-nyc/weather_2_3_0.json.gz")), ) require.NoError(t, err) err = client.ExternalTables.Alter( ctx, - NewAlterExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithAddFiles([]*ExternalTableFileRequest{NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), + sdk.NewAlterExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithAddFiles([]*sdk.ExternalTableFileRequest{sdk.NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), ) require.NoError(t, err) }) @@ -201,23 +201,23 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.Create( ctx, minimalCreateExternalTableReq(externalTableID). - WithPattern(String("weather-nyc/weather_2_3_0.json.gz")), + WithPattern(sdk.String("weather-nyc/weather_2_3_0.json.gz")), ) require.NoError(t, err) err = client.ExternalTables.Alter( ctx, - NewAlterExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithAddFiles([]*ExternalTableFileRequest{NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), + sdk.NewAlterExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithAddFiles([]*sdk.ExternalTableFileRequest{sdk.NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), ) require.NoError(t, err) err = client.ExternalTables.Alter( ctx, - NewAlterExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithRemoveFiles([]*ExternalTableFileRequest{NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), + sdk.NewAlterExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithRemoveFiles([]*sdk.ExternalTableFileRequest{sdk.NewExternalTableFileRequest("weather-nyc/weather_0_0_0.json.gz")}), ) require.NoError(t, err) }) @@ -229,9 +229,9 @@ func TestInt_ExternalTables(t *testing.T) { err = client.ExternalTables.Alter( ctx, - NewAlterExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithAutoRefresh(Bool(true)), + sdk.NewAlterExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithAutoRefresh(sdk.Bool(true)), ) require.NoError(t, err) }) @@ -288,9 +288,9 @@ func TestInt_ExternalTables(t *testing.T) { err = client.ExternalTables.AlterPartitions( ctx, - NewAlterExternalTablePartitionRequest(externalTableID). - WithIfExists(Bool(true)). - WithAddPartitions([]*PartitionRequest{NewPartitionRequest("part_date", "2019-06-25")}). + sdk.NewAlterExternalTablePartitionRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithAddPartitions([]*sdk.PartitionRequest{sdk.NewPartitionRequest("part_date", "2019-06-25")}). WithLocation("2019/06"), ) require.NoError(t, err) @@ -303,18 +303,18 @@ func TestInt_ExternalTables(t *testing.T) { err = client.ExternalTables.AlterPartitions( ctx, - NewAlterExternalTablePartitionRequest(externalTableID). - WithIfExists(Bool(true)). - WithAddPartitions([]*PartitionRequest{NewPartitionRequest("part_date", "2019-06-25")}). + sdk.NewAlterExternalTablePartitionRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithAddPartitions([]*sdk.PartitionRequest{sdk.NewPartitionRequest("part_date", "2019-06-25")}). WithLocation("2019/06"), ) require.NoError(t, err) err = client.ExternalTables.AlterPartitions( ctx, - NewAlterExternalTablePartitionRequest(externalTableID). - WithIfExists(Bool(true)). - WithDropPartition(Bool(true)). + sdk.NewAlterExternalTablePartitionRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithDropPartition(sdk.Bool(true)). WithLocation("2019/06"), ) require.NoError(t, err) @@ -327,14 +327,14 @@ func TestInt_ExternalTables(t *testing.T) { err = client.ExternalTables.Drop( ctx, - NewDropExternalTableRequest(externalTableID). - WithIfExists(Bool(true)). - WithDropOption(NewExternalTableDropOptionRequest().WithCascade(Bool(true))), + sdk.NewDropExternalTableRequest(externalTableID). + WithIfExists(sdk.Bool(true)). + WithDropOption(sdk.NewExternalTableDropOptionRequest().WithCascade(sdk.Bool(true))), ) require.NoError(t, err) - _, err = client.ExternalTables.ShowByID(ctx, NewShowExternalTableByIDRequest(externalTableID)) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + _, err = client.ExternalTables.ShowByID(ctx, sdk.NewShowExternalTableByIDRequest(externalTableID)) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("Show", func(t *testing.T) { @@ -344,12 +344,12 @@ func TestInt_ExternalTables(t *testing.T) { et, err := client.ExternalTables.Show( ctx, - NewShowExternalTableRequest(). - WithTerse(Bool(true)). - WithLike(String(externalTableID.Name())). - WithIn(NewShowExternalTableInRequest().WithDatabase(db.ID())). - WithStartsWith(String(externalTableID.Name())). - WithLimitFrom(NewLimitFromRequest().WithRows(Int(1))), + sdk.NewShowExternalTableRequest(). + WithTerse(sdk.Bool(true)). + WithLike(sdk.String(externalTableID.Name())). + WithIn(sdk.NewShowExternalTableInRequest().WithDatabase(db.ID())). + WithStartsWith(sdk.String(externalTableID.Name())). + WithLimitFrom(sdk.NewLimitFromRequest().WithRows(sdk.Int(1))), ) require.NoError(t, err) assert.Equal(t, 1, len(et)) @@ -362,11 +362,11 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.Create(ctx, req) require.NoError(t, err) - d, err := client.ExternalTables.DescribeColumns(ctx, NewDescribeExternalTableColumnsRequest(externalTableID)) + d, err := client.ExternalTables.DescribeColumns(ctx, sdk.NewDescribeExternalTableColumnsRequest(externalTableID)) require.NoError(t, err) - assert.Equal(t, len(req.columns)+1, len(d)) // +1 because there's underlying Value column - assert.Contains(t, d, ExternalTableColumnDetails{ + assert.Equal(t, len(req.GetColumns())+1, len(d)) // +1 because there's underlying Value column + assert.Contains(t, d, sdk.ExternalTableColumnDetails{ Name: "VALUE", Type: "VARIANT", Kind: "COLUMN", @@ -376,7 +376,7 @@ func TestInt_ExternalTables(t *testing.T) { IsUnique: false, Check: nil, Expression: nil, - Comment: String("The value of this row"), + Comment: sdk.String("The value of this row"), PolicyName: nil, }) }) @@ -386,10 +386,10 @@ func TestInt_ExternalTables(t *testing.T) { err := client.ExternalTables.Create(ctx, minimalCreateExternalTableReq(externalTableID)) require.NoError(t, err) - d, err := client.ExternalTables.DescribeStage(ctx, NewDescribeExternalTableStageRequest(externalTableID)) + d, err := client.ExternalTables.DescribeStage(ctx, sdk.NewDescribeExternalTableStageRequest(externalTableID)) require.NoError(t, err) - assert.Contains(t, d, ExternalTableStageDetails{ + assert.Contains(t, d, sdk.ExternalTableStageDetails{ ParentProperty: "STAGE_FILE_FORMAT", Property: "TIME_FORMAT", PropertyType: "String", diff --git a/pkg/sdk/failover_groups_integration_test.go b/pkg/sdk/testint/failover_groups_integration_test.go similarity index 76% rename from pkg/sdk/failover_groups_integration_test.go rename to pkg/sdk/testint/failover_groups_integration_test.go index f334f4ae3b..609e669853 100644 --- a/pkg/sdk/failover_groups_integration_test.go +++ b/pkg/sdk/testint/failover_groups_integration_test.go @@ -1,12 +1,12 @@ -package sdk +package testint import ( - "context" "log" "os" "testing" "time" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/avast/retry-go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -18,7 +18,7 @@ func TestInt_FailoverGroupsCreate(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) shareTest, shareCleanup := createShare(t, client) @@ -26,24 +26,24 @@ func TestInt_FailoverGroupsCreate(t *testing.T) { t.Run("test complete", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - objectTypes := []PluralObjectType{ - PluralObjectTypeShares, - PluralObjectTypeDatabases, + objectTypes := []sdk.PluralObjectType{ + sdk.PluralObjectTypeShares, + sdk.PluralObjectTypeDatabases, } - allowedAccounts := []AccountIdentifier{ + allowedAccounts := []sdk.AccountIdentifier{ getSecondaryAccountIdentifier(t), } replicationSchedule := "10 MINUTE" - err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, &CreateFailoverGroupOptions{ - IfNotExists: Bool(true), - AllowedDatabases: []AccountObjectIdentifier{ + err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, &sdk.CreateFailoverGroupOptions{ + IfNotExists: sdk.Bool(true), + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, - AllowedShares: []AccountObjectIdentifier{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, - IgnoreEditionCheck: Bool(true), - ReplicationSchedule: String(replicationSchedule), + IgnoreEditionCheck: sdk.Bool(true), + ReplicationSchedule: sdk.String(replicationSchedule), }) require.NoError(t, err) failoverGroup, err := client.FailoverGroups.ShowByID(ctx, id) @@ -78,17 +78,17 @@ func TestInt_FailoverGroupsCreate(t *testing.T) { t.Run("test with allowed integration types", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - objectTypes := []PluralObjectType{ - PluralObjectTypeIntegrations, + objectTypes := []sdk.PluralObjectType{ + sdk.PluralObjectTypeIntegrations, } - allowedAccounts := []AccountIdentifier{ + allowedAccounts := []sdk.AccountIdentifier{ getSecondaryAccountIdentifier(t), } - allowedIntegrationTypes := []IntegrationType{ - IntegrationTypeAPIIntegrations, - IntegrationTypeNotificationIntegrations, + allowedIntegrationTypes := []sdk.IntegrationType{ + sdk.IntegrationTypeAPIIntegrations, + sdk.IntegrationTypeNotificationIntegrations, } - err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, &CreateFailoverGroupOptions{ + err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, &sdk.CreateFailoverGroupOptions{ AllowedIntegrationTypes: allowedIntegrationTypes, }) require.NoError(t, err) @@ -111,7 +111,7 @@ func TestInt_CreateSecondaryReplicationGroup(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) primaryAccountID := getAccountIdentifier(t, client) secondaryClient := testSecondaryClient(t) secondaryClientID := getAccountIdentifier(t, secondaryClient) @@ -123,18 +123,18 @@ func TestInt_CreateSecondaryReplicationGroup(t *testing.T) { // create a failover group in primary account and share with target account id := randomAccountObjectIdentifier(t) - opts := &CreateFailoverGroupOptions{ - AllowedShares: []AccountObjectIdentifier{ + opts := &sdk.CreateFailoverGroupOptions{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, - ReplicationSchedule: String("10 MINUTE"), + ReplicationSchedule: sdk.String("10 MINUTE"), } - allowedAccounts := []AccountIdentifier{ + allowedAccounts := []sdk.AccountIdentifier{ primaryAccountID, secondaryClientID, } - objectTypes := []PluralObjectType{ - PluralObjectTypeShares, + objectTypes := []sdk.PluralObjectType{ + sdk.PluralObjectTypeShares, } err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, opts) require.NoError(t, err) @@ -145,8 +145,8 @@ func TestInt_CreateSecondaryReplicationGroup(t *testing.T) { time.Sleep(1 * time.Second) // create a replica of failover group in target account - err = secondaryClient.FailoverGroups.CreateSecondaryReplicationGroup(ctx, failoverGroup.ID(), failoverGroup.ExternalID(), &CreateSecondaryReplicationGroupOptions{ - IfNotExists: Bool(true), + err = secondaryClient.FailoverGroups.CreateSecondaryReplicationGroup(ctx, failoverGroup.ID(), failoverGroup.ExternalID(), &sdk.CreateSecondaryReplicationGroupOptions{ + IfNotExists: sdk.Bool(true), }) require.NoError(t, err) @@ -187,12 +187,12 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("rename the failover group", func(t *testing.T) { failoverGroup, _ := createFailoverGroup(t, client) oldID := failoverGroup.ID() newID := randomAccountObjectIdentifier(t) - opts := &AlterSourceFailoverGroupOptions{ + opts := &sdk.AlterSourceFailoverGroupOptions{ NewName: newID, } err := client.FailoverGroups.AlterSource(ctx, oldID, opts) @@ -210,11 +210,11 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Run("reset the list of specified object types enabled for replication and failover.", func(t *testing.T) { failoverGroup, cleanupFailoverGroup := createFailoverGroup(t, client) t.Cleanup(cleanupFailoverGroup) - objectTypes := []PluralObjectType{ - PluralObjectTypeDatabases, + objectTypes := []sdk.PluralObjectType{ + sdk.PluralObjectTypeDatabases, } - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ ObjectTypes: objectTypes, }, } @@ -229,8 +229,8 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { failoverGroup, cleanupFailoverGroup := createFailoverGroup(t, client) t.Cleanup(cleanupFailoverGroup) replicationSchedule := "USING CRON 0 0 10-20 * TUE,THU UTC" - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ ReplicationSchedule: &replicationSchedule, }, } @@ -248,10 +248,10 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupFailoverGroup) // first add databases to allowed object types - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeDatabases, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeDatabases, }, }, } @@ -260,12 +260,12 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { failoverGroup, err = client.FailoverGroups.ShowByID(ctx, failoverGroup.ID()) require.NoError(t, err) assert.Equal(t, 1, len(failoverGroup.ObjectTypes)) - assert.Equal(t, PluralObjectTypeDatabases, failoverGroup.ObjectTypes[0]) + assert.Equal(t, sdk.PluralObjectTypeDatabases, failoverGroup.ObjectTypes[0]) // now add database to allowed databases - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedDatabases: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, }, @@ -278,9 +278,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { assert.Equal(t, databaseTest.ID().Name(), allowedDBs[0].Name()) // now remove database from allowed databases - opts = &AlterSourceFailoverGroupOptions{ - Remove: &FailoverGroupRemove{ - AllowedDatabases: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Remove: &sdk.FailoverGroupRemove{ + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, }, @@ -299,10 +299,10 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupFailoverGroup) // first add shares to allowed object types - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeShares, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeShares, }, }, } @@ -313,9 +313,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { assert.Equal(t, 1, len(failoverGroup.ObjectTypes)) assert.Equal(t, shareTest.ObjectType().Plural(), failoverGroup.ObjectTypes[0]) // now add share to allowed shares - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedShares: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, }, @@ -328,9 +328,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { assert.Equal(t, shareTest.ID().Name(), allowedShares[0].Name()) // now remove share from allowed shares - opts = &AlterSourceFailoverGroupOptions{ - Remove: &FailoverGroupRemove{ - AllowedShares: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Remove: &sdk.FailoverGroupRemove{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, }, @@ -346,14 +346,14 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { failoverGroup, cleanupFailoverGroup := createFailoverGroup(t, client) t.Cleanup(cleanupFailoverGroup) // first add security integrations to allowed object types - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeIntegrations, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeIntegrations, }, - AllowedIntegrationTypes: []IntegrationType{ - IntegrationTypeAPIIntegrations, - IntegrationTypeNotificationIntegrations, + AllowedIntegrationTypes: []sdk.IntegrationType{ + sdk.IntegrationTypeAPIIntegrations, + sdk.IntegrationTypeNotificationIntegrations, }, }, } @@ -362,19 +362,19 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { failoverGroup, err = client.FailoverGroups.ShowByID(ctx, failoverGroup.ID()) require.NoError(t, err) assert.Equal(t, 2, len(failoverGroup.AllowedIntegrationTypes)) - assert.Equal(t, IntegrationTypeAPIIntegrations, failoverGroup.AllowedIntegrationTypes[0]) - assert.Equal(t, IntegrationTypeNotificationIntegrations, failoverGroup.AllowedIntegrationTypes[1]) + assert.Equal(t, sdk.IntegrationTypeAPIIntegrations, failoverGroup.AllowedIntegrationTypes[0]) + assert.Equal(t, sdk.IntegrationTypeNotificationIntegrations, failoverGroup.AllowedIntegrationTypes[1]) assert.Equal(t, 1, len(failoverGroup.ObjectTypes)) - assert.Equal(t, PluralObjectTypeIntegrations, failoverGroup.ObjectTypes[0]) + assert.Equal(t, sdk.PluralObjectTypeIntegrations, failoverGroup.ObjectTypes[0]) // now remove security integration from allowed security integrations - opts = &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeIntegrations, + opts = &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeIntegrations, }, - AllowedIntegrationTypes: []IntegrationType{ - IntegrationTypeAPIIntegrations, + AllowedIntegrationTypes: []sdk.IntegrationType{ + sdk.IntegrationTypeAPIIntegrations, }, }, } @@ -383,7 +383,7 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { failoverGroup, err = client.FailoverGroups.ShowByID(ctx, failoverGroup.ID()) require.NoError(t, err) assert.Equal(t, 1, len(failoverGroup.AllowedIntegrationTypes)) - assert.Equal(t, IntegrationTypeAPIIntegrations, failoverGroup.AllowedIntegrationTypes[0]) + assert.Equal(t, sdk.IntegrationTypeAPIIntegrations, failoverGroup.AllowedIntegrationTypes[0]) }) t.Run("add or remove target accounts enabled for replication and failover", func(t *testing.T) { @@ -392,9 +392,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { secondaryAccountID := getSecondaryAccountIdentifier(t) // first add target account - opts := &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedAccounts: []AccountIdentifier{ + opts := &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedAccounts: []sdk.AccountIdentifier{ secondaryAccountID, }, }, @@ -407,9 +407,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { assert.Contains(t, failoverGroup.AllowedAccounts, secondaryAccountID) // now remove target accounts - opts = &AlterSourceFailoverGroupOptions{ - Remove: &FailoverGroupRemove{ - AllowedAccounts: []AccountIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Remove: &sdk.FailoverGroupRemove{ + AllowedAccounts: []sdk.AccountIdentifier{ secondaryAccountID, }, }, @@ -427,10 +427,10 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupFailoverGroup) // add "SHARES" to object types of both failover groups - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeShares, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeShares, }, }, } @@ -448,9 +448,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupShare) // now add share to allowed shares of failover group 1 - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedShares: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, }, @@ -459,9 +459,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { require.NoError(t, err) // now move share to failover group 2 - opts = &AlterSourceFailoverGroupOptions{ - Move: &FailoverGroupMove{ - Shares: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Move: &sdk.FailoverGroupMove{ + Shares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, To: failoverGroup2.ID(), @@ -486,10 +486,10 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupFailoverGroup) // add "DATABASES" to object types of both failover groups - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeDatabases, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeDatabases, }, }, } @@ -507,9 +507,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { t.Cleanup(cleanupDatabase) // now add database to allowed databases of failover group 1 - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedDatabases: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, }, @@ -518,9 +518,9 @@ func TestInt_FailoverGroupsAlterSource(t *testing.T) { require.NoError(t, err) // now move database to failover group 2 - opts = &AlterSourceFailoverGroupOptions{ - Move: &FailoverGroupMove{ - Databases: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Move: &sdk.FailoverGroupMove{ + Databases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, To: failoverGroup2.ID(), @@ -546,7 +546,7 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) primaryAccountID := getAccountIdentifier(t, client) secondaryClient := testSecondaryClient(t) secondaryClientID := getAccountIdentifier(t, secondaryClient) @@ -558,18 +558,18 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { // create a failover group in primary account and share with target account id := randomAccountObjectIdentifier(t) - opts := &CreateFailoverGroupOptions{ - AllowedDatabases: []AccountObjectIdentifier{ + opts := &sdk.CreateFailoverGroupOptions{ + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, - ReplicationSchedule: String("10 MINUTE"), + ReplicationSchedule: sdk.String("10 MINUTE"), } - allowedAccounts := []AccountIdentifier{ + allowedAccounts := []sdk.AccountIdentifier{ primaryAccountID, secondaryClientID, } - objectTypes := []PluralObjectType{ - PluralObjectTypeDatabases, + objectTypes := []sdk.PluralObjectType{ + sdk.PluralObjectTypeDatabases, } err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, opts) require.NoError(t, err) @@ -580,8 +580,8 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { time.Sleep(1 * time.Second) // create a replica of failover group in target account - err = secondaryClient.FailoverGroups.CreateSecondaryReplicationGroup(ctx, failoverGroup.ID(), failoverGroup.ExternalID(), &CreateSecondaryReplicationGroupOptions{ - IfNotExists: Bool(true), + err = secondaryClient.FailoverGroups.CreateSecondaryReplicationGroup(ctx, failoverGroup.ID(), failoverGroup.ExternalID(), &sdk.CreateSecondaryReplicationGroupOptions{ + IfNotExists: sdk.Bool(true), }) require.NoError(t, err) @@ -618,8 +618,8 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { t.Run("perform suspend and resume", func(t *testing.T) { // suspend target failover group - opts := &AlterTargetFailoverGroupOptions{ - Suspend: Bool(true), + opts := &sdk.AlterTargetFailoverGroupOptions{ + Suspend: sdk.Bool(true), } err = secondaryClient.FailoverGroups.AlterTarget(ctx, failoverGroup.ID(), opts) require.NoError(t, err) @@ -627,11 +627,11 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { // verify that target failover group is suspended fg, err := secondaryClient.FailoverGroups.ShowByID(ctx, failoverGroup.ID()) require.NoError(t, err) - assert.Equal(t, FailoverGroupSecondaryStateSuspended, fg.SecondaryState) + assert.Equal(t, sdk.FailoverGroupSecondaryStateSuspended, fg.SecondaryState) // resume target failover group - opts = &AlterTargetFailoverGroupOptions{ - Resume: Bool(true), + opts = &sdk.AlterTargetFailoverGroupOptions{ + Resume: sdk.Bool(true), } err = secondaryClient.FailoverGroups.AlterTarget(ctx, failoverGroup.ID(), opts) require.NoError(t, err) @@ -639,13 +639,13 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { // verify that target failover group is resumed failoverGroup, err = secondaryClient.FailoverGroups.ShowByID(ctx, failoverGroup.ID()) require.NoError(t, err) - assert.Equal(t, FailoverGroupSecondaryStateStarted, failoverGroup.SecondaryState) + assert.Equal(t, sdk.FailoverGroupSecondaryStateStarted, failoverGroup.SecondaryState) }) t.Run("refresh target failover group", func(t *testing.T) { // refresh target failover group - opts := &AlterTargetFailoverGroupOptions{ - Refresh: Bool(true), + opts := &sdk.AlterTargetFailoverGroupOptions{ + Refresh: sdk.Bool(true), } err = secondaryClient.FailoverGroups.AlterTarget(ctx, failoverGroup.ID(), opts) require.NoError(t, err) @@ -653,8 +653,8 @@ func TestInt_FailoverGroupsAlterTarget(t *testing.T) { t.Run("promote secondary to primary", func(t *testing.T) { // promote secondary to primary - opts := &AlterTargetFailoverGroupOptions{ - Primary: Bool(true), + opts := &sdk.AlterTargetFailoverGroupOptions{ + Primary: sdk.Bool(true), } err = secondaryClient.FailoverGroups.AlterTarget(ctx, failoverGroup.ID(), opts) require.NoError(t, err) @@ -671,7 +671,7 @@ func TestInt_FailoverGroupsDrop(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("no options", func(t *testing.T) { failoverGroup, _ := createFailoverGroup(t, client) err := client.FailoverGroups.Drop(ctx, failoverGroup.ID(), nil) @@ -680,8 +680,8 @@ func TestInt_FailoverGroupsDrop(t *testing.T) { t.Run("with IfExists", func(t *testing.T) { failoverGroup, _ := createFailoverGroup(t, client) - opts := &DropFailoverGroupOptions{ - IfExists: Bool(true), + opts := &sdk.DropFailoverGroupOptions{ + IfExists: sdk.Bool(true), } err := client.FailoverGroups.Drop(ctx, failoverGroup.ID(), opts) require.NoError(t, err) @@ -693,7 +693,7 @@ func TestInt_FailoverGroupsShow(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) failoverGroupTest, failoverGroupCleanup := createFailoverGroup(t, client) t.Cleanup(failoverGroupCleanup) @@ -705,8 +705,8 @@ func TestInt_FailoverGroupsShow(t *testing.T) { }) t.Run("with show options", func(t *testing.T) { - showOptions := &ShowFailoverGroupOptions{ - InAccount: NewAccountIdentifierFromAccountLocator(client.accountLocator), + showOptions := &sdk.ShowFailoverGroupOptions{ + InAccount: sdk.NewAccountIdentifierFromAccountLocator(client.GetAccountLocator()), } failoverGroups, err := client.FailoverGroups.Show(ctx, showOptions) require.NoError(t, err) @@ -715,8 +715,8 @@ func TestInt_FailoverGroupsShow(t *testing.T) { }) t.Run("when searching a non-existent failover group", func(t *testing.T) { - _, err := client.FailoverGroups.ShowByID(ctx, NewAccountObjectIdentifier("does-not-exist")) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + _, err := client.FailoverGroups.ShowByID(ctx, sdk.NewAccountObjectIdentifier("does-not-exist")) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } @@ -725,24 +725,24 @@ func TestInt_FailoverGroupsShowDatabases(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) failoverGroupTest, failoverGroupCleanup := createFailoverGroup(t, client) t.Cleanup(failoverGroupCleanup) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeDatabases, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeDatabases, }, }, } err := client.FailoverGroups.AlterSource(ctx, failoverGroupTest.ID(), opts) require.NoError(t, err) - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedDatabases: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedDatabases: []sdk.AccountObjectIdentifier{ databaseTest.ID(), }, }, @@ -760,24 +760,24 @@ func TestInt_FailoverGroupsShowShares(t *testing.T) { t.Skip("Skipping TestInt_FailoverGroupsCreate") } client := testClient(t) - ctx := context.Background() + ctx := testContext(t) failoverGroupTest, failoverGroupCleanup := createFailoverGroup(t, client) t.Cleanup(failoverGroupCleanup) shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - opts := &AlterSourceFailoverGroupOptions{ - Set: &FailoverGroupSet{ - ObjectTypes: []PluralObjectType{ - PluralObjectTypeShares, + opts := &sdk.AlterSourceFailoverGroupOptions{ + Set: &sdk.FailoverGroupSet{ + ObjectTypes: []sdk.PluralObjectType{ + sdk.PluralObjectTypeShares, }, }, } err := client.FailoverGroups.AlterSource(ctx, failoverGroupTest.ID(), opts) require.NoError(t, err) - opts = &AlterSourceFailoverGroupOptions{ - Add: &FailoverGroupAdd{ - AllowedShares: []AccountObjectIdentifier{ + opts = &sdk.AlterSourceFailoverGroupOptions{ + Add: &sdk.FailoverGroupAdd{ + AllowedShares: []sdk.AccountObjectIdentifier{ shareTest.ID(), }, }, diff --git a/pkg/sdk/file_format_integration_test.go b/pkg/sdk/testint/file_format_integration_test.go similarity index 57% rename from pkg/sdk/file_format_integration_test.go rename to pkg/sdk/testint/file_format_integration_test.go index 5b0c7ba8d4..25e03ed01e 100644 --- a/pkg/sdk/file_format_integration_test.go +++ b/pkg/sdk/testint/file_format_integration_test.go @@ -1,49 +1,49 @@ -package sdk +package testint import ( - "context" "testing" "time" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_FileFormatsCreateAndRead(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) schema, schemaCleanup := createSchema(t, client, databaseTest) t.Cleanup(schemaCleanup) t.Run("CSV", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeCSV, - FileFormatTypeOptions: FileFormatTypeOptions{ - CSVCompression: &CSVCompressionBz2, - CSVRecordDelimiter: String("\\123"), - CSVFieldDelimiter: String("0x42"), - CSVFileExtension: String("c"), - CSVParseHeader: Bool(true), - CSVSkipBlankLines: Bool(true), - CSVDateFormat: String("d"), - CSVTimeFormat: String("e"), - CSVTimestampFormat: String("f"), - CSVBinaryFormat: &BinaryFormatBase64, - CSVEscape: String(`\`), - CSVEscapeUnenclosedField: String("h"), - CSVTrimSpace: Bool(true), - CSVFieldOptionallyEnclosedBy: String("'"), - CSVNullIf: &[]NullString{{"j"}, {"k"}}, - CSVErrorOnColumnCountMismatch: Bool(true), - CSVReplaceInvalidCharacters: Bool(true), - CSVEmptyFieldAsNull: Bool(true), - CSVSkipByteOrderMark: Bool(true), - CSVEncoding: &CSVEncodingGB18030, - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeCSV, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + CSVCompression: &sdk.CSVCompressionBz2, + CSVRecordDelimiter: sdk.String("\\123"), + CSVFieldDelimiter: sdk.String("0x42"), + CSVFileExtension: sdk.String("c"), + CSVParseHeader: sdk.Bool(true), + CSVSkipBlankLines: sdk.Bool(true), + CSVDateFormat: sdk.String("d"), + CSVTimeFormat: sdk.String("e"), + CSVTimestampFormat: sdk.String("f"), + CSVBinaryFormat: &sdk.BinaryFormatBase64, + CSVEscape: sdk.String(`\`), + CSVEscapeUnenclosedField: sdk.String("h"), + CSVTrimSpace: sdk.Bool(true), + CSVFieldOptionallyEnclosedBy: sdk.String("'"), + CSVNullIf: &[]sdk.NullString{{S: "j"}, {S: "k"}}, + CSVErrorOnColumnCountMismatch: sdk.Bool(true), + CSVReplaceInvalidCharacters: sdk.Bool(true), + CSVEmptyFieldAsNull: sdk.Bool(true), + CSVSkipByteOrderMark: sdk.Bool(true), + CSVEncoding: &sdk.CSVEncodingGB18030, + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -57,11 +57,11 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeCSV, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeCSV, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) - assert.Equal(t, &CSVCompressionBz2, result.Options.CSVCompression) + assert.Equal(t, &sdk.CSVCompressionBz2, result.Options.CSVCompression) assert.Equal(t, "S", *result.Options.CSVRecordDelimiter) // o123 == 83 == 'S' (ASCII) assert.Equal(t, "B", *result.Options.CSVFieldDelimiter) // 0x42 == 66 == 'B' (ASCII) assert.Equal(t, "c", *result.Options.CSVFileExtension) @@ -70,22 +70,22 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, "d", *result.Options.CSVDateFormat) assert.Equal(t, "e", *result.Options.CSVTimeFormat) assert.Equal(t, "f", *result.Options.CSVTimestampFormat) - assert.Equal(t, &BinaryFormatBase64, result.Options.CSVBinaryFormat) + assert.Equal(t, &sdk.BinaryFormatBase64, result.Options.CSVBinaryFormat) assert.Equal(t, `\`, *result.Options.CSVEscape) assert.Equal(t, "h", *result.Options.CSVEscapeUnenclosedField) assert.Equal(t, true, *result.Options.CSVTrimSpace) - assert.Equal(t, String("'"), result.Options.CSVFieldOptionallyEnclosedBy) - assert.Equal(t, &[]NullString{{"j"}, {"k"}}, result.Options.CSVNullIf) + assert.Equal(t, sdk.String("'"), result.Options.CSVFieldOptionallyEnclosedBy) + assert.Equal(t, &[]sdk.NullString{{S: "j"}, {S: "k"}}, result.Options.CSVNullIf) assert.Equal(t, true, *result.Options.CSVErrorOnColumnCountMismatch) assert.Equal(t, true, *result.Options.CSVReplaceInvalidCharacters) assert.Equal(t, true, *result.Options.CSVEmptyFieldAsNull) assert.Equal(t, true, *result.Options.CSVSkipByteOrderMark) - assert.Equal(t, &CSVEncodingGB18030, result.Options.CSVEncoding) + assert.Equal(t, &sdk.CSVEncodingGB18030, result.Options.CSVEncoding) describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeCSV, describeResult.Type) - assert.Equal(t, &CSVCompressionBz2, describeResult.Options.CSVCompression) + assert.Equal(t, sdk.FileFormatTypeCSV, describeResult.Type) + assert.Equal(t, &sdk.CSVCompressionBz2, describeResult.Options.CSVCompression) assert.Equal(t, "S", *describeResult.Options.CSVRecordDelimiter) // o123 == 83 == 'S' (ASCII) assert.Equal(t, "B", *describeResult.Options.CSVFieldDelimiter) // 0x42 == 66 == 'B' (ASCII) assert.Equal(t, "c", *describeResult.Options.CSVFileExtension) @@ -94,39 +94,39 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, "d", *describeResult.Options.CSVDateFormat) assert.Equal(t, "e", *describeResult.Options.CSVTimeFormat) assert.Equal(t, "f", *describeResult.Options.CSVTimestampFormat) - assert.Equal(t, &BinaryFormatBase64, describeResult.Options.CSVBinaryFormat) + assert.Equal(t, &sdk.BinaryFormatBase64, describeResult.Options.CSVBinaryFormat) assert.Equal(t, `\\`, *describeResult.Options.CSVEscape) // Describe does not un-escape backslashes, but show does .... assert.Equal(t, "h", *describeResult.Options.CSVEscapeUnenclosedField) assert.Equal(t, true, *describeResult.Options.CSVTrimSpace) - assert.Equal(t, String("'"), describeResult.Options.CSVFieldOptionallyEnclosedBy) - assert.Equal(t, &[]NullString{{"j"}, {"k"}}, describeResult.Options.CSVNullIf) + assert.Equal(t, sdk.String("'"), describeResult.Options.CSVFieldOptionallyEnclosedBy) + assert.Equal(t, &[]sdk.NullString{{S: "j"}, {S: "k"}}, describeResult.Options.CSVNullIf) assert.Equal(t, true, *describeResult.Options.CSVErrorOnColumnCountMismatch) assert.Equal(t, true, *describeResult.Options.CSVReplaceInvalidCharacters) assert.Equal(t, true, *describeResult.Options.CSVEmptyFieldAsNull) assert.Equal(t, true, *describeResult.Options.CSVSkipByteOrderMark) - assert.Equal(t, &CSVEncodingGB18030, describeResult.Options.CSVEncoding) + assert.Equal(t, &sdk.CSVEncodingGB18030, describeResult.Options.CSVEncoding) }) t.Run("JSON", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeJSON, - FileFormatTypeOptions: FileFormatTypeOptions{ - JSONCompression: &JSONCompressionBrotli, - JSONDateFormat: String("a"), - JSONTimeFormat: String("b"), - JSONTimestampFormat: String("c"), - JSONBinaryFormat: &BinaryFormatHex, - JSONTrimSpace: Bool(true), - JSONNullIf: &[]NullString{{"d"}, {"e"}}, - JSONFileExtension: String("f"), - JSONEnableOctal: Bool(true), - JSONAllowDuplicate: Bool(true), - JSONStripOuterArray: Bool(true), - JSONStripNullValues: Bool(true), - JSONIgnoreUTF8Errors: Bool(true), - JSONSkipByteOrderMark: Bool(true), - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeJSON, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + JSONCompression: &sdk.JSONCompressionBrotli, + JSONDateFormat: sdk.String("a"), + JSONTimeFormat: sdk.String("b"), + JSONTimestampFormat: sdk.String("c"), + JSONBinaryFormat: &sdk.BinaryFormatHex, + JSONTrimSpace: sdk.Bool(true), + JSONNullIf: &[]sdk.NullString{{S: "d"}, {S: "e"}}, + JSONFileExtension: sdk.String("f"), + JSONEnableOctal: sdk.Bool(true), + JSONAllowDuplicate: sdk.Bool(true), + JSONStripOuterArray: sdk.Bool(true), + JSONStripNullValues: sdk.Bool(true), + JSONIgnoreUTF8Errors: sdk.Bool(true), + JSONSkipByteOrderMark: sdk.Bool(true), + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -140,18 +140,18 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeJSON, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeJSON, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) - assert.Equal(t, JSONCompressionBrotli, *result.Options.JSONCompression) + assert.Equal(t, sdk.JSONCompressionBrotli, *result.Options.JSONCompression) assert.Equal(t, "a", *result.Options.JSONDateFormat) assert.Equal(t, "b", *result.Options.JSONTimeFormat) assert.Equal(t, "c", *result.Options.JSONTimestampFormat) - assert.Equal(t, BinaryFormatHex, *result.Options.JSONBinaryFormat) + assert.Equal(t, sdk.BinaryFormatHex, *result.Options.JSONBinaryFormat) assert.Equal(t, true, *result.Options.JSONTrimSpace) - assert.Equal(t, []NullString{{"d"}, {"e"}}, *result.Options.JSONNullIf) + assert.Equal(t, []sdk.NullString{{S: "d"}, {S: "e"}}, *result.Options.JSONNullIf) assert.Equal(t, "f", *result.Options.JSONFileExtension) assert.Equal(t, true, *result.Options.JSONEnableOctal) assert.Equal(t, true, *result.Options.JSONAllowDuplicate) @@ -162,14 +162,14 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeJSON, describeResult.Type) - assert.Equal(t, JSONCompressionBrotli, *describeResult.Options.JSONCompression) + assert.Equal(t, sdk.FileFormatTypeJSON, describeResult.Type) + assert.Equal(t, sdk.JSONCompressionBrotli, *describeResult.Options.JSONCompression) assert.Equal(t, "a", *describeResult.Options.JSONDateFormat) assert.Equal(t, "b", *describeResult.Options.JSONTimeFormat) assert.Equal(t, "c", *describeResult.Options.JSONTimestampFormat) - assert.Equal(t, BinaryFormatHex, *describeResult.Options.JSONBinaryFormat) + assert.Equal(t, sdk.BinaryFormatHex, *describeResult.Options.JSONBinaryFormat) assert.Equal(t, true, *describeResult.Options.JSONTrimSpace) - assert.Equal(t, []NullString{{"d"}, {"e"}}, *describeResult.Options.JSONNullIf) + assert.Equal(t, []sdk.NullString{{S: "d"}, {S: "e"}}, *describeResult.Options.JSONNullIf) assert.Equal(t, "f", *describeResult.Options.JSONFileExtension) assert.Equal(t, true, *describeResult.Options.JSONEnableOctal) assert.Equal(t, true, *describeResult.Options.JSONAllowDuplicate) @@ -179,16 +179,16 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, true, *describeResult.Options.JSONSkipByteOrderMark) }) t.Run("AVRO", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeAvro, - FileFormatTypeOptions: FileFormatTypeOptions{ - AvroCompression: &AvroCompressionGzip, - AvroTrimSpace: Bool(true), - AvroReplaceInvalidCharacters: Bool(true), - AvroNullIf: &[]NullString{{"a"}, {"b"}}, - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeAvro, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + AvroCompression: &sdk.AvroCompressionGzip, + AvroTrimSpace: sdk.Bool(true), + AvroReplaceInvalidCharacters: sdk.Bool(true), + AvroNullIf: &[]sdk.NullString{{S: "a"}, {S: "b"}}, + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -202,34 +202,34 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeAvro, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeAvro, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) - assert.Equal(t, AvroCompressionGzip, *result.Options.AvroCompression) + assert.Equal(t, sdk.AvroCompressionGzip, *result.Options.AvroCompression) assert.Equal(t, true, *result.Options.AvroTrimSpace) assert.Equal(t, true, *result.Options.AvroReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *result.Options.AvroNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *result.Options.AvroNullIf) describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeAvro, describeResult.Type) - assert.Equal(t, AvroCompressionGzip, *describeResult.Options.AvroCompression) + assert.Equal(t, sdk.FileFormatTypeAvro, describeResult.Type) + assert.Equal(t, sdk.AvroCompressionGzip, *describeResult.Options.AvroCompression) assert.Equal(t, true, *describeResult.Options.AvroTrimSpace) assert.Equal(t, true, *describeResult.Options.AvroReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *describeResult.Options.AvroNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *describeResult.Options.AvroNullIf) }) t.Run("ORC", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeORC, - FileFormatTypeOptions: FileFormatTypeOptions{ - ORCTrimSpace: Bool(true), - ORCReplaceInvalidCharacters: Bool(true), - ORCNullIf: &[]NullString{{"a"}, {"b"}}, - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeORC, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + ORCTrimSpace: sdk.Bool(true), + ORCReplaceInvalidCharacters: sdk.Bool(true), + ORCNullIf: &[]sdk.NullString{{S: "a"}, {S: "b"}}, + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -243,34 +243,34 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeORC, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeORC, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) assert.Equal(t, true, *result.Options.ORCTrimSpace) assert.Equal(t, true, *result.Options.ORCReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *result.Options.ORCNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *result.Options.ORCNullIf) describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeORC, describeResult.Type) + assert.Equal(t, sdk.FileFormatTypeORC, describeResult.Type) assert.Equal(t, true, *describeResult.Options.ORCTrimSpace) assert.Equal(t, true, *describeResult.Options.ORCReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *describeResult.Options.ORCNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *describeResult.Options.ORCNullIf) }) t.Run("PARQUET", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeParquet, - FileFormatTypeOptions: FileFormatTypeOptions{ - ParquetCompression: &ParquetCompressionLzo, - ParquetBinaryAsText: Bool(true), - ParquetTrimSpace: Bool(true), - ParquetReplaceInvalidCharacters: Bool(true), - ParquetNullIf: &[]NullString{{"a"}, {"b"}}, - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeParquet, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + ParquetCompression: &sdk.ParquetCompressionLzo, + ParquetBinaryAsText: sdk.Bool(true), + ParquetTrimSpace: sdk.Bool(true), + ParquetReplaceInvalidCharacters: sdk.Bool(true), + ParquetNullIf: &[]sdk.NullString{{S: "a"}, {S: "b"}}, + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -284,40 +284,40 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeParquet, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeParquet, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) - assert.Equal(t, ParquetCompressionLzo, *result.Options.ParquetCompression) + assert.Equal(t, sdk.ParquetCompressionLzo, *result.Options.ParquetCompression) assert.Equal(t, true, *result.Options.ParquetBinaryAsText) assert.Equal(t, true, *result.Options.ParquetTrimSpace) assert.Equal(t, true, *result.Options.ParquetReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *result.Options.ParquetNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *result.Options.ParquetNullIf) describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeParquet, describeResult.Type) - assert.Equal(t, ParquetCompressionLzo, *describeResult.Options.ParquetCompression) + assert.Equal(t, sdk.FileFormatTypeParquet, describeResult.Type) + assert.Equal(t, sdk.ParquetCompressionLzo, *describeResult.Options.ParquetCompression) assert.Equal(t, true, *describeResult.Options.ParquetBinaryAsText) assert.Equal(t, true, *describeResult.Options.ParquetTrimSpace) assert.Equal(t, true, *describeResult.Options.ParquetReplaceInvalidCharacters) - assert.Equal(t, []NullString{{"a"}, {"b"}}, *describeResult.Options.ParquetNullIf) + assert.Equal(t, []sdk.NullString{{S: "a"}, {S: "b"}}, *describeResult.Options.ParquetNullIf) }) t.Run("XML", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) - err := client.FileFormats.Create(ctx, id, &CreateFileFormatOptions{ - Type: FileFormatTypeXML, - FileFormatTypeOptions: FileFormatTypeOptions{ - XMLCompression: &XMLCompressionDeflate, - XMLIgnoreUTF8Errors: Bool(true), - XMLPreserveSpace: Bool(true), - XMLStripOuterElement: Bool(true), - XMLDisableSnowflakeData: Bool(true), - XMLDisableAutoConvert: Bool(true), - XMLSkipByteOrderMark: Bool(true), - - Comment: String("test comment"), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schema.Name, randomString(t)) + err := client.FileFormats.Create(ctx, id, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeXML, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + XMLCompression: &sdk.XMLCompressionDeflate, + XMLIgnoreUTF8Errors: sdk.Bool(true), + XMLPreserveSpace: sdk.Bool(true), + XMLStripOuterElement: sdk.Bool(true), + XMLDisableSnowflakeData: sdk.Bool(true), + XMLDisableAutoConvert: sdk.Bool(true), + XMLSkipByteOrderMark: sdk.Bool(true), + + Comment: sdk.String("test comment"), }, }) require.NoError(t, err) @@ -331,12 +331,12 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { assert.Equal(t, id, result.Name) assert.WithinDuration(t, time.Now(), result.CreatedOn, 5*time.Second) - assert.Equal(t, FileFormatTypeXML, result.Type) - assert.Equal(t, client.config.Role, result.Owner) + assert.Equal(t, sdk.FileFormatTypeXML, result.Type) + assert.Equal(t, client.GetConfig().Role, result.Owner) assert.Equal(t, "test comment", result.Comment) assert.Equal(t, "ROLE", result.OwnerRoleType) - assert.Equal(t, XMLCompressionDeflate, *result.Options.XMLCompression) + assert.Equal(t, sdk.XMLCompressionDeflate, *result.Options.XMLCompression) assert.Equal(t, true, *result.Options.XMLIgnoreUTF8Errors) assert.Equal(t, true, *result.Options.XMLPreserveSpace) assert.Equal(t, true, *result.Options.XMLStripOuterElement) @@ -346,8 +346,8 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { describeResult, err := client.FileFormats.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, FileFormatTypeXML, describeResult.Type) - assert.Equal(t, XMLCompressionDeflate, *describeResult.Options.XMLCompression) + assert.Equal(t, sdk.FileFormatTypeXML, describeResult.Type) + assert.Equal(t, sdk.XMLCompressionDeflate, *describeResult.Options.XMLCompression) assert.Equal(t, true, *describeResult.Options.XMLIgnoreUTF8Errors) assert.Equal(t, true, *describeResult.Options.XMLPreserveSpace) assert.Equal(t, true, *describeResult.Options.XMLStripOuterElement) @@ -359,7 +359,7 @@ func TestInt_FileFormatsCreateAndRead(t *testing.T) { func TestInt_FileFormatsAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, cleanupDatabase := createDatabase(t, client) t.Cleanup(cleanupDatabase) @@ -370,25 +370,25 @@ func TestInt_FileFormatsAlter(t *testing.T) { fileFormat, fileFormatCleanup := createFileFormat(t, client, schemaTest.ID()) t.Cleanup(fileFormatCleanup) oldId := fileFormat.ID() - newId := NewSchemaObjectIdentifier(oldId.databaseName, oldId.schemaName, randomString(t)) + newId := sdk.NewSchemaObjectIdentifier(oldId.DatabaseName(), oldId.SchemaName(), randomString(t)) - err := client.FileFormats.Alter(ctx, oldId, &AlterFileFormatOptions{ - Rename: &AlterFileFormatRenameOptions{ + err := client.FileFormats.Alter(ctx, oldId, &sdk.AlterFileFormatOptions{ + Rename: &sdk.AlterFileFormatRenameOptions{ NewName: newId, }, }) require.NoError(t, err) _, err = client.FileFormats.ShowByID(ctx, oldId) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) result, err := client.FileFormats.ShowByID(ctx, newId) require.NoError(t, err) assert.Equal(t, newId, result.Name) // Undo rename so we can clean up - err = client.FileFormats.Alter(ctx, newId, &AlterFileFormatOptions{ - Rename: &AlterFileFormatRenameOptions{ + err = client.FileFormats.Alter(ctx, newId, &sdk.AlterFileFormatOptions{ + Rename: &sdk.AlterFileFormatRenameOptions{ NewName: oldId, }, }) @@ -396,33 +396,33 @@ func TestInt_FileFormatsAlter(t *testing.T) { }) t.Run("set", func(t *testing.T) { - fileFormat, fileFormatCleanup := createFileFormatWithOptions(t, client, schemaTest.ID(), &CreateFileFormatOptions{ - Type: FileFormatTypeCSV, - FileFormatTypeOptions: FileFormatTypeOptions{ - CSVCompression: &CSVCompressionAuto, - CSVParseHeader: Bool(false), + fileFormat, fileFormatCleanup := createFileFormatWithOptions(t, client, schemaTest.ID(), &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeCSV, + FileFormatTypeOptions: sdk.FileFormatTypeOptions{ + CSVCompression: &sdk.CSVCompressionAuto, + CSVParseHeader: sdk.Bool(false), }, }) t.Cleanup(fileFormatCleanup) - err := client.FileFormats.Alter(ctx, fileFormat.ID(), &AlterFileFormatOptions{ - Set: &FileFormatTypeOptions{ - CSVCompression: &CSVCompressionBz2, - CSVParseHeader: Bool(true), + err := client.FileFormats.Alter(ctx, fileFormat.ID(), &sdk.AlterFileFormatOptions{ + Set: &sdk.FileFormatTypeOptions{ + CSVCompression: &sdk.CSVCompressionBz2, + CSVParseHeader: sdk.Bool(true), }, }) require.NoError(t, err) result, err := client.FileFormats.ShowByID(ctx, fileFormat.ID()) require.NoError(t, err) - assert.Equal(t, CSVCompressionBz2, *result.Options.CSVCompression) + assert.Equal(t, sdk.CSVCompressionBz2, *result.Options.CSVCompression) assert.Equal(t, true, *result.Options.CSVParseHeader) }) } func TestInt_FileFormatsDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, cleanupDatabase := createDatabase(t, client) t.Cleanup(cleanupDatabase) @@ -434,24 +434,24 @@ func TestInt_FileFormatsDrop(t *testing.T) { require.NoError(t, err) _, err = client.FileFormats.ShowByID(ctx, fileFormat.ID()) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("with IfExists", func(t *testing.T) { fileFormat, _ := createFileFormat(t, client, schemaTest.ID()) - err := client.FileFormats.Drop(ctx, fileFormat.ID(), &DropFileFormatOptions{ - IfExists: Bool(true), + err := client.FileFormats.Drop(ctx, fileFormat.ID(), &sdk.DropFileFormatOptions{ + IfExists: sdk.Bool(true), }) require.NoError(t, err) _, err = client.FileFormats.ShowByID(ctx, fileFormat.ID()) - require.ErrorIs(t, err, errObjectNotExistOrAuthorized) + require.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_FileFormatsShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, cleanupDatabase := createDatabase(t, client) t.Cleanup(cleanupDatabase) @@ -471,9 +471,9 @@ func TestInt_FileFormatsShow(t *testing.T) { }) t.Run("LIKE", func(t *testing.T) { - fileFormats, err := client.FileFormats.Show(ctx, &ShowFileFormatsOptions{ - Like: &Like{ - Pattern: String(fileFormatTest.Name.name), + fileFormats, err := client.FileFormats.Show(ctx, &sdk.ShowFileFormatsOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(fileFormatTest.Name.Name()), }, }) require.NoError(t, err) @@ -482,8 +482,8 @@ func TestInt_FileFormatsShow(t *testing.T) { }) t.Run("IN", func(t *testing.T) { - fileFormats, err := client.FileFormats.Show(ctx, &ShowFileFormatsOptions{ - In: &In{ + fileFormats, err := client.FileFormats.Show(ctx, &sdk.ShowFileFormatsOptions{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -496,7 +496,7 @@ func TestInt_FileFormatsShow(t *testing.T) { func TestInt_FileFormatsShowById(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, cleanupDatabase := createDatabase(t, client) t.Cleanup(cleanupDatabase) @@ -518,8 +518,8 @@ func TestInt_FileFormatsShowById(t *testing.T) { fileFormat, err := client.FileFormats.ShowByID(ctx, fileFormatTest.ID()) require.NoError(t, err) - assert.Equal(t, databaseTest.Name, fileFormat.Name.databaseName) - assert.Equal(t, schemaTest.Name, fileFormat.Name.schemaName) - assert.Equal(t, fileFormatTest.Name.name, fileFormat.Name.name) + assert.Equal(t, databaseTest.Name, fileFormat.Name.DatabaseName()) + assert.Equal(t, schemaTest.Name, fileFormat.Name.SchemaName()) + assert.Equal(t, fileFormatTest.Name.Name(), fileFormat.Name.Name()) }) } diff --git a/pkg/sdk/grants_integration_test.go b/pkg/sdk/testint/grants_integration_test.go similarity index 52% rename from pkg/sdk/grants_integration_test.go rename to pkg/sdk/testint/grants_integration_test.go index fc9ad88b74..67d1b3f7f3 100644 --- a/pkg/sdk/grants_integration_test.go +++ b/pkg/sdk/testint/grants_integration_test.go @@ -1,33 +1,33 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("on account", func(t *testing.T) { roleTest, roleCleanup := createRole(t, client) t.Cleanup(roleCleanup) - privileges := &AccountRoleGrantPrivileges{ - GlobalPrivileges: []GlobalPrivilege{GlobalPrivilegeMonitorUsage, GlobalPrivilegeApplyTag}, + privileges := &sdk.AccountRoleGrantPrivileges{ + GlobalPrivileges: []sdk.GlobalPrivilege{sdk.GlobalPrivilegeMonitorUsage, sdk.GlobalPrivilegeApplyTag}, } - on := &AccountRoleGrantOn{ - Account: Bool(true), + on := &sdk.AccountRoleGrantOn{ + Account: sdk.Bool(true), } - opts := &GrantPrivilegesToAccountRoleOptions{ - WithGrantOption: Bool(true), + opts := &sdk.GrantPrivilegesToAccountRoleOptions{ + WithGrantOption: sdk.Bool(true), } err := client.Grants.GrantPrivilegesToAccountRole(ctx, privileges, on, roleTest.ID(), opts) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -36,9 +36,9 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { // The order of the grants is not guaranteed for _, grant := range grants { switch grant.Privilege { - case GlobalPrivilegeMonitorUsage.String(): + case sdk.GlobalPrivilegeMonitorUsage.String(): assert.True(t, grant.GrantOption) - case GlobalPrivilegeApplyTag.String(): + case sdk.GlobalPrivilegeApplyTag.String(): assert.True(t, grant.GrantOption) default: t.Errorf("unexpected privilege: %s", grant.Privilege) @@ -48,8 +48,8 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { // now revoke and verify that the grant(s) are gone err = client.Grants.RevokePrivilegesFromAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -62,30 +62,30 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { t.Cleanup(roleCleanup) resourceMonitorTest, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) - privileges := &AccountRoleGrantPrivileges{ - AccountObjectPrivileges: []AccountObjectPrivilege{AccountObjectPrivilegeMonitor}, + privileges := &sdk.AccountRoleGrantPrivileges{ + AccountObjectPrivileges: []sdk.AccountObjectPrivilege{sdk.AccountObjectPrivilegeMonitor}, } - on := &AccountRoleGrantOn{ - AccountObject: &GrantOnAccountObject{ - ResourceMonitor: Pointer(resourceMonitorTest.ID()), + on := &sdk.AccountRoleGrantOn{ + AccountObject: &sdk.GrantOnAccountObject{ + ResourceMonitor: sdk.Pointer(resourceMonitorTest.ID()), }, } err := client.Grants.GrantPrivilegesToAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(grants)) - assert.Equal(t, AccountObjectPrivilegeMonitor.String(), grants[0].Privilege) + assert.Equal(t, sdk.AccountObjectPrivilegeMonitor.String(), grants[0].Privilege) // now revoke and verify that the grant(s) are gone err = client.Grants.RevokePrivilegesFromAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -100,30 +100,30 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { t.Cleanup(databaseCleanup) schemaTest, schemaCleanup := createSchema(t, client, databaseTest) t.Cleanup(schemaCleanup) - privileges := &AccountRoleGrantPrivileges{ - SchemaPrivileges: []SchemaPrivilege{SchemaPrivilegeCreateAlert}, + privileges := &sdk.AccountRoleGrantPrivileges{ + SchemaPrivileges: []sdk.SchemaPrivilege{sdk.SchemaPrivilegeCreateAlert}, } - on := &AccountRoleGrantOn{ - Schema: &GrantOnSchema{ - Schema: Pointer(schemaTest.ID()), + on := &sdk.AccountRoleGrantOn{ + Schema: &sdk.GrantOnSchema{ + Schema: sdk.Pointer(schemaTest.ID()), }, } err := client.Grants.GrantPrivilegesToAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(grants)) - assert.Equal(t, SchemaPrivilegeCreateAlert.String(), grants[0].Privilege) + assert.Equal(t, sdk.SchemaPrivilegeCreateAlert.String(), grants[0].Privilege) // now revoke and verify that the grant(s) are gone err = client.Grants.RevokePrivilegesFromAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -140,34 +140,34 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { t.Cleanup(schemaCleanup) tableTest, tableTestCleanup := createTable(t, client, databaseTest, schemaTest) t.Cleanup(tableTestCleanup) - privileges := &AccountRoleGrantPrivileges{ - SchemaObjectPrivileges: []SchemaObjectPrivilege{SchemaObjectPrivilegeSelect}, + privileges := &sdk.AccountRoleGrantPrivileges{ + SchemaObjectPrivileges: []sdk.SchemaObjectPrivilege{sdk.SchemaObjectPrivilegeSelect}, } - on := &AccountRoleGrantOn{ - SchemaObject: &GrantOnSchemaObject{ - All: &GrantOnSchemaObjectIn{ - PluralObjectType: PluralObjectTypeTables, - InSchema: Pointer(schemaTest.ID()), + on := &sdk.AccountRoleGrantOn{ + SchemaObject: &sdk.GrantOnSchemaObject{ + All: &sdk.GrantOnSchemaObjectIn{ + PluralObjectType: sdk.PluralObjectTypeTables, + InSchema: sdk.Pointer(schemaTest.ID()), }, }, } err := client.Grants.GrantPrivilegesToAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(grants)) - assert.Equal(t, SchemaObjectPrivilegeSelect.String(), grants[0].Privilege) + assert.Equal(t, sdk.SchemaObjectPrivilegeSelect.String(), grants[0].Privilege) assert.Equal(t, tableTest.ID().FullyQualifiedName(), grants[0].Name.FullyQualifiedName()) // now revoke and verify that the grant(s) are gone err = client.Grants.RevokePrivilegesFromAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -180,34 +180,34 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { t.Cleanup(roleCleanup) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - privileges := &AccountRoleGrantPrivileges{ - SchemaObjectPrivileges: []SchemaObjectPrivilege{SchemaObjectPrivilegeSelect}, + privileges := &sdk.AccountRoleGrantPrivileges{ + SchemaObjectPrivileges: []sdk.SchemaObjectPrivilege{sdk.SchemaObjectPrivilegeSelect}, } - on := &AccountRoleGrantOn{ - SchemaObject: &GrantOnSchemaObject{ - Future: &GrantOnSchemaObjectIn{ - PluralObjectType: PluralObjectTypeExternalTables, - InDatabase: Pointer(databaseTest.ID()), + on := &sdk.AccountRoleGrantOn{ + SchemaObject: &sdk.GrantOnSchemaObject{ + Future: &sdk.GrantOnSchemaObjectIn{ + PluralObjectType: sdk.PluralObjectTypeExternalTables, + InDatabase: sdk.Pointer(databaseTest.ID()), }, }, } err := client.Grants.GrantPrivilegesToAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - Future: Bool(true), - To: &ShowGrantsTo{ + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + Future: sdk.Bool(true), + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) require.NoError(t, err) assert.Equal(t, 1, len(grants)) - assert.Equal(t, SchemaObjectPrivilegeSelect.String(), grants[0].Privilege) + assert.Equal(t, sdk.SchemaObjectPrivilegeSelect.String(), grants[0].Privilege) // now revoke and verify that the grant(s) are gone err = client.Grants.RevokePrivilegesFromAccountRole(ctx, privileges, on, roleTest.ID(), nil) require.NoError(t, err) - grants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + grants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleTest.ID(), }, }) @@ -218,27 +218,27 @@ func TestInt_GrantAndRevokePrivilegesToAccountRole(t *testing.T) { func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) t.Run("on database", func(t *testing.T) { databaseRole, _ := createDatabaseRole(t, client, database) - databaseRoleId := NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) + databaseRoleId := sdk.NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) - privileges := &DatabaseRoleGrantPrivileges{ - DatabasePrivileges: []AccountObjectPrivilege{AccountObjectPrivilegeCreateSchema}, + privileges := &sdk.DatabaseRoleGrantPrivileges{ + DatabasePrivileges: []sdk.AccountObjectPrivilege{sdk.AccountObjectPrivilegeCreateSchema}, } - on := &DatabaseRoleGrantOn{ - Database: Pointer(database.ID()), + on := &sdk.DatabaseRoleGrantOn{ + Database: sdk.Pointer(database.ID()), } err := client.Grants.GrantPrivilegesToDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) @@ -246,48 +246,48 @@ func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { // Expecting two grants because database role has usage on database by default require.Equal(t, 2, len(returnedGrants)) - usagePrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == AccountObjectPrivilegeUsage.String() }) + usagePrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.AccountObjectPrivilegeUsage.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) - createSchemaPrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == AccountObjectPrivilegeCreateSchema.String() }) + createSchemaPrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.AccountObjectPrivilegeCreateSchema.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeDatabase, createSchemaPrivilege.GrantedOn) - assert.Equal(t, ObjectTypeDatabaseRole, createSchemaPrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeDatabase, createSchemaPrivilege.GrantedOn) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, createSchemaPrivilege.GrantedTo) // now revoke and verify that the new grant is gone err = client.Grants.RevokePrivilegesFromDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) require.NoError(t, err) assert.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) }) t.Run("on schema", func(t *testing.T) { databaseRole, _ := createDatabaseRole(t, client, database) - databaseRoleId := NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) + databaseRoleId := sdk.NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) schema, _ := createSchema(t, client, database) - privileges := &DatabaseRoleGrantPrivileges{ - SchemaPrivileges: []SchemaPrivilege{SchemaPrivilegeCreateAlert}, + privileges := &sdk.DatabaseRoleGrantPrivileges{ + SchemaPrivileges: []sdk.SchemaPrivilege{sdk.SchemaPrivilegeCreateAlert}, } - on := &DatabaseRoleGrantOn{ - Schema: &GrantOnSchema{ - Schema: Pointer(schema.ID()), + on := &sdk.DatabaseRoleGrantOn{ + Schema: &sdk.GrantOnSchema{ + Schema: sdk.Pointer(schema.ID()), }, } err := client.Grants.GrantPrivilegesToDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) @@ -295,43 +295,43 @@ func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { // Expecting two grants because database role has usage on database by default require.Equal(t, 2, len(returnedGrants)) - usagePrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == AccountObjectPrivilegeUsage.String() }) + usagePrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.AccountObjectPrivilegeUsage.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) - createAlertPrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == SchemaPrivilegeCreateAlert.String() }) + createAlertPrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.SchemaPrivilegeCreateAlert.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeSchema, createAlertPrivilege.GrantedOn) - assert.Equal(t, ObjectTypeDatabaseRole, createAlertPrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeSchema, createAlertPrivilege.GrantedOn) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, createAlertPrivilege.GrantedTo) // now revoke and verify that the new grant is gone err = client.Grants.RevokePrivilegesFromDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) require.NoError(t, err) assert.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) }) t.Run("on schema object", func(t *testing.T) { databaseRole, _ := createDatabaseRole(t, client, database) - databaseRoleId := NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) + databaseRoleId := sdk.NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) schema, _ := createSchema(t, client, database) table, _ := createTable(t, client, database, schema) - privileges := &DatabaseRoleGrantPrivileges{ - SchemaObjectPrivileges: []SchemaObjectPrivilege{SchemaObjectPrivilegeSelect}, + privileges := &sdk.DatabaseRoleGrantPrivileges{ + SchemaObjectPrivileges: []sdk.SchemaObjectPrivilege{sdk.SchemaObjectPrivilegeSelect}, } - on := &DatabaseRoleGrantOn{ - SchemaObject: &GrantOnSchemaObject{ - All: &GrantOnSchemaObjectIn{ - PluralObjectType: PluralObjectTypeTables, - InSchema: Pointer(schema.ID()), + on := &sdk.DatabaseRoleGrantOn{ + SchemaObject: &sdk.GrantOnSchemaObject{ + All: &sdk.GrantOnSchemaObjectIn{ + PluralObjectType: sdk.PluralObjectTypeTables, + InSchema: sdk.Pointer(schema.ID()), }, }, } @@ -339,8 +339,8 @@ func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { err := client.Grants.GrantPrivilegesToDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) @@ -348,68 +348,68 @@ func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { // Expecting two grants because database role has usage on database by default require.Equal(t, 2, len(returnedGrants)) - usagePrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == AccountObjectPrivilegeUsage.String() }) + usagePrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.AccountObjectPrivilegeUsage.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) - selectPrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == SchemaObjectPrivilegeSelect.String() }) + selectPrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.SchemaObjectPrivilegeSelect.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeTable, selectPrivilege.GrantedOn) - assert.Equal(t, ObjectTypeDatabaseRole, selectPrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeTable, selectPrivilege.GrantedOn) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, selectPrivilege.GrantedTo) assert.Equal(t, table.ID().FullyQualifiedName(), selectPrivilege.Name.FullyQualifiedName()) // now revoke and verify that the new grant is gone err = client.Grants.RevokePrivilegesFromDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) require.NoError(t, err) assert.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.AccountObjectPrivilegeUsage.String(), returnedGrants[0].Privilege) }) t.Run("on future schema object", func(t *testing.T) { databaseRole, _ := createDatabaseRole(t, client, database) - databaseRoleId := NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) + databaseRoleId := sdk.NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) - privileges := &DatabaseRoleGrantPrivileges{ - SchemaObjectPrivileges: []SchemaObjectPrivilege{SchemaObjectPrivilegeSelect}, + privileges := &sdk.DatabaseRoleGrantPrivileges{ + SchemaObjectPrivileges: []sdk.SchemaObjectPrivilege{sdk.SchemaObjectPrivilegeSelect}, } - on := &DatabaseRoleGrantOn{ - SchemaObject: &GrantOnSchemaObject{ - Future: &GrantOnSchemaObjectIn{ - PluralObjectType: PluralObjectTypeExternalTables, - InDatabase: Pointer(database.ID()), + on := &sdk.DatabaseRoleGrantOn{ + SchemaObject: &sdk.GrantOnSchemaObject{ + Future: &sdk.GrantOnSchemaObjectIn{ + PluralObjectType: sdk.PluralObjectTypeExternalTables, + InDatabase: sdk.Pointer(database.ID()), }, }, } err := client.Grants.GrantPrivilegesToDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - Future: Bool(true), - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + Future: sdk.Bool(true), + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) require.NoError(t, err) require.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, SchemaObjectPrivilegeSelect.String(), returnedGrants[0].Privilege) - assert.Equal(t, ObjectTypeExternalTable, returnedGrants[0].GrantOn) - assert.Equal(t, ObjectTypeDatabaseRole, returnedGrants[0].GrantTo) + assert.Equal(t, sdk.SchemaObjectPrivilegeSelect.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.ObjectTypeExternalTable, returnedGrants[0].GrantOn) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, returnedGrants[0].GrantTo) // now revoke and verify that the new grant is gone err = client.Grants.RevokePrivilegesFromDatabaseRole(ctx, privileges, on, databaseRoleId, nil) require.NoError(t, err) - returnedGrants, err = client.Grants.Show(ctx, &ShowGrantOptions{ - Future: Bool(true), - To: &ShowGrantsTo{ + returnedGrants, err = client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + Future: sdk.Bool(true), + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) @@ -420,31 +420,31 @@ func TestInt_GrantAndRevokePrivilegesToDatabaseRole(t *testing.T) { func TestInt_GrantPrivilegeToShare(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) t.Run("without options", func(t *testing.T) { - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, nil, shareTest.ID()) + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, nil, shareTest.ID()) require.Error(t, err) }) t.Run("with options", func(t *testing.T) { - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - On: &ShowGrantsOn{ - Object: &Object{ - ObjectType: ObjectTypeDatabase, + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + On: &sdk.ShowGrantsOn{ + Object: &sdk.Object{ + ObjectType: sdk.ObjectTypeDatabase, Name: databaseTest.ID(), }, }, }) require.NoError(t, err) assert.LessOrEqual(t, 2, len(grants)) - var shareGrant *Grant + var shareGrant *sdk.Grant for i, grant := range grants { if grant.GranteeName.Name() == shareTest.ID().Name() { shareGrant = &grants[i] @@ -452,11 +452,11 @@ func TestInt_GrantPrivilegeToShare(t *testing.T) { } } assert.NotNil(t, shareGrant) - assert.Equal(t, string(ObjectPrivilegeUsage), shareGrant.Privilege) - assert.Equal(t, ObjectTypeDatabase, shareGrant.GrantedOn) - assert.Equal(t, ObjectTypeShare, shareGrant.GrantedTo) + assert.Equal(t, string(sdk.ObjectPrivilegeUsage), shareGrant.Privilege) + assert.Equal(t, sdk.ObjectTypeDatabase, shareGrant.GrantedOn) + assert.Equal(t, sdk.ObjectTypeShare, shareGrant.GrantedTo) assert.Equal(t, databaseTest.ID().Name(), shareGrant.Name.Name()) - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) @@ -465,21 +465,21 @@ func TestInt_GrantPrivilegeToShare(t *testing.T) { func TestInt_RevokePrivilegeToShare(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Run("without options", func(t *testing.T) { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, nil, shareTest.ID()) + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, nil, shareTest.ID()) require.Error(t, err) }) t.Run("with options", func(t *testing.T) { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) @@ -488,32 +488,32 @@ func TestInt_RevokePrivilegeToShare(t *testing.T) { func TestInt_GrantOwnership(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) t.Run("on schema object to database role", func(t *testing.T) { databaseRole, _ := createDatabaseRole(t, client, database) - databaseRoleId := NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) + databaseRoleId := sdk.NewDatabaseObjectIdentifier(database.Name, databaseRole.Name) schema, _ := createSchema(t, client, database) table, _ := createTable(t, client, database, schema) - on := OwnershipGrantOn{ - Object: &Object{ - ObjectType: ObjectTypeTable, + on := sdk.OwnershipGrantOn{ + Object: &sdk.Object{ + ObjectType: sdk.ObjectTypeTable, Name: table.ID(), }, } - to := OwnershipGrantTo{ + to := sdk.OwnershipGrantTo{ DatabaseRoleName: &databaseRoleId, } err := client.Grants.GrantOwnership(ctx, on, to, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ DatabaseRole: databaseRoleId, }, }) @@ -521,14 +521,14 @@ func TestInt_GrantOwnership(t *testing.T) { // Expecting two grants because database role has usage on database by default require.Equal(t, 2, len(returnedGrants)) - usagePrivilege, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == AccountObjectPrivilegeUsage.String() }) + usagePrivilege, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.AccountObjectPrivilegeUsage.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, usagePrivilege.GrantedTo) - ownership, err := findOne[Grant](returnedGrants, func(g Grant) bool { return g.Privilege == SchemaObjectOwnership.String() }) + ownership, err := sdk.FindOne[sdk.Grant](returnedGrants, func(g sdk.Grant) bool { return g.Privilege == sdk.SchemaObjectOwnership.String() }) require.NoError(t, err) - assert.Equal(t, ObjectTypeTable, ownership.GrantedOn) - assert.Equal(t, ObjectTypeDatabaseRole, ownership.GrantedTo) + assert.Equal(t, sdk.ObjectTypeTable, ownership.GrantedOn) + assert.Equal(t, sdk.ObjectTypeDatabaseRole, ownership.GrantedTo) assert.Equal(t, table.ID().FullyQualifiedName(), ownership.Name.FullyQualifiedName()) }) @@ -537,31 +537,31 @@ func TestInt_GrantOwnership(t *testing.T) { t.Cleanup(roleCleanup) roleId := role.ID() - on := OwnershipGrantOn{ - Future: &GrantOnSchemaObjectIn{ - PluralObjectType: PluralObjectTypeExternalTables, - InDatabase: Pointer(database.ID()), + on := sdk.OwnershipGrantOn{ + Future: &sdk.GrantOnSchemaObjectIn{ + PluralObjectType: sdk.PluralObjectTypeExternalTables, + InDatabase: sdk.Pointer(database.ID()), }, } - to := OwnershipGrantTo{ + to := sdk.OwnershipGrantTo{ AccountRoleName: &roleId, } err := client.Grants.GrantOwnership(ctx, on, to, nil) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - Future: Bool(true), - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + Future: sdk.Bool(true), + To: &sdk.ShowGrantsTo{ Role: roleId, }, }) require.NoError(t, err) require.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, SchemaObjectOwnership.String(), returnedGrants[0].Privilege) - assert.Equal(t, ObjectTypeExternalTable, returnedGrants[0].GrantOn) - assert.Equal(t, ObjectTypeRole, returnedGrants[0].GrantTo) + assert.Equal(t, sdk.SchemaObjectOwnership.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.ObjectTypeExternalTable, returnedGrants[0].GrantOn) + assert.Equal(t, sdk.ObjectTypeRole, returnedGrants[0].GrantTo) assert.Equal(t, roleId, returnedGrants[0].GranteeName) }) @@ -576,50 +576,50 @@ func TestInt_GrantOwnership(t *testing.T) { t.Cleanup(roleCleanup) roleId := role.ID() - on := OwnershipGrantOn{ - Object: &Object{ - ObjectType: ObjectTypeWarehouse, + on := sdk.OwnershipGrantOn{ + Object: &sdk.Object{ + ObjectType: sdk.ObjectTypeWarehouse, Name: warehouse.ID(), }, } - to := OwnershipGrantTo{ + to := sdk.OwnershipGrantTo{ AccountRoleName: &roleId, } - currentGrants := OwnershipCurrentGrants{ - OutboundPrivileges: Copy, + currentGrants := sdk.OwnershipCurrentGrants{ + OutboundPrivileges: sdk.Copy, } - err := client.Grants.GrantOwnership(ctx, on, to, &GrantOwnershipOptions{CurrentGrants: ¤tGrants}) + err := client.Grants.GrantOwnership(ctx, on, to, &sdk.GrantOwnershipOptions{CurrentGrants: ¤tGrants}) require.NoError(t, err) - returnedGrants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - To: &ShowGrantsTo{ + returnedGrants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + To: &sdk.ShowGrantsTo{ Role: roleId, }, }) require.NoError(t, err) require.Equal(t, 1, len(returnedGrants)) - assert.Equal(t, SchemaObjectOwnership.String(), returnedGrants[0].Privilege) - assert.Equal(t, ObjectTypeWarehouse, returnedGrants[0].GrantedOn) - assert.Equal(t, ObjectTypeRole, returnedGrants[0].GrantedTo) + assert.Equal(t, sdk.SchemaObjectOwnership.String(), returnedGrants[0].Privilege) + assert.Equal(t, sdk.ObjectTypeWarehouse, returnedGrants[0].GrantedOn) + assert.Equal(t, sdk.ObjectTypeRole, returnedGrants[0].GrantedTo) assert.Equal(t, roleId, returnedGrants[0].GranteeName) }) } func TestInt_ShowGrants(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) @@ -629,10 +629,10 @@ func TestInt_ShowGrants(t *testing.T) { require.NoError(t, err) }) t.Run("with options", func(t *testing.T) { - grants, err := client.Grants.Show(ctx, &ShowGrantOptions{ - On: &ShowGrantsOn{ - Object: &Object{ - ObjectType: ObjectTypeDatabase, + grants, err := client.Grants.Show(ctx, &sdk.ShowGrantOptions{ + On: &sdk.ShowGrantsOn{ + Object: &sdk.Object{ + ObjectType: sdk.ObjectTypeDatabase, Name: databaseTest.ID(), }, }, diff --git a/pkg/sdk/testint/helpers.go b/pkg/sdk/testint/helpers.go new file mode 100644 index 0000000000..f3c41ad47f --- /dev/null +++ b/pkg/sdk/testint/helpers.go @@ -0,0 +1,691 @@ +package testint + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + "github.com/stretchr/testify/require" +) + +// there is no direct way to get the account identifier from Snowflake API, but you can get it if you know +// the account locator and by filtering the list of accounts in replication accounts by the account locator +func getAccountIdentifier(t *testing.T, client *sdk.Client) sdk.AccountIdentifier { + t.Helper() + ctx := context.Background() + currentAccountLocator, err := client.ContextFunctions.CurrentAccount(ctx) + require.NoError(t, err) + replicationAccounts, err := client.ReplicationFunctions.ShowReplicationAccounts(ctx) + require.NoError(t, err) + for _, replicationAccount := range replicationAccounts { + if replicationAccount.AccountLocator == currentAccountLocator { + return sdk.NewAccountIdentifier(replicationAccount.OrganizationName, replicationAccount.AccountName) + } + } + return sdk.AccountIdentifier{} +} + +func getSecondaryAccountIdentifier(t *testing.T) sdk.AccountIdentifier { + t.Helper() + client := testSecondaryClient(t) + return getAccountIdentifier(t, client) +} + +const ( + secondaryAccountProfile = "secondary_test_account" +) + +// TODO: for now we leave it as is, later it would be nice to configure it also once in TestMain +func testSecondaryClient(t *testing.T) *sdk.Client { + t.Helper() + + client, err := testClientFromProfile(t, secondaryAccountProfile) + if err != nil { + t.Skipf("Snowflake secondary account not configured. Must be set in ~./snowflake/config.yml with profile name: %s", secondaryAccountProfile) + } + + return client +} + +func testClientFromProfile(t *testing.T, profile string) (*sdk.Client, error) { + t.Helper() + config, err := sdk.ProfileConfig(profile) + if err != nil { + return nil, err + } + return sdk.NewClient(config) +} + +func useDatabase(t *testing.T, client *sdk.Client, databaseID sdk.AccountObjectIdentifier) func() { + t.Helper() + ctx := context.Background() + orgDB, err := client.ContextFunctions.CurrentDatabase(ctx) + require.NoError(t, err) + err = client.Sessions.UseDatabase(ctx, databaseID) + require.NoError(t, err) + return func() { + err := client.Sessions.UseDatabase(ctx, sdk.NewAccountObjectIdentifier(orgDB)) + require.NoError(t, err) + } +} + +func useSchema(t *testing.T, client *sdk.Client, schemaID sdk.DatabaseObjectIdentifier) func() { + t.Helper() + ctx := context.Background() + orgDB, err := client.ContextFunctions.CurrentDatabase(ctx) + require.NoError(t, err) + orgSchema, err := client.ContextFunctions.CurrentSchema(ctx) + require.NoError(t, err) + err = client.Sessions.UseSchema(ctx, schemaID) + require.NoError(t, err) + return func() { + err := client.Sessions.UseSchema(ctx, sdk.NewDatabaseObjectIdentifier(orgDB, orgSchema)) + require.NoError(t, err) + } +} + +func useWarehouse(t *testing.T, client *sdk.Client, warehouseID sdk.AccountObjectIdentifier) func() { + t.Helper() + ctx := context.Background() + orgWarehouse, err := client.ContextFunctions.CurrentWarehouse(ctx) + require.NoError(t, err) + err = client.Sessions.UseWarehouse(ctx, warehouseID) + require.NoError(t, err) + return func() { + err := client.Sessions.UseWarehouse(ctx, sdk.NewAccountObjectIdentifier(orgWarehouse)) + require.NoError(t, err) + } +} + +func createDatabase(t *testing.T, client *sdk.Client) (*sdk.Database, func()) { + t.Helper() + return createDatabaseWithOptions(t, client, randomAccountObjectIdentifier(t), &sdk.CreateDatabaseOptions{}) +} + +func createDatabaseWithIdentifier(t *testing.T, client *sdk.Client, id sdk.AccountObjectIdentifier) (*sdk.Database, func()) { + t.Helper() + return createDatabaseWithOptions(t, client, id, &sdk.CreateDatabaseOptions{}) +} + +func createDatabaseWithOptions(t *testing.T, client *sdk.Client, id sdk.AccountObjectIdentifier, _ *sdk.CreateDatabaseOptions) (*sdk.Database, func()) { + t.Helper() + ctx := context.Background() + err := client.Databases.Create(ctx, id, nil) + require.NoError(t, err) + database, err := client.Databases.ShowByID(ctx, id) + require.NoError(t, err) + return database, func() { + err := client.Databases.Drop(ctx, id, nil) + require.NoError(t, err) + } +} + +func createSchema(t *testing.T, client *sdk.Client, database *sdk.Database) (*sdk.Schema, func()) { + t.Helper() + return createSchemaWithIdentifier(t, client, database, randomStringRange(t, 8, 28)) +} + +func createSchemaWithIdentifier(t *testing.T, client *sdk.Client, database *sdk.Database, name string) (*sdk.Schema, func()) { + t.Helper() + ctx := context.Background() + schemaID := sdk.NewDatabaseObjectIdentifier(database.Name, name) + err := client.Schemas.Create(ctx, schemaID, nil) + require.NoError(t, err) + schema, err := client.Schemas.ShowByID(ctx, sdk.NewDatabaseObjectIdentifier(database.Name, name)) + require.NoError(t, err) + return schema, func() { + err := client.Schemas.Drop(ctx, schemaID, nil) + if errors.Is(err, sdk.ErrObjectNotExistOrAuthorized) { + return + } + require.NoError(t, err) + } +} + +func createWarehouse(t *testing.T, client *sdk.Client) (*sdk.Warehouse, func()) { + t.Helper() + return createWarehouseWithOptions(t, client, &sdk.CreateWarehouseOptions{}) +} + +func createWarehouseWithOptions(t *testing.T, client *sdk.Client, opts *sdk.CreateWarehouseOptions) (*sdk.Warehouse, func()) { + t.Helper() + name := randomStringRange(t, 8, 28) + id := sdk.NewAccountObjectIdentifier(name) + ctx := context.Background() + err := client.Warehouses.Create(ctx, id, opts) + require.NoError(t, err) + return &sdk.Warehouse{ + Name: name, + }, func() { + err := client.Warehouses.Drop(ctx, id, nil) + require.NoError(t, err) + } +} + +func createUser(t *testing.T, client *sdk.Client) (*sdk.User, func()) { + t.Helper() + name := randomStringRange(t, 8, 28) + id := sdk.NewAccountObjectIdentifier(name) + return createUserWithOptions(t, client, id, &sdk.CreateUserOptions{}) +} + +func createUserWithName(t *testing.T, client *sdk.Client, name string) (*sdk.User, func()) { + t.Helper() + id := sdk.NewAccountObjectIdentifier(name) + return createUserWithOptions(t, client, id, &sdk.CreateUserOptions{}) +} + +func createUserWithOptions(t *testing.T, client *sdk.Client, id sdk.AccountObjectIdentifier, opts *sdk.CreateUserOptions) (*sdk.User, func()) { + t.Helper() + ctx := context.Background() + err := client.Users.Create(ctx, id, opts) + require.NoError(t, err) + user, err := client.Users.ShowByID(ctx, id) + require.NoError(t, err) + return user, func() { + err := client.Users.Drop(ctx, id) + require.NoError(t, err) + } +} + +func createTable(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema) (*sdk.Table, func()) { + t.Helper() + name := randomStringRange(t, 8, 28) + ctx := context.Background() + _, err := client.ExecForTests(ctx, fmt.Sprintf("CREATE TABLE \"%s\".\"%s\".\"%s\" (id NUMBER)", database.Name, schema.Name, name)) + require.NoError(t, err) + return &sdk.Table{ + DatabaseName: database.Name, + SchemaName: schema.Name, + Name: name, + }, func() { + _, err := client.ExecForTests(ctx, fmt.Sprintf("DROP TABLE \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) + require.NoError(t, err) + } +} + +func createDynamicTable(t *testing.T, client *sdk.Client) (*sdk.DynamicTable, func()) { + t.Helper() + return createDynamicTableWithOptions(t, client, nil, nil, nil, nil) +} + +func createDynamicTableWithOptions(t *testing.T, client *sdk.Client, warehouse *sdk.Warehouse, database *sdk.Database, schema *sdk.Schema, table *sdk.Table) (*sdk.DynamicTable, func()) { + t.Helper() + var warehouseCleanup func() + if warehouse == nil { + warehouse, warehouseCleanup = createWarehouse(t, client) + } + var databaseCleanup func() + if database == nil { + database, databaseCleanup = createDatabase(t, client) + } + var schemaCleanup func() + if schema == nil { + schema, schemaCleanup = createSchema(t, client, database) + } + var tableCleanup func() + if table == nil { + table, tableCleanup = createTable(t, client, database, schema) + } + name := sdk.NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, randomString(t)) + targetLag := sdk.TargetLag{ + Lagtime: sdk.String("2 minutes"), + } + query := "select id from " + table.ID().FullyQualifiedName() + comment := randomComment(t) + ctx := context.Background() + err := client.DynamicTables.Create(ctx, sdk.NewCreateDynamicTableRequest(name, warehouse.ID(), targetLag, query).WithOrReplace(true).WithComment(&comment)) + require.NoError(t, err) + entities, err := client.DynamicTables.Show(ctx, sdk.NewShowDynamicTableRequest().WithLike(&sdk.Like{Pattern: sdk.String(name.Name())}).WithIn(&sdk.In{Schema: schema.ID()})) + require.NoError(t, err) + require.Equal(t, 1, len(entities)) + return &entities[0], func() { + require.NoError(t, client.DynamicTables.Drop(ctx, sdk.NewDropDynamicTableRequest(name))) + if tableCleanup != nil { + tableCleanup() + } + if schemaCleanup != nil { + schemaCleanup() + } + if databaseCleanup != nil { + databaseCleanup() + } + if warehouseCleanup != nil { + warehouseCleanup() + } + } +} + +func createTag(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema) (*sdk.Tag, func()) { + t.Helper() + return createTagWithOptions(t, client, database, schema, &sdk.CreateTagOptions{}) +} + +func createTagWithOptions(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, _ *sdk.CreateTagOptions) (*sdk.Tag, func()) { + t.Helper() + name := randomStringRange(t, 8, 28) + ctx := context.Background() + _, err := client.ExecForTests(ctx, fmt.Sprintf("CREATE TAG \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) + require.NoError(t, err) + return &sdk.Tag{ + Name: name, + DatabaseName: database.Name, + SchemaName: schema.Name, + }, func() { + _, err := client.ExecForTests(ctx, fmt.Sprintf("DROP TAG \"%s\".\"%s\".\"%s\"", database.Name, schema.Name, name)) + require.NoError(t, err) + } +} + +func createStageWithName(t *testing.T, client *sdk.Client, name string) (*string, func()) { + t.Helper() + ctx := context.Background() + stageCleanup := func() { + _, err := client.ExecForTests(ctx, fmt.Sprintf("DROP STAGE %s", name)) + require.NoError(t, err) + } + _, err := client.ExecForTests(ctx, fmt.Sprintf("CREATE STAGE %s", name)) + if err != nil { + return nil, stageCleanup + } + require.NoError(t, err) + return &name, stageCleanup +} + +func createStage(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, name string) (*sdk.Stage, func()) { + t.Helper() + require.NotNil(t, database, "database has to be created") + require.NotNil(t, schema, "schema has to be created") + + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) + ctx := context.Background() + + stageCleanup := func() { + _, err := client.ExecForTests(ctx, fmt.Sprintf("DROP STAGE %s", id.FullyQualifiedName())) + require.NoError(t, err) + } + + _, err := client.ExecForTests(ctx, fmt.Sprintf("CREATE STAGE %s", id.FullyQualifiedName())) + if err != nil { + return nil, stageCleanup + } + require.NoError(t, err) + + return &sdk.Stage{ + DatabaseName: database.Name, + SchemaName: schema.Name, + Name: name, + }, stageCleanup +} + +func createStageWithURL(t *testing.T, client *sdk.Client, name sdk.AccountObjectIdentifier, url string) (*sdk.Stage, func()) { + t.Helper() + ctx := context.Background() + _, err := client.ExecForTests(ctx, fmt.Sprintf(`CREATE STAGE "%s" URL = '%s'`, name.Name(), url)) + require.NoError(t, err) + + return nil, func() { + _, err := client.ExecForTests(ctx, fmt.Sprintf(`DROP STAGE "%s"`, name.Name())) + require.NoError(t, err) + } +} + +func createPipe(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, name string, copyStatement string) (*sdk.Pipe, func()) { + t.Helper() + require.NotNil(t, database, "database has to be created") + require.NotNil(t, schema, "schema has to be created") + + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) + ctx := context.Background() + + pipeCleanup := func() { + err := client.Pipes.Drop(ctx, id) + require.NoError(t, err) + } + + err := client.Pipes.Create(ctx, id, copyStatement, &sdk.CreatePipeOptions{}) + if err != nil { + return nil, pipeCleanup + } + require.NoError(t, err) + + createdPipe, errDescribe := client.Pipes.Describe(ctx, id) + if errDescribe != nil { + return nil, pipeCleanup + } + require.NoError(t, errDescribe) + + return createdPipe, pipeCleanup +} + +func createPasswordPolicy(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema) (*sdk.PasswordPolicy, func()) { + t.Helper() + return createPasswordPolicyWithOptions(t, client, database, schema, nil) +} + +func createPasswordPolicyWithOptions(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, options *sdk.CreatePasswordPolicyOptions) (*sdk.PasswordPolicy, func()) { + t.Helper() + var databaseCleanup func() + if database == nil { + database, databaseCleanup = createDatabase(t, client) + } + var schemaCleanup func() + if schema == nil { + schema, schemaCleanup = createSchema(t, client, database) + } + name := randomUUID(t) + id := sdk.NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) + ctx := context.Background() + err := client.PasswordPolicies.Create(ctx, id, options) + require.NoError(t, err) + + showOptions := &sdk.ShowPasswordPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), + }, + In: &sdk.In{ + Schema: schema.ID(), + }, + } + passwordPolicyList, err := client.PasswordPolicies.Show(ctx, showOptions) + require.NoError(t, err) + require.Equal(t, 1, len(passwordPolicyList)) + return &passwordPolicyList[0], func() { + err := client.PasswordPolicies.Drop(ctx, id, nil) + require.NoError(t, err) + if schemaCleanup != nil { + schemaCleanup() + } + if databaseCleanup != nil { + databaseCleanup() + } + } +} + +func createNetworkPolicy(t *testing.T, client *sdk.Client, req *sdk.CreateNetworkPolicyRequest) (error, func()) { + t.Helper() + ctx := context.Background() + err := client.NetworkPolicies.Create(ctx, req) + return err, func() { + err := client.NetworkPolicies.Drop(ctx, sdk.NewDropNetworkPolicyRequest(req.GetName())) + require.NoError(t, err) + } +} + +func createSessionPolicy(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema) (*sdk.SessionPolicy, func()) { + t.Helper() + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, randomStringN(t, 12)) + return createSessionPolicyWithOptions(t, client, id, sdk.NewCreateSessionPolicyRequest(id)) +} + +func createSessionPolicyWithOptions(t *testing.T, client *sdk.Client, id sdk.SchemaObjectIdentifier, request *sdk.CreateSessionPolicyRequest) (*sdk.SessionPolicy, func()) { + t.Helper() + ctx := context.Background() + err := client.SessionPolicies.Create(ctx, request) + require.NoError(t, err) + sessionPolicy, err := client.SessionPolicies.ShowByID(ctx, id) + require.NoError(t, err) + return sessionPolicy, func() { + err := client.SessionPolicies.Drop(ctx, sdk.NewDropSessionPolicyRequest(id)) + require.NoError(t, err) + } +} + +func createResourceMonitor(t *testing.T, client *sdk.Client) (*sdk.ResourceMonitor, func()) { + t.Helper() + return createResourceMonitorWithOptions(t, client, &sdk.CreateResourceMonitorOptions{ + With: &sdk.ResourceMonitorWith{ + CreditQuota: sdk.Pointer(100), + Triggers: []sdk.TriggerDefinition{ + { + Threshold: 100, + TriggerAction: sdk.TriggerActionSuspend, + }, + { + Threshold: 70, + TriggerAction: sdk.TriggerActionSuspendImmediate, + }, + { + Threshold: 90, + TriggerAction: sdk.TriggerActionNotify, + }, + }, + }, + }) +} + +func createResourceMonitorWithOptions(t *testing.T, client *sdk.Client, opts *sdk.CreateResourceMonitorOptions) (*sdk.ResourceMonitor, func()) { + t.Helper() + id := randomAccountObjectIdentifier(t) + ctx := context.Background() + err := client.ResourceMonitors.Create(ctx, id, opts) + require.NoError(t, err) + resourceMonitor, err := client.ResourceMonitors.ShowByID(ctx, id) + require.NoError(t, err) + return resourceMonitor, func() { + err := client.ResourceMonitors.Drop(ctx, id) + require.NoError(t, err) + } +} + +func createMaskingPolicy(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema) (*sdk.MaskingPolicy, func()) { + t.Helper() + signature := []sdk.TableColumnSignature{ + { + Name: randomString(t), + Type: sdk.DataTypeVARCHAR, + }, + } + n := randomIntRange(t, 0, 5) + for i := 0; i < n; i++ { + signature = append(signature, sdk.TableColumnSignature{ + Name: randomString(t), + Type: sdk.DataTypeVARCHAR, + }) + } + expression := "REPLACE('X', 1, 2)" + return createMaskingPolicyWithOptions(t, client, database, schema, signature, sdk.DataTypeVARCHAR, expression, &sdk.CreateMaskingPolicyOptions{}) +} + +func createMaskingPolicyWithOptions(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, signature []sdk.TableColumnSignature, returns sdk.DataType, expression string, options *sdk.CreateMaskingPolicyOptions) (*sdk.MaskingPolicy, func()) { + t.Helper() + var databaseCleanup func() + if database == nil { + database, databaseCleanup = createDatabase(t, client) + } + var schemaCleanup func() + if schema == nil { + schema, schemaCleanup = createSchema(t, client, database) + } + name := randomString(t) + id := sdk.NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) + ctx := context.Background() + err := client.MaskingPolicies.Create(ctx, id, signature, returns, expression, options) + require.NoError(t, err) + + showOptions := &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), + }, + In: &sdk.In{ + Schema: schema.ID(), + }, + } + maskingPolicyList, err := client.MaskingPolicies.Show(ctx, showOptions) + require.NoError(t, err) + require.Equal(t, 1, len(maskingPolicyList)) + return &maskingPolicyList[0], func() { + err := client.MaskingPolicies.Drop(ctx, id) + require.NoError(t, err) + if schemaCleanup != nil { + schemaCleanup() + } + if databaseCleanup != nil { + databaseCleanup() + } + } +} + +func createAlert(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, warehouse *sdk.Warehouse) (*sdk.Alert, func()) { + t.Helper() + schedule := "USING CRON * * * * * UTC" + condition := "SELECT 1" + action := "SELECT 1" + return createAlertWithOptions(t, client, database, schema, warehouse, schedule, condition, action, &sdk.CreateAlertOptions{}) +} + +func createAlertWithOptions(t *testing.T, client *sdk.Client, database *sdk.Database, schema *sdk.Schema, warehouse *sdk.Warehouse, schedule string, condition string, action string, opts *sdk.CreateAlertOptions) (*sdk.Alert, func()) { + t.Helper() + var databaseCleanup func() + if database == nil { + database, databaseCleanup = createDatabase(t, client) + } + var schemaCleanup func() + if schema == nil { + schema, schemaCleanup = createSchema(t, client, database) + } + var warehouseCleanup func() + if warehouse == nil { + warehouse, warehouseCleanup = createWarehouse(t, client) + } + + name := randomString(t) + id := sdk.NewSchemaObjectIdentifier(schema.DatabaseName, schema.Name, name) + ctx := context.Background() + err := client.Alerts.Create(ctx, id, warehouse.ID(), schedule, condition, action, opts) + require.NoError(t, err) + + showOptions := &sdk.ShowAlertOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), + }, + In: &sdk.In{ + Schema: schema.ID(), + }, + } + alertList, err := client.Alerts.Show(ctx, showOptions) + require.NoError(t, err) + require.Equal(t, 1, len(alertList)) + return &alertList[0], func() { + err := client.Alerts.Drop(ctx, id) + require.NoError(t, err) + if schemaCleanup != nil { + schemaCleanup() + } + if databaseCleanup != nil { + databaseCleanup() + } + if warehouseCleanup != nil { + warehouseCleanup() + } + } +} + +func createRole(t *testing.T, client *sdk.Client) (*sdk.Role, func()) { + t.Helper() + return createRoleWithRequest(t, client, sdk.NewCreateRoleRequest(randomAccountObjectIdentifier(t))) +} + +func createRoleWithRequest(t *testing.T, client *sdk.Client, req *sdk.CreateRoleRequest) (*sdk.Role, func()) { + t.Helper() + require.True(t, sdk.ValidObjectIdentifier(req.GetName())) + ctx := context.Background() + err := client.Roles.Create(ctx, req) + require.NoError(t, err) + role, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(req.GetName())) + require.NoError(t, err) + return role, func() { + err = client.Roles.Drop(ctx, sdk.NewDropRoleRequest(req.GetName())) + require.NoError(t, err) + } +} + +func createDatabaseRole(t *testing.T, client *sdk.Client, database *sdk.Database) (*sdk.DatabaseRole, func()) { + t.Helper() + name := randomString(t) + id := sdk.NewDatabaseObjectIdentifier(database.Name, name) + ctx := context.Background() + + err := client.DatabaseRoles.Create(ctx, sdk.NewCreateDatabaseRoleRequest(id)) + require.NoError(t, err) + + databaseRole, err := client.DatabaseRoles.ShowByID(ctx, id) + require.NoError(t, err) + + return databaseRole, cleanupDatabaseRoleProvider(t, ctx, client, id) +} + +func cleanupDatabaseRoleProvider(t *testing.T, ctx context.Context, client *sdk.Client, id sdk.DatabaseObjectIdentifier) func() { + t.Helper() + return func() { + err := client.DatabaseRoles.Drop(ctx, sdk.NewDropDatabaseRoleRequest(id)) + require.NoError(t, err) + } +} + +func createFailoverGroup(t *testing.T, client *sdk.Client) (*sdk.FailoverGroup, func()) { + t.Helper() + objectTypes := []sdk.PluralObjectType{sdk.PluralObjectTypeRoles} + ctx := context.Background() + currentAccount, err := client.ContextFunctions.CurrentAccount(ctx) + require.NoError(t, err) + accountID := sdk.NewAccountIdentifierFromAccountLocator(currentAccount) + allowedAccounts := []sdk.AccountIdentifier{accountID} + return createFailoverGroupWithOptions(t, client, objectTypes, allowedAccounts, nil) +} + +func createFailoverGroupWithOptions(t *testing.T, client *sdk.Client, objectTypes []sdk.PluralObjectType, allowedAccounts []sdk.AccountIdentifier, opts *sdk.CreateFailoverGroupOptions) (*sdk.FailoverGroup, func()) { + t.Helper() + id := randomAccountObjectIdentifier(t) + ctx := context.Background() + err := client.FailoverGroups.Create(ctx, id, objectTypes, allowedAccounts, opts) + require.NoError(t, err) + failoverGroup, err := client.FailoverGroups.ShowByID(ctx, id) + require.NoError(t, err) + return failoverGroup, func() { + err := client.FailoverGroups.Drop(ctx, id, nil) + require.NoError(t, err) + } +} + +func createShare(t *testing.T, client *sdk.Client) (*sdk.Share, func()) { + t.Helper() + return createShareWithOptions(t, client, &sdk.CreateShareOptions{}) +} + +func createShareWithOptions(t *testing.T, client *sdk.Client, opts *sdk.CreateShareOptions) (*sdk.Share, func()) { + t.Helper() + id := randomAccountObjectIdentifier(t) + ctx := context.Background() + err := client.Shares.Create(ctx, id, opts) + require.NoError(t, err) + share, err := client.Shares.ShowByID(ctx, id) + require.NoError(t, err) + return share, func() { + err := client.Shares.Drop(ctx, id) + require.NoError(t, err) + } +} + +func createFileFormat(t *testing.T, client *sdk.Client, schema sdk.DatabaseObjectIdentifier) (*sdk.FileFormat, func()) { + t.Helper() + return createFileFormatWithOptions(t, client, schema, &sdk.CreateFileFormatOptions{ + Type: sdk.FileFormatTypeCSV, + }) +} + +func createFileFormatWithOptions(t *testing.T, client *sdk.Client, schema sdk.DatabaseObjectIdentifier, opts *sdk.CreateFileFormatOptions) (*sdk.FileFormat, func()) { + t.Helper() + id := sdk.NewSchemaObjectIdentifier(schema.DatabaseName(), schema.Name(), randomString(t)) + ctx := context.Background() + err := client.FileFormats.Create(ctx, id, opts) + require.NoError(t, err) + fileFormat, err := client.FileFormats.ShowByID(ctx, id) + require.NoError(t, err) + return fileFormat, func() { + err := client.FileFormats.Drop(ctx, id, nil) + require.NoError(t, err) + } +} diff --git a/pkg/sdk/masking_policy_integration_test.go b/pkg/sdk/testint/masking_policy_integration_test.go similarity index 69% rename from pkg/sdk/masking_policy_integration_test.go rename to pkg/sdk/testint/masking_policy_integration_test.go index 482131b636..1faba366a8 100644 --- a/pkg/sdk/masking_policy_integration_test.go +++ b/pkg/sdk/testint/masking_policy_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "strings" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_MaskingPoliciesShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -36,8 +36,8 @@ func TestInt_MaskingPoliciesShow(t *testing.T) { }) t.Run("with show options", func(t *testing.T) { - showOptions := &ShowMaskingPolicyOptions{ - In: &In{ + showOptions := &sdk.ShowMaskingPolicyOptions{ + In: &sdk.In{ Schema: schemaTest.ID(), }, } @@ -49,11 +49,11 @@ func TestInt_MaskingPoliciesShow(t *testing.T) { }) t.Run("with show options and like", func(t *testing.T) { - showOptions := &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(maskingPolicyTest.Name), + showOptions := &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(maskingPolicyTest.Name), }, - In: &In{ + In: &sdk.In{ Database: databaseTest.ID(), }, } @@ -64,9 +64,9 @@ func TestInt_MaskingPoliciesShow(t *testing.T) { }) t.Run("when searching a non-existent masking policy", func(t *testing.T) { - showOptions := &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } maskingPolicies, err := client.MaskingPolicies.Show(ctx, showOptions) @@ -92,7 +92,7 @@ func TestInt_MaskingPoliciesShow(t *testing.T) { func TestInt_MaskingPolicyCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -101,39 +101,39 @@ func TestInt_MaskingPolicyCreate(t *testing.T) { t.Run("test complete case", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - signature := []TableColumnSignature{ + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + signature := []sdk.TableColumnSignature{ { Name: "col1", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, { Name: "col2", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, } expression := "REPLACE('X', 1, 2)" comment := randomComment(t) exemptOtherPolicies := randomBool(t) - err := client.MaskingPolicies.Create(ctx, id, signature, DataTypeVARCHAR, expression, &CreateMaskingPolicyOptions{ - OrReplace: Bool(true), - IfNotExists: Bool(false), - Comment: String(comment), - ExemptOtherPolicies: Bool(exemptOtherPolicies), + err := client.MaskingPolicies.Create(ctx, id, signature, sdk.DataTypeVARCHAR, expression, &sdk.CreateMaskingPolicyOptions{ + OrReplace: sdk.Bool(true), + IfNotExists: sdk.Bool(false), + Comment: sdk.String(comment), + ExemptOtherPolicies: sdk.Bool(exemptOtherPolicies), }) require.NoError(t, err) maskingPolicyDetails, err := client.MaskingPolicies.Describe(ctx, id) require.NoError(t, err) assert.Equal(t, name, maskingPolicyDetails.Name) assert.Equal(t, signature, maskingPolicyDetails.Signature) - assert.Equal(t, DataTypeVARCHAR, maskingPolicyDetails.ReturnType) + assert.Equal(t, sdk.DataTypeVARCHAR, maskingPolicyDetails.ReturnType) assert.Equal(t, expression, maskingPolicyDetails.Body) - maskingPolicy, err := client.MaskingPolicies.Show(ctx, &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(name), + maskingPolicy, err := client.MaskingPolicies.Show(ctx, &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -146,38 +146,38 @@ func TestInt_MaskingPolicyCreate(t *testing.T) { t.Run("test if_not_exists", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - signature := []TableColumnSignature{ + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + signature := []sdk.TableColumnSignature{ { Name: "col1", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, { Name: "col2", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, } expression := "REPLACE('X', 1, 2)" comment := randomComment(t) - err := client.MaskingPolicies.Create(ctx, id, signature, DataTypeVARCHAR, expression, &CreateMaskingPolicyOptions{ - OrReplace: Bool(false), - IfNotExists: Bool(true), - Comment: String(comment), - ExemptOtherPolicies: Bool(true), + err := client.MaskingPolicies.Create(ctx, id, signature, sdk.DataTypeVARCHAR, expression, &sdk.CreateMaskingPolicyOptions{ + OrReplace: sdk.Bool(false), + IfNotExists: sdk.Bool(true), + Comment: sdk.String(comment), + ExemptOtherPolicies: sdk.Bool(true), }) require.NoError(t, err) maskingPolicyDetails, err := client.MaskingPolicies.Describe(ctx, id) require.NoError(t, err) assert.Equal(t, name, maskingPolicyDetails.Name) assert.Equal(t, signature, maskingPolicyDetails.Signature) - assert.Equal(t, DataTypeVARCHAR, maskingPolicyDetails.ReturnType) + assert.Equal(t, sdk.DataTypeVARCHAR, maskingPolicyDetails.ReturnType) assert.Equal(t, expression, maskingPolicyDetails.Body) - maskingPolicy, err := client.MaskingPolicies.Show(ctx, &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(name), + maskingPolicy, err := client.MaskingPolicies.Show(ctx, &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -190,28 +190,28 @@ func TestInt_MaskingPolicyCreate(t *testing.T) { t.Run("test no options", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - signature := []TableColumnSignature{ + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + signature := []sdk.TableColumnSignature{ { Name: "col1", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, } expression := "REPLACE('X', 1, 2)" - err := client.MaskingPolicies.Create(ctx, id, signature, DataTypeVARCHAR, expression, nil) + err := client.MaskingPolicies.Create(ctx, id, signature, sdk.DataTypeVARCHAR, expression, nil) require.NoError(t, err) maskingPolicyDetails, err := client.MaskingPolicies.Describe(ctx, id) require.NoError(t, err) assert.Equal(t, name, maskingPolicyDetails.Name) assert.Equal(t, signature, maskingPolicyDetails.Signature) - assert.Equal(t, DataTypeVARCHAR, maskingPolicyDetails.ReturnType) + assert.Equal(t, sdk.DataTypeVARCHAR, maskingPolicyDetails.ReturnType) assert.Equal(t, expression, maskingPolicyDetails.Body) - maskingPolicy, err := client.MaskingPolicies.Show(ctx, &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(name), + maskingPolicy, err := client.MaskingPolicies.Show(ctx, &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -224,11 +224,11 @@ func TestInt_MaskingPolicyCreate(t *testing.T) { t.Run("test multiline expression", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - signature := []TableColumnSignature{ + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + signature := []sdk.TableColumnSignature{ { Name: "val", - Type: DataTypeVARCHAR, + Type: sdk.DataTypeVARCHAR, }, } expression := ` @@ -241,20 +241,20 @@ func TestInt_MaskingPolicyCreate(t *testing.T) { '******' end ` - err := client.MaskingPolicies.Create(ctx, id, signature, DataTypeVARCHAR, expression, nil) + err := client.MaskingPolicies.Create(ctx, id, signature, sdk.DataTypeVARCHAR, expression, nil) require.NoError(t, err) maskingPolicyDetails, err := client.MaskingPolicies.Describe(ctx, id) require.NoError(t, err) assert.Equal(t, name, maskingPolicyDetails.Name) assert.Equal(t, signature, maskingPolicyDetails.Signature) - assert.Equal(t, DataTypeVARCHAR, maskingPolicyDetails.ReturnType) + assert.Equal(t, sdk.DataTypeVARCHAR, maskingPolicyDetails.ReturnType) assert.Equal(t, strings.TrimSpace(expression), maskingPolicyDetails.Body) }) } func TestInt_MaskingPolicyDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -272,15 +272,15 @@ func TestInt_MaskingPolicyDescribe(t *testing.T) { }) t.Run("when masking policy does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") _, err := client.MaskingPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_MaskingPolicyAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -292,18 +292,18 @@ func TestInt_MaskingPolicyAlter(t *testing.T) { maskingPolicy, maskingPolicyCleanup := createMaskingPolicy(t, client, databaseTest, schemaTest) t.Cleanup(maskingPolicyCleanup) comment := randomComment(t) - alterOptions := &AlterMaskingPolicyOptions{ - Set: &MaskingPolicySet{ - Comment: String(comment), + alterOptions := &sdk.AlterMaskingPolicyOptions{ + Set: &sdk.MaskingPolicySet{ + Comment: sdk.String(comment), }, } err := client.MaskingPolicies.Alter(ctx, maskingPolicy.ID(), alterOptions) require.NoError(t, err) - maskingPolicies, err := client.MaskingPolicies.Show(ctx, &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(maskingPolicy.Name), + maskingPolicies, err := client.MaskingPolicies.Show(ctx, &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(maskingPolicy.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -313,18 +313,18 @@ func TestInt_MaskingPolicyAlter(t *testing.T) { err = client.MaskingPolicies.Alter(ctx, maskingPolicy.ID(), alterOptions) require.NoError(t, err) - alterOptions = &AlterMaskingPolicyOptions{ - Unset: &MaskingPolicyUnset{ - Comment: Bool(true), + alterOptions = &sdk.AlterMaskingPolicyOptions{ + Unset: &sdk.MaskingPolicyUnset{ + Comment: sdk.Bool(true), }, } err = client.MaskingPolicies.Alter(ctx, maskingPolicy.ID(), alterOptions) require.NoError(t, err) - maskingPolicies, err = client.MaskingPolicies.Show(ctx, &ShowMaskingPolicyOptions{ - Like: &Like{ - Pattern: String(maskingPolicy.Name), + maskingPolicies, err = client.MaskingPolicies.Show(ctx, &sdk.ShowMaskingPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(maskingPolicy.Name), }, - In: &In{ + In: &sdk.In{ Schema: schemaTest.ID(), }, }) @@ -338,8 +338,8 @@ func TestInt_MaskingPolicyAlter(t *testing.T) { oldID := maskingPolicy.ID() t.Cleanup(maskingPolicyCleanup) newName := randomString(t) - newID := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, newName) - alterOptions := &AlterMaskingPolicyOptions{ + newID := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, newName) + alterOptions := &sdk.AlterMaskingPolicyOptions{ NewName: newID, } err := client.MaskingPolicies.Alter(ctx, oldID, alterOptions) @@ -348,7 +348,7 @@ func TestInt_MaskingPolicyAlter(t *testing.T) { require.NoError(t, err) assert.Equal(t, newName, maskingPolicyDetails.Name) // rename back to original name so it can be cleaned up - alterOptions = &AlterMaskingPolicyOptions{ + alterOptions = &sdk.AlterMaskingPolicyOptions{ NewName: oldID, } err = client.MaskingPolicies.Alter(ctx, newID, alterOptions) @@ -366,37 +366,37 @@ func TestInt_MaskingPolicyAlter(t *testing.T) { tag2, tag2Cleanup := createTag(t, client, databaseTest, schemaTest) t.Cleanup(tag2Cleanup) - tagAssociations := []TagAssociation{{Name: tag.ID(), Value: "value1"}, {Name: tag2.ID(), Value: "value2"}} - alterOptions := &AlterMaskingPolicyOptions{ - Set: &MaskingPolicySet{ + tagAssociations := []sdk.TagAssociation{{Name: tag.ID(), Value: "value1"}, {Name: tag2.ID(), Value: "value2"}} + alterOptions := &sdk.AlterMaskingPolicyOptions{ + Set: &sdk.MaskingPolicySet{ Tag: tagAssociations, }, } err := client.MaskingPolicies.Alter(ctx, id, alterOptions) require.NoError(t, err) - tagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeMaskingPolicy) + tagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeMaskingPolicy) require.NoError(t, err) assert.Equal(t, tagAssociations[0].Value, tagValue) - tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), id, ObjectTypeMaskingPolicy) + tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), id, sdk.ObjectTypeMaskingPolicy) require.NoError(t, err) assert.Equal(t, tagAssociations[1].Value, tag2Value) // unset tag - alterOptions = &AlterMaskingPolicyOptions{ - Unset: &MaskingPolicyUnset{ - Tag: []ObjectIdentifier{tag.ID()}, + alterOptions = &sdk.AlterMaskingPolicyOptions{ + Unset: &sdk.MaskingPolicyUnset{ + Tag: []sdk.ObjectIdentifier{tag.ID()}, }, } err = client.MaskingPolicies.Alter(ctx, id, alterOptions) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeMaskingPolicy) + _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeMaskingPolicy) assert.Error(t, err) }) } func TestInt_MaskingPolicyDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -410,12 +410,12 @@ func TestInt_MaskingPolicyDrop(t *testing.T) { err := client.MaskingPolicies.Drop(ctx, id) require.NoError(t, err) _, err = client.MaskingPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when masking policy does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") err := client.MaskingPolicies.Drop(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/network_policies_gen_integration_test.go b/pkg/sdk/testint/network_policies_gen_integration_test.go similarity index 54% rename from pkg/sdk/network_policies_gen_integration_test.go rename to pkg/sdk/testint/network_policies_gen_integration_test.go index 6fe2d86443..fdd2f1602b 100644 --- a/pkg/sdk/network_policies_gen_integration_test.go +++ b/pkg/sdk/testint/network_policies_gen_integration_test.go @@ -1,33 +1,33 @@ -package sdk +package testint import ( - "context" "fmt" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_NetworkPolicies(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) - allowedIP := NewIPRequest("123.0.0.1") - blockedIP := NewIPRequest("125.0.0.1") - blockedIP2 := NewIPRequest("124.0.0.1") - defaultCreateRequest := func() *CreateNetworkPolicyRequest { + allowedIP := sdk.NewIPRequest("123.0.0.1") + blockedIP := sdk.NewIPRequest("125.0.0.1") + blockedIP2 := sdk.NewIPRequest("124.0.0.1") + defaultCreateRequest := func() *sdk.CreateNetworkPolicyRequest { id := randomAccountObjectIdentifier(t) comment := "some_comment" - return NewCreateNetworkPolicyRequest(id). - WithOrReplace(Bool(true)). - WithAllowedIpList([]IPRequest{*allowedIP}). - WithBlockedIpList([]IPRequest{*blockedIP, *blockedIP2}). + return sdk.NewCreateNetworkPolicyRequest(id). + WithOrReplace(sdk.Bool(true)). + WithAllowedIpList([]sdk.IPRequest{*allowedIP}). + WithBlockedIpList([]sdk.IPRequest{*blockedIP, *blockedIP2}). WithComment(&comment) } - findNetworkPolicy := func(nps []NetworkPolicy, name string) (*NetworkPolicy, error) { - return findOne[NetworkPolicy](nps, func(t NetworkPolicy) bool { + findNetworkPolicy := func(nps []sdk.NetworkPolicy, name string) (*sdk.NetworkPolicy, error) { + return sdk.FindOne[sdk.NetworkPolicy](nps, func(t sdk.NetworkPolicy) bool { return t.Name == name }) } @@ -38,10 +38,10 @@ func TestInt_NetworkPolicies(t *testing.T) { require.NoError(t, err) t.Cleanup(dropNetworkPolicy) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) - np, err := findNetworkPolicy(nps, req.name.Name()) + np, err := findNetworkPolicy(nps, req.GetName().Name()) require.NoError(t, err) assert.Equal(t, *req.Comment, np.Comment) assert.Equal(t, len(req.AllowedIpList), np.EntriesInAllowedIpList) @@ -54,14 +54,14 @@ func TestInt_NetworkPolicies(t *testing.T) { require.NoError(t, err) t.Cleanup(dropNetworkPolicy) - err = client.NetworkPolicies.Alter(ctx, NewAlterNetworkPolicyRequest(req.name). - WithSet(NewNetworkPolicySetRequest().WithAllowedIpList([]IPRequest{{IP: "123.0.0.1"}, {IP: "125.0.0.1"}}))) + err = client.NetworkPolicies.Alter(ctx, sdk.NewAlterNetworkPolicyRequest(req.GetName()). + WithSet(sdk.NewNetworkPolicySetRequest().WithAllowedIpList([]sdk.IPRequest{{IP: "123.0.0.1"}, {IP: "125.0.0.1"}}))) require.NoError(t, err) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) - np, err := findNetworkPolicy(nps, req.name.Name()) + np, err := findNetworkPolicy(nps, req.GetName().Name()) require.NoError(t, err) assert.Equal(t, 2, np.EntriesInAllowedIpList) }) @@ -72,14 +72,14 @@ func TestInt_NetworkPolicies(t *testing.T) { require.NoError(t, err) t.Cleanup(dropNetworkPolicy) - err = client.NetworkPolicies.Alter(ctx, NewAlterNetworkPolicyRequest(req.name). - WithSet(NewNetworkPolicySetRequest().WithBlockedIpList([]IPRequest{{IP: "123.0.0.1"}}))) + err = client.NetworkPolicies.Alter(ctx, sdk.NewAlterNetworkPolicyRequest(req.GetName()). + WithSet(sdk.NewNetworkPolicySetRequest().WithBlockedIpList([]sdk.IPRequest{{IP: "123.0.0.1"}}))) require.NoError(t, err) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) - np, err := findNetworkPolicy(nps, req.name.Name()) + np, err := findNetworkPolicy(nps, req.GetName().Name()) require.NoError(t, err) assert.Equal(t, 1, np.EntriesInBlockedIpList) }) @@ -91,14 +91,14 @@ func TestInt_NetworkPolicies(t *testing.T) { t.Cleanup(dropNetworkPolicy) alteredComment := "altered_comment" - err = client.NetworkPolicies.Alter(ctx, NewAlterNetworkPolicyRequest(req.name). - WithSet(NewNetworkPolicySetRequest().WithComment(&alteredComment))) + err = client.NetworkPolicies.Alter(ctx, sdk.NewAlterNetworkPolicyRequest(req.GetName()). + WithSet(sdk.NewNetworkPolicySetRequest().WithComment(&alteredComment))) require.NoError(t, err) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) - np, err := findNetworkPolicy(nps, req.name.Name()) + np, err := findNetworkPolicy(nps, req.GetName().Name()) require.NoError(t, err) assert.Equal(t, alteredComment, np.Comment) }) @@ -109,13 +109,13 @@ func TestInt_NetworkPolicies(t *testing.T) { require.NoError(t, err) t.Cleanup(dropNetworkPolicy) - err = client.NetworkPolicies.Alter(ctx, NewAlterNetworkPolicyRequest(req.name).WithUnsetComment(Bool(true))) + err = client.NetworkPolicies.Alter(ctx, sdk.NewAlterNetworkPolicyRequest(req.GetName()).WithUnsetComment(sdk.Bool(true))) require.NoError(t, err) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) - np, err := findNetworkPolicy(nps, req.name.Name()) + np, err := findNetworkPolicy(nps, req.GetName().Name()) require.NoError(t, err) assert.Equal(t, "", np.Comment) }) @@ -133,17 +133,17 @@ func TestInt_NetworkPolicies(t *testing.T) { }) newID := randomAccountObjectIdentifier(t) - err = client.NetworkPolicies.Alter(ctx, NewAlterNetworkPolicyRequest(req.name).WithRenameTo(&newID)) + err = client.NetworkPolicies.Alter(ctx, sdk.NewAlterNetworkPolicyRequest(req.GetName()).WithRenameTo(&newID)) require.NoError(t, err) altered = true t.Cleanup(func() { if altered { - err = client.NetworkPolicies.Drop(ctx, NewDropNetworkPolicyRequest(newID)) + err = client.NetworkPolicies.Drop(ctx, sdk.NewDropNetworkPolicyRequest(newID)) require.NoError(t, err) } }) - nps, err := client.NetworkPolicies.Show(ctx, NewShowNetworkPolicyRequest()) + nps, err := client.NetworkPolicies.Show(ctx, sdk.NewShowNetworkPolicyRequest()) require.NoError(t, err) np, err := findNetworkPolicy(nps, newID.Name()) @@ -160,11 +160,11 @@ func TestInt_NetworkPolicies(t *testing.T) { require.NoError(t, err) t.Cleanup(dropNetworkPolicy) - desc, err := client.NetworkPolicies.Describe(ctx, req.name) + desc, err := client.NetworkPolicies.Describe(ctx, req.GetName()) require.NoError(t, err) assert.Equal(t, 2, len(desc)) - assert.Contains(t, desc, NetworkPolicyDescription{Name: "ALLOWED_IP_LIST", Value: allowedIP.IP}) - assert.Contains(t, desc, NetworkPolicyDescription{Name: "BLOCKED_IP_LIST", Value: fmt.Sprintf("%s,%s", blockedIP.IP, blockedIP2.IP)}) + assert.Contains(t, desc, sdk.NetworkPolicyDescription{Name: "ALLOWED_IP_LIST", Value: allowedIP.IP}) + assert.Contains(t, desc, sdk.NetworkPolicyDescription{Name: "BLOCKED_IP_LIST", Value: fmt.Sprintf("%s,%s", blockedIP.IP, blockedIP2.IP)}) }) } diff --git a/pkg/sdk/testint/parsers.go b/pkg/sdk/testint/parsers.go new file mode 100644 index 0000000000..86d8a90fef --- /dev/null +++ b/pkg/sdk/testint/parsers.go @@ -0,0 +1,13 @@ +package testint + +import "time" + +func ParseTimestampWithOffset(s string) (*time.Time, error) { + t, err := time.Parse("2006-01-02T15:04:05-07:00", s) + if err != nil { + return nil, err + } + _, offset := t.Zone() + adjustedTime := t.Add(-time.Duration(offset) * time.Second) + return &adjustedTime, nil +} diff --git a/pkg/sdk/password_policy_integration_test.go b/pkg/sdk/testint/password_policy_integration_test.go similarity index 78% rename from pkg/sdk/password_policy_integration_test.go rename to pkg/sdk/testint/password_policy_integration_test.go index 2c49f6cd51..466687a829 100644 --- a/pkg/sdk/password_policy_integration_test.go +++ b/pkg/sdk/testint/password_policy_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_PasswordPoliciesShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -30,8 +30,8 @@ func TestInt_PasswordPoliciesShow(t *testing.T) { }) t.Run("with show options", func(t *testing.T) { - showOptions := &ShowPasswordPolicyOptions{ - In: &In{ + showOptions := &sdk.ShowPasswordPolicyOptions{ + In: &sdk.In{ Schema: schemaTest.ID(), }, } @@ -43,11 +43,11 @@ func TestInt_PasswordPoliciesShow(t *testing.T) { }) t.Run("with show options and like", func(t *testing.T) { - showOptions := &ShowPasswordPolicyOptions{ - Like: &Like{ - Pattern: String(passwordPolicyTest.Name), + showOptions := &sdk.ShowPasswordPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(passwordPolicyTest.Name), }, - In: &In{ + In: &sdk.In{ Database: databaseTest.ID(), }, } @@ -58,9 +58,9 @@ func TestInt_PasswordPoliciesShow(t *testing.T) { }) t.Run("when searching a non-existent password policy", func(t *testing.T) { - showOptions := &ShowPasswordPolicyOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowPasswordPolicyOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } passwordPolicies, err := client.PasswordPolicies.Show(ctx, showOptions) @@ -84,7 +84,7 @@ func TestInt_PasswordPoliciesShow(t *testing.T) { func TestInt_PasswordPolicyCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -92,18 +92,18 @@ func TestInt_PasswordPolicyCreate(t *testing.T) { t.Cleanup(schemaCleanup) t.Run("test complete", func(t *testing.T) { name := randomUUID(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - err := client.PasswordPolicies.Create(ctx, id, &CreatePasswordPolicyOptions{ - OrReplace: Bool(true), - PasswordMinLength: Int(10), - PasswordMaxLength: Int(20), - PasswordMinUpperCaseChars: Int(1), - PasswordMinLowerCaseChars: Int(1), - PasswordMinNumericChars: Int(1), - PasswordMinSpecialChars: Int(1), - PasswordMaxAgeDays: Int(30), - PasswordMaxRetries: Int(5), - PasswordLockoutTimeMins: Int(30), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + err := client.PasswordPolicies.Create(ctx, id, &sdk.CreatePasswordPolicyOptions{ + OrReplace: sdk.Bool(true), + PasswordMinLength: sdk.Int(10), + PasswordMaxLength: sdk.Int(20), + PasswordMinUpperCaseChars: sdk.Int(1), + PasswordMinLowerCaseChars: sdk.Int(1), + PasswordMinNumericChars: sdk.Int(1), + PasswordMinSpecialChars: sdk.Int(1), + PasswordMaxAgeDays: sdk.Int(30), + PasswordMaxRetries: sdk.Int(5), + PasswordLockoutTimeMins: sdk.Int(30), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: String("test comment"), }) @@ -126,13 +126,13 @@ func TestInt_PasswordPolicyCreate(t *testing.T) { t.Run("test if_not_exists", func(t *testing.T) { name := randomUUID(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) - err := client.PasswordPolicies.Create(ctx, id, &CreatePasswordPolicyOptions{ - OrReplace: Bool(false), - IfNotExists: Bool(true), - PasswordMinLength: Int(10), - PasswordMaxLength: Int(20), - PasswordMinUpperCaseChars: Int(5), + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + err := client.PasswordPolicies.Create(ctx, id, &sdk.CreatePasswordPolicyOptions{ + OrReplace: sdk.Bool(false), + IfNotExists: sdk.Bool(true), + PasswordMinLength: sdk.Int(10), + PasswordMaxLength: sdk.Int(20), + PasswordMinUpperCaseChars: sdk.Int(5), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: String("test comment"), }) @@ -149,7 +149,7 @@ func TestInt_PasswordPolicyCreate(t *testing.T) { t.Run("test no options", func(t *testing.T) { name := randomUUID(t) - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, name) err := client.PasswordPolicies.Create(ctx, id, nil) require.NoError(t, err) passwordPolicyDetails, err := client.PasswordPolicies.Describe(ctx, id) @@ -170,7 +170,7 @@ func TestInt_PasswordPolicyCreate(t *testing.T) { func TestInt_PasswordPolicyDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -189,15 +189,15 @@ func TestInt_PasswordPolicyDescribe(t *testing.T) { }) t.Run("when password policy does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") _, err := client.PasswordPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_PasswordPolicyAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -208,11 +208,11 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { t.Run("when setting new values", func(t *testing.T) { passwordPolicy, passwordPolicyCleanup := createPasswordPolicy(t, client, databaseTest, schemaTest) t.Cleanup(passwordPolicyCleanup) - alterOptions := &AlterPasswordPolicyOptions{ - Set: &PasswordPolicySet{ - PasswordMinLength: Int(10), - PasswordMaxLength: Int(20), - Comment: String("new comment"), + alterOptions := &sdk.AlterPasswordPolicyOptions{ + Set: &sdk.PasswordPolicySet{ + PasswordMinLength: sdk.Int(10), + PasswordMaxLength: sdk.Int(20), + Comment: sdk.String("new comment"), }, } err := client.PasswordPolicies.Alter(ctx, passwordPolicy.ID(), alterOptions) @@ -230,8 +230,8 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { oldID := passwordPolicy.ID() t.Cleanup(passwordPolicyCleanup) newName := randomUUID(t) - newID := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, newName) - alterOptions := &AlterPasswordPolicyOptions{ + newID := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, newName) + alterOptions := &sdk.AlterPasswordPolicyOptions{ NewName: newID, } err := client.PasswordPolicies.Alter(ctx, oldID, alterOptions) @@ -240,7 +240,7 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { require.NoError(t, err) // rename back to original name so it can be cleaned up assert.Equal(t, newName, passwordPolicyDetails.Name.Value) - alterOptions = &AlterPasswordPolicyOptions{ + alterOptions = &sdk.AlterPasswordPolicyOptions{ NewName: oldID, } err = client.PasswordPolicies.Alter(ctx, newID, alterOptions) @@ -248,25 +248,25 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { }) t.Run("when unsetting values", func(t *testing.T) { - createOptions := &CreatePasswordPolicyOptions{ - PasswordMaxAgeDays: Int(20), - PasswordMaxRetries: Int(10), + createOptions := &sdk.CreatePasswordPolicyOptions{ + PasswordMaxAgeDays: sdk.Int(20), + PasswordMaxRetries: sdk.Int(10), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: String("test comment") } passwordPolicy, passwordPolicyCleanup := createPasswordPolicyWithOptions(t, client, databaseTest, schemaTest, createOptions) id := passwordPolicy.ID() t.Cleanup(passwordPolicyCleanup) - alterOptions := &AlterPasswordPolicyOptions{ - Unset: &PasswordPolicyUnset{ - PasswordMaxRetries: Bool(true), + alterOptions := &sdk.AlterPasswordPolicyOptions{ + Unset: &sdk.PasswordPolicyUnset{ + PasswordMaxRetries: sdk.Bool(true), }, } err := client.PasswordPolicies.Alter(ctx, id, alterOptions) require.NoError(t, err) - alterOptions = &AlterPasswordPolicyOptions{ - Unset: &PasswordPolicyUnset{ - PasswordMaxAgeDays: Bool(true), + alterOptions = &sdk.AlterPasswordPolicyOptions{ + Unset: &sdk.PasswordPolicyUnset{ + PasswordMaxAgeDays: sdk.Bool(true), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: Bool("true") }, @@ -281,19 +281,19 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { }) t.Run("when unsetting multiple values at same time", func(t *testing.T) { - createOptions := &CreatePasswordPolicyOptions{ - PasswordMaxAgeDays: Int(20), - PasswordMaxRetries: Int(10), + createOptions := &sdk.CreatePasswordPolicyOptions{ + PasswordMaxAgeDays: sdk.Int(20), + PasswordMaxRetries: sdk.Int(10), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: String("test comment") } passwordPolicy, passwordPolicyCleanup := createPasswordPolicyWithOptions(t, client, databaseTest, schemaTest, createOptions) id := passwordPolicy.ID() t.Cleanup(passwordPolicyCleanup) - alterOptions := &AlterPasswordPolicyOptions{ - Unset: &PasswordPolicyUnset{ - PasswordMaxAgeDays: Bool(true), - PasswordMaxRetries: Bool(true), + alterOptions := &sdk.AlterPasswordPolicyOptions{ + Unset: &sdk.PasswordPolicyUnset{ + PasswordMaxAgeDays: sdk.Bool(true), + PasswordMaxRetries: sdk.Bool(true), // todo [SNOW-928909]: uncomment this once comments are working again // Comment: Bool("true") }, @@ -305,7 +305,7 @@ func TestInt_PasswordPolicyAlter(t *testing.T) { func TestInt_PasswordPolicyDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -319,22 +319,22 @@ func TestInt_PasswordPolicyDrop(t *testing.T) { err := client.PasswordPolicies.Drop(ctx, id, nil) require.NoError(t, err) _, err = client.PasswordPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when password policy does not exist", func(t *testing.T) { - id := NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(databaseTest.Name, schemaTest.Name, "does_not_exist") err := client.PasswordPolicies.Drop(ctx, id, nil) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when password policy exists and if exists is true", func(t *testing.T) { passwordPolicy, _ := createPasswordPolicy(t, client, databaseTest, schemaTest) id := passwordPolicy.ID() - dropOptions := &DropPasswordPolicyOptions{IfExists: Bool(true)} + dropOptions := &sdk.DropPasswordPolicyOptions{IfExists: sdk.Bool(true)} err := client.PasswordPolicies.Drop(ctx, id, dropOptions) require.NoError(t, err) _, err = client.PasswordPolicies.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/testint/pipes_integration_test.go b/pkg/sdk/testint/pipes_integration_test.go new file mode 100644 index 0000000000..cecd729e9b --- /dev/null +++ b/pkg/sdk/testint/pipes_integration_test.go @@ -0,0 +1,388 @@ +package testint + +import ( + "fmt" + "testing" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func createPipeCopyStatement(t *testing.T, table *sdk.Table, stage *sdk.Stage) string { + t.Helper() + require.NotNil(t, table, "table has to be created") + require.NotNil(t, stage, "stage has to be created") + return fmt.Sprintf("COPY INTO %s\nFROM @%s", table.ID().FullyQualifiedName(), stage.ID().FullyQualifiedName()) +} + +func TestInt_IncorrectCreatePipeBehaviour(t *testing.T) { + schemaIdentifier := sdk.NewDatabaseObjectIdentifier("TXR@=9,TBnLj", "tcK1>AJ+") + database, databaseCleanup := createDatabaseWithIdentifier(t, itc.client, sdk.NewAccountObjectIdentifier(schemaIdentifier.DatabaseName())) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := createSchemaWithIdentifier(t, itc.client, database, schemaIdentifier.Name()) + t.Cleanup(schemaCleanup) + + table, tableCleanup := createTable(t, itc.client, database, schema) + t.Cleanup(tableCleanup) + + stageName := randomAlphanumericN(t, 20) + stage, stageCleanup := createStage(t, itc.client, database, schema, stageName) + t.Cleanup(stageCleanup) + + t.Run("if we have special characters in db or schema name, create pipe returns error in copy <> from <> section", func(t *testing.T) { + err := itc.client.Pipes.Create( + itc.ctx, + sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, randomAlphanumericN(t, 20)), + createPipeCopyStatement(t, table, stage), + &sdk.CreatePipeOptions{}, + ) + + require.ErrorContains(t, err, "(42000): SQL compilation error:\nsyntax error line") + require.ErrorContains(t, err, "at position") + require.ErrorContains(t, err, "unexpected ','") + }) + + t.Run("the same works with using db and schema statements", func(t *testing.T) { + useDatabaseCleanup := useDatabase(t, itc.client, database.ID()) + t.Cleanup(useDatabaseCleanup) + useSchemaCleanup := useSchema(t, itc.client, schema.ID()) + t.Cleanup(useSchemaCleanup) + + createCopyStatementWithoutQualifiersForStage := func(t *testing.T, table *sdk.Table, stage *sdk.Stage) string { + t.Helper() + require.NotNil(t, table, "table has to be created") + require.NotNil(t, stage, "stage has to be created") + return fmt.Sprintf("COPY INTO %s\nFROM @\"%s\"", table.ID().FullyQualifiedName(), stage.Name) + } + + err := itc.client.Pipes.Create( + itc.ctx, + sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, randomAlphanumericN(t, 20)), + createCopyStatementWithoutQualifiersForStage(t, table, stage), + &sdk.CreatePipeOptions{}, + ) + + require.NoError(t, err) + }) +} + +func TestInt_PipesShowAndDescribe(t *testing.T) { + schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) + database, databaseCleanup := createDatabaseWithIdentifier(t, itc.client, sdk.NewAccountObjectIdentifier(schemaIdentifier.DatabaseName())) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := createSchemaWithIdentifier(t, itc.client, database, schemaIdentifier.Name()) + t.Cleanup(schemaCleanup) + + table1, table1Cleanup := createTable(t, itc.client, database, schema) + t.Cleanup(table1Cleanup) + + table2, table2Cleanup := createTable(t, itc.client, database, schema) + t.Cleanup(table2Cleanup) + + stageName := randomAlphanumericN(t, 20) + stage, stageCleanup := createStage(t, itc.client, database, schema, stageName) + t.Cleanup(stageCleanup) + + pipe1Name := randomAlphanumericN(t, 20) + pipe1CopyStatement := createPipeCopyStatement(t, table1, stage) + pipe1, pipe1Cleanup := createPipe(t, itc.client, database, schema, pipe1Name, pipe1CopyStatement) + t.Cleanup(pipe1Cleanup) + + pipe2Name := randomAlphanumericN(t, 20) + pipe2CopyStatement := createPipeCopyStatement(t, table2, stage) + pipe2, pipe2Cleanup := createPipe(t, itc.client, database, schema, pipe2Name, pipe2CopyStatement) + t.Cleanup(pipe2Cleanup) + + t.Run("show: without options", func(t *testing.T) { + pipes, err := itc.client.Pipes.Show(itc.ctx, &sdk.ShowPipeOptions{}) + + require.NoError(t, err) + assert.Equal(t, 2, len(pipes)) + assert.Contains(t, pipes, *pipe1) + assert.Contains(t, pipes, *pipe2) + }) + + t.Run("show: in schema", func(t *testing.T) { + showOptions := &sdk.ShowPipeOptions{ + In: &sdk.In{ + Schema: schema.ID(), + }, + } + pipes, err := itc.client.Pipes.Show(itc.ctx, showOptions) + + require.NoError(t, err) + assert.Equal(t, 2, len(pipes)) + assert.Contains(t, pipes, *pipe1) + assert.Contains(t, pipes, *pipe2) + }) + + t.Run("show: like", func(t *testing.T) { + showOptions := &sdk.ShowPipeOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(pipe1Name), + }, + } + pipes, err := itc.client.Pipes.Show(itc.ctx, showOptions) + + require.NoError(t, err) + assert.Equal(t, 1, len(pipes)) + assert.Contains(t, pipes, *pipe1) + }) + + t.Run("show: non-existent pipe", func(t *testing.T) { + showOptions := &sdk.ShowPipeOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), + }, + } + pipes, err := itc.client.Pipes.Show(itc.ctx, showOptions) + + require.NoError(t, err) + assert.Equal(t, 0, len(pipes)) + }) + + t.Run("describe: existing pipe", func(t *testing.T) { + pipe, err := itc.client.Pipes.Describe(itc.ctx, pipe1.ID()) + + require.NoError(t, err) + assert.Equal(t, pipe1.Name, pipe.Name) + }) + + t.Run("describe: non-existing pipe", func(t *testing.T) { + id := sdk.NewSchemaObjectIdentifier(database.Name, database.Name, "does_not_exist") + + _, err := itc.client.Pipes.Describe(itc.ctx, id) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) + }) +} + +func TestInt_PipeCreate(t *testing.T) { + schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) + database, databaseCleanup := createDatabaseWithIdentifier(t, itc.client, sdk.NewAccountObjectIdentifier(schemaIdentifier.DatabaseName())) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := createSchemaWithIdentifier(t, itc.client, database, schemaIdentifier.Name()) + t.Cleanup(schemaCleanup) + + table, tableCleanup := createTable(t, itc.client, database, schema) + t.Cleanup(tableCleanup) + + stageName := randomAlphanumericN(t, 20) + stage, stageCleanup := createStage(t, itc.client, database, schema, stageName) + t.Cleanup(stageCleanup) + + copyStatement := createPipeCopyStatement(t, table, stage) + + assertPipe := func(t *testing.T, pipeDetails *sdk.Pipe, expectedName string, expectedComment string) { + t.Helper() + assert.NotEmpty(t, pipeDetails.CreatedOn) + assert.Equal(t, expectedName, pipeDetails.Name) + assert.Equal(t, database.Name, pipeDetails.DatabaseName) + assert.Equal(t, schema.Name, pipeDetails.SchemaName) + assert.Equal(t, copyStatement, pipeDetails.Definition) + assert.Equal(t, "ACCOUNTADMIN", pipeDetails.Owner) + assert.Empty(t, pipeDetails.NotificationChannel) + assert.Equal(t, expectedComment, pipeDetails.Comment) + assert.Empty(t, pipeDetails.Integration) + assert.Empty(t, pipeDetails.Pattern) + assert.Empty(t, pipeDetails.ErrorIntegration) + assert.Equal(t, "ROLE", pipeDetails.OwnerRoleType) + assert.Empty(t, pipeDetails.InvalidReason) + } + + // TODO: test error integration, aws sns topic and integration when we have them in project + t.Run("test complete case", func(t *testing.T) { + name := randomString(t) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) + comment := randomComment(t) + + err := itc.client.Pipes.Create(itc.ctx, id, copyStatement, &sdk.CreatePipeOptions{ + OrReplace: sdk.Bool(false), + IfNotExists: sdk.Bool(true), + AutoIngest: sdk.Bool(false), + Comment: sdk.String(comment), + }) + require.NoError(t, err) + + pipe, err := itc.client.Pipes.Describe(itc.ctx, id) + + require.NoError(t, err) + assertPipe(t, pipe, name, comment) + }) + + t.Run("test if not exists and or replace are incompatible", func(t *testing.T) { + name := randomString(t) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) + + err := itc.client.Pipes.Create(itc.ctx, id, copyStatement, &sdk.CreatePipeOptions{ + OrReplace: sdk.Bool(true), + IfNotExists: sdk.Bool(true), + }) + require.ErrorContains(t, err, "(0A000): SQL compilation error:\noptions IF NOT EXISTS and OR REPLACE are incompatible") + }) + + t.Run("test no options", func(t *testing.T) { + name := randomString(t) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) + + err := itc.client.Pipes.Create(itc.ctx, id, copyStatement, nil) + require.NoError(t, err) + + pipe, err := itc.client.Pipes.Describe(itc.ctx, id) + + require.NoError(t, err) + assertPipe(t, pipe, name, "") + }) +} + +func TestInt_PipeDrop(t *testing.T) { + schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) + database, databaseCleanup := createDatabaseWithIdentifier(t, itc.client, sdk.NewAccountObjectIdentifier(schemaIdentifier.DatabaseName())) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := createSchemaWithIdentifier(t, itc.client, database, schemaIdentifier.Name()) + t.Cleanup(schemaCleanup) + + table, tableCleanup := createTable(t, itc.client, database, schema) + t.Cleanup(tableCleanup) + + stageName := randomAlphanumericN(t, 20) + stage, stageCleanup := createStage(t, itc.client, database, schema, stageName) + t.Cleanup(stageCleanup) + + t.Run("pipe exists", func(t *testing.T) { + pipeName := randomAlphanumericN(t, 20) + pipeCopyStatement := createPipeCopyStatement(t, table, stage) + pipe, _ := createPipe(t, itc.client, database, schema, pipeName, pipeCopyStatement) + + err := itc.client.Pipes.Drop(itc.ctx, pipe.ID()) + + require.NoError(t, err) + _, err = itc.client.Pipes.Describe(itc.ctx, pipe.ID()) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) + }) + + t.Run("pipe does not exist", func(t *testing.T) { + id := sdk.NewSchemaObjectIdentifier(database.Name, database.Name, "does_not_exist") + + err := itc.client.Alerts.Drop(itc.ctx, id) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) + }) +} + +func TestInt_PipeAlter(t *testing.T) { + schemaIdentifier := alphanumericDatabaseObjectIdentifier(t) + database, databaseCleanup := createDatabaseWithIdentifier(t, itc.client, sdk.NewAccountObjectIdentifier(schemaIdentifier.DatabaseName())) + t.Cleanup(databaseCleanup) + + schema, schemaCleanup := createSchemaWithIdentifier(t, itc.client, database, schemaIdentifier.Name()) + t.Cleanup(schemaCleanup) + + table, tableCleanup := createTable(t, itc.client, database, schema) + t.Cleanup(tableCleanup) + + stageName := randomAlphanumericN(t, 20) + stage, stageCleanup := createStage(t, itc.client, database, schema, stageName) + t.Cleanup(stageCleanup) + + pipeCopyStatement := createPipeCopyStatement(t, table, stage) + + // TODO: test error integration when we have them in project + t.Run("set value and unset value", func(t *testing.T) { + pipeName := randomAlphanumericN(t, 20) + pipe, pipeCleanup := createPipe(t, itc.client, database, schema, pipeName, pipeCopyStatement) + t.Cleanup(pipeCleanup) + + alterOptions := &sdk.AlterPipeOptions{ + Set: &sdk.PipeSet{ + Comment: sdk.String("new comment"), + PipeExecutionPaused: sdk.Bool(true), + }, + } + + err := itc.client.Pipes.Alter(itc.ctx, pipe.ID(), alterOptions) + require.NoError(t, err) + + alteredPipe, err := itc.client.Pipes.ShowByID(itc.ctx, pipe.ID()) + require.NoError(t, err) + + assert.Equal(t, "new comment", alteredPipe.Comment) + + alterOptions = &sdk.AlterPipeOptions{ + Unset: &sdk.PipeUnset{ + Comment: sdk.Bool(true), + PipeExecutionPaused: sdk.Bool(true), + }, + } + + err = itc.client.Pipes.Alter(itc.ctx, pipe.ID(), alterOptions) + require.NoError(t, err) + + alteredPipe, err = itc.client.Pipes.ShowByID(itc.ctx, pipe.ID()) + require.NoError(t, err) + + assert.Equal(t, "", alteredPipe.Comment) + }) + + t.Run("set and unset tag", func(t *testing.T) { + tag, tagCleanup := createTag(t, itc.client, database, schema) + t.Cleanup(tagCleanup) + + pipeName := randomAlphanumericN(t, 20) + pipe, pipeCleanup := createPipe(t, itc.client, database, schema, pipeName, pipeCopyStatement) + t.Cleanup(pipeCleanup) + + tagValue := "abc" + alterOptions := &sdk.AlterPipeOptions{ + SetTags: &sdk.PipeSetTags{ + Tag: []sdk.TagAssociation{ + { + Name: tag.ID(), + Value: tagValue, + }, + }, + }, + } + + err := itc.client.Pipes.Alter(itc.ctx, pipe.ID(), alterOptions) + require.NoError(t, err) + + returnedTagValue, err := itc.client.SystemFunctions.GetTag(itc.ctx, tag.ID(), pipe.ID(), sdk.ObjectTypePipe) + require.NoError(t, err) + + assert.Equal(t, tagValue, returnedTagValue) + + alterOptions = &sdk.AlterPipeOptions{ + UnsetTags: &sdk.PipeUnsetTags{ + Tag: []sdk.ObjectIdentifier{ + tag.ID(), + }, + }, + } + + err = itc.client.Pipes.Alter(itc.ctx, pipe.ID(), alterOptions) + require.NoError(t, err) + + _, err = itc.client.SystemFunctions.GetTag(itc.ctx, tag.ID(), pipe.ID(), sdk.ObjectTypePipe) + assert.Error(t, err) + }) + + t.Run("refresh with all", func(t *testing.T) { + pipeName := randomAlphanumericN(t, 20) + pipe, pipeCleanup := createPipe(t, itc.client, database, schema, pipeName, pipeCopyStatement) + t.Cleanup(pipeCleanup) + + alterOptions := &sdk.AlterPipeOptions{ + Refresh: &sdk.PipeRefresh{ + Prefix: sdk.String("/d1"), + ModifiedAfter: sdk.String("2018-07-30T13:56:46-07:00"), + }, + } + + err := itc.client.Pipes.Alter(itc.ctx, pipe.ID(), alterOptions) + require.NoError(t, err) + }) +} diff --git a/pkg/sdk/testint/random.go b/pkg/sdk/testint/random.go new file mode 100644 index 0000000000..52a9f08862 --- /dev/null +++ b/pkg/sdk/testint/random.go @@ -0,0 +1,82 @@ +package testint + +import ( + "testing" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" + "github.com/brianvoe/gofakeit/v6" + "github.com/hashicorp/go-uuid" + "github.com/stretchr/testify/require" +) + +// All functions in this file exist also in SDK (they are used also there). +// They were copied to allow easier extraction of all integration tests to separate package. +// This will be dealt with in subsequent PRs. + +func randomUUID(t *testing.T) string { + t.Helper() + v, err := uuid.GenerateUUID() + require.NoError(t, err) + return v +} + +func randomComment(t *testing.T) string { + t.Helper() + return gofakeit.Sentence(10) +} + +func randomBool(t *testing.T) bool { + t.Helper() + return gofakeit.Bool() +} + +func randomString(t *testing.T) string { + t.Helper() + return gofakeit.Password(true, true, true, true, false, 28) +} + +func randomStringN(t *testing.T, num int) string { + t.Helper() + return gofakeit.Password(true, true, true, true, false, num) +} + +func randomAlphanumericN(t *testing.T, num int) string { + t.Helper() + return gofakeit.Password(true, true, true, false, false, num) +} + +func randomStringRange(t *testing.T, min, max int) string { + t.Helper() + if min > max { + t.Errorf("min %d is greater than max %d", min, max) + } + return gofakeit.Password(true, true, true, true, false, randomIntRange(t, min, max)) +} + +func randomIntRange(t *testing.T, min, max int) int { + t.Helper() + if min > max { + t.Errorf("min %d is greater than max %d", min, max) + } + return gofakeit.IntRange(min, max) +} + +func randomSchemaObjectIdentifier(t *testing.T) sdk.SchemaObjectIdentifier { + t.Helper() + return sdk.NewSchemaObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12), randomStringN(t, 12)) +} + +func randomDatabaseObjectIdentifier(t *testing.T) sdk.DatabaseObjectIdentifier { + t.Helper() + return sdk.NewDatabaseObjectIdentifier(randomStringN(t, 12), randomStringN(t, 12)) +} + +func alphanumericDatabaseObjectIdentifier(t *testing.T) sdk.DatabaseObjectIdentifier { + t.Helper() + return sdk.NewDatabaseObjectIdentifier(randomAlphanumericN(t, 12), randomAlphanumericN(t, 12)) +} + +func randomAccountObjectIdentifier(t *testing.T) sdk.AccountObjectIdentifier { + t.Helper() + return sdk.NewAccountObjectIdentifier(randomStringN(t, 12)) +} diff --git a/pkg/sdk/replication_functions_integration_test.go b/pkg/sdk/testint/replication_functions_integration_test.go similarity index 78% rename from pkg/sdk/replication_functions_integration_test.go rename to pkg/sdk/testint/replication_functions_integration_test.go index 12cad1e106..1bc7b8bfc3 100644 --- a/pkg/sdk/replication_functions_integration_test.go +++ b/pkg/sdk/testint/replication_functions_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_ShowReplicationFunctions(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) accounts, err := client.ReplicationFunctions.ShowReplicationAccounts(ctx) if err != nil { t.Skip("replication not enabled in this account") @@ -20,7 +20,7 @@ func TestInt_ShowReplicationFunctions(t *testing.T) { func TestInt_ShowRegions(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("no options", func(t *testing.T) { regions, err := client.ReplicationFunctions.ShowRegions(ctx, nil) require.NoError(t, err) @@ -28,16 +28,16 @@ func TestInt_ShowRegions(t *testing.T) { }) t.Run("with options", func(t *testing.T) { - regions, err := client.ReplicationFunctions.ShowRegions(ctx, &ShowRegionsOptions{ - Like: &Like{ - Pattern: String("AWS_US_WEST_2"), + regions, err := client.ReplicationFunctions.ShowRegions(ctx, &sdk.ShowRegionsOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("AWS_US_WEST_2"), }, }) require.NoError(t, err) assert.Equal(t, 1, len(regions)) region := regions[0] assert.Equal(t, "AWS_US_WEST_2", region.SnowflakeRegion) - assert.Equal(t, CloudTypeAWS, region.CloudType) + assert.Equal(t, sdk.CloudTypeAWS, region.CloudType) assert.Equal(t, "us-west-2", region.Region) assert.Equal(t, "US West (Oregon)", region.DisplayName) }) diff --git a/pkg/sdk/resource_monitors_integration_test.go b/pkg/sdk/testint/resource_monitors_integration_test.go similarity index 64% rename from pkg/sdk/resource_monitors_integration_test.go rename to pkg/sdk/testint/resource_monitors_integration_test.go index fc138fa5d9..b28584db01 100644 --- a/pkg/sdk/resource_monitors_integration_test.go +++ b/pkg/sdk/testint/resource_monitors_integration_test.go @@ -1,24 +1,24 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_ResourceMonitorsShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) resourceMonitorTest, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) t.Run("with like", func(t *testing.T) { - showOptions := &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(resourceMonitorTest.Name), + showOptions := &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(resourceMonitorTest.Name), }, } resourceMonitors, err := client.ResourceMonitors.Show(ctx, showOptions) @@ -28,9 +28,9 @@ func TestInt_ResourceMonitorsShow(t *testing.T) { }) t.Run("when searching a non-existent resource monitor", func(t *testing.T) { - showOptions := &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } resourceMonitors, err := client.ResourceMonitors.Show(ctx, showOptions) @@ -41,34 +41,34 @@ func TestInt_ResourceMonitorsShow(t *testing.T) { func TestInt_ResourceMonitorCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("test complete case", func(t *testing.T) { name := randomString(t) - id := NewAccountObjectIdentifier(name) - frequency, err := FrequencyFromString("Monthly") + id := sdk.NewAccountObjectIdentifier(name) + frequency, err := sdk.FrequencyFromString("Monthly") require.NoError(t, err) startTimeStamp := "IMMEDIATELY" creditQuota := 100 endTimeStamp := "2024-01-01 12:34" - triggers := []TriggerDefinition{ + triggers := []sdk.TriggerDefinition{ { Threshold: 30, - TriggerAction: TriggerActionSuspend, + TriggerAction: sdk.TriggerActionSuspend, }, { Threshold: 50, - TriggerAction: TriggerActionSuspendImmediate, + TriggerAction: sdk.TriggerActionSuspendImmediate, }, { Threshold: 100, - TriggerAction: TriggerActionNotify, + TriggerAction: sdk.TriggerActionNotify, }, } - err = client.ResourceMonitors.Create(ctx, id, &CreateResourceMonitorOptions{ - OrReplace: Bool(true), - With: &ResourceMonitorWith{ + err = client.ResourceMonitors.Create(ctx, id, &sdk.CreateResourceMonitorOptions{ + OrReplace: sdk.Bool(true), + With: &sdk.ResourceMonitorWith{ Frequency: frequency, CreditQuota: &creditQuota, StartTimestamp: &startTimeStamp, @@ -80,9 +80,9 @@ func TestInt_ResourceMonitorCreate(t *testing.T) { }) require.NoError(t, err) - resourceMonitors, err := client.ResourceMonitors.Show(ctx, &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(name), + resourceMonitors, err := client.ResourceMonitors.Show(ctx, &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, }) @@ -113,14 +113,14 @@ func TestInt_ResourceMonitorCreate(t *testing.T) { t.Run("test no options", func(t *testing.T) { name := randomString(t) - id := NewAccountObjectIdentifier(name) + id := sdk.NewAccountObjectIdentifier(name) err := client.ResourceMonitors.Create(ctx, id, nil) require.NoError(t, err) - resourceMonitors, err := client.ResourceMonitors.Show(ctx, &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(name), + resourceMonitors, err := client.ResourceMonitors.Show(ctx, &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(name), }, }) @@ -131,7 +131,7 @@ func TestInt_ResourceMonitorCreate(t *testing.T) { assert.NotEmpty(t, resourceMonitor.StartTime) assert.Empty(t, resourceMonitor.EndTime) assert.Empty(t, resourceMonitor.CreditQuota) - assert.Equal(t, FrequencyMonthly, resourceMonitor.Frequency) + assert.Equal(t, sdk.FrequencyMonthly, resourceMonitor.Frequency) assert.Empty(t, resourceMonitor.NotifyUsers) assert.Empty(t, resourceMonitor.NotifyTriggers) assert.Empty(t, resourceMonitor.SuspendAt) @@ -146,44 +146,44 @@ func TestInt_ResourceMonitorCreate(t *testing.T) { func TestInt_ResourceMonitorAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("when adding a new trigger", func(t *testing.T) { resourceMonitor, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) - var oldNotifyTriggers []TriggerDefinition + var oldNotifyTriggers []sdk.TriggerDefinition for _, threshold := range resourceMonitor.NotifyTriggers { - oldNotifyTriggers = append(oldNotifyTriggers, TriggerDefinition{Threshold: threshold, TriggerAction: TriggerActionNotify}) + oldNotifyTriggers = append(oldNotifyTriggers, sdk.TriggerDefinition{Threshold: threshold, TriggerAction: sdk.TriggerActionNotify}) } - var oldTriggers []TriggerDefinition + var oldTriggers []sdk.TriggerDefinition oldTriggers = append(oldTriggers, oldNotifyTriggers...) - oldTriggers = append(oldTriggers, TriggerDefinition{Threshold: *resourceMonitor.SuspendAt, TriggerAction: TriggerActionSuspend}) - oldTriggers = append(oldTriggers, TriggerDefinition{Threshold: *resourceMonitor.SuspendImmediateAt, TriggerAction: TriggerActionSuspendImmediate}) + oldTriggers = append(oldTriggers, sdk.TriggerDefinition{Threshold: *resourceMonitor.SuspendAt, TriggerAction: sdk.TriggerActionSuspend}) + oldTriggers = append(oldTriggers, sdk.TriggerDefinition{Threshold: *resourceMonitor.SuspendImmediateAt, TriggerAction: sdk.TriggerActionSuspendImmediate}) newTriggers := oldTriggers - newTriggers = append(newTriggers, TriggerDefinition{Threshold: 30, TriggerAction: TriggerActionNotify}) - alterOptions := &AlterResourceMonitorOptions{ + newTriggers = append(newTriggers, sdk.TriggerDefinition{Threshold: 30, TriggerAction: sdk.TriggerActionNotify}) + alterOptions := &sdk.AlterResourceMonitorOptions{ Triggers: newTriggers, } err := client.ResourceMonitors.Alter(ctx, resourceMonitor.ID(), alterOptions) require.NoError(t, err) - resourceMonitors, err := client.ResourceMonitors.Show(ctx, &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(resourceMonitor.Name), + resourceMonitors, err := client.ResourceMonitors.Show(ctx, &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(resourceMonitor.Name), }, }) require.NoError(t, err) assert.Equal(t, 1, len(resourceMonitors)) resourceMonitor = &resourceMonitors[0] - var newNotifyTriggers []TriggerDefinition + var newNotifyTriggers []sdk.TriggerDefinition for _, threshold := range resourceMonitor.NotifyTriggers { - newNotifyTriggers = append(newNotifyTriggers, TriggerDefinition{Threshold: threshold, TriggerAction: TriggerActionNotify}) + newNotifyTriggers = append(newNotifyTriggers, sdk.TriggerDefinition{Threshold: threshold, TriggerAction: sdk.TriggerActionNotify}) } - var allTriggers []TriggerDefinition + var allTriggers []sdk.TriggerDefinition allTriggers = append(allTriggers, newNotifyTriggers...) - allTriggers = append(allTriggers, TriggerDefinition{Threshold: *resourceMonitor.SuspendAt, TriggerAction: TriggerActionSuspend}) - allTriggers = append(allTriggers, TriggerDefinition{Threshold: *resourceMonitor.SuspendImmediateAt, TriggerAction: TriggerActionSuspendImmediate}) + allTriggers = append(allTriggers, sdk.TriggerDefinition{Threshold: *resourceMonitor.SuspendAt, TriggerAction: sdk.TriggerActionSuspend}) + allTriggers = append(allTriggers, sdk.TriggerDefinition{Threshold: *resourceMonitor.SuspendImmediateAt, TriggerAction: sdk.TriggerActionSuspendImmediate}) assert.ElementsMatch(t, newTriggers, allTriggers) }) @@ -191,16 +191,16 @@ func TestInt_ResourceMonitorAlter(t *testing.T) { resourceMonitor, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) creditQuota := 100 - alterOptions := &AlterResourceMonitorOptions{ - Set: &ResourceMonitorSet{ + alterOptions := &sdk.AlterResourceMonitorOptions{ + Set: &sdk.ResourceMonitorSet{ CreditQuota: &creditQuota, }, } err := client.ResourceMonitors.Alter(ctx, resourceMonitor.ID(), alterOptions) require.NoError(t, err) - resourceMonitors, err := client.ResourceMonitors.Show(ctx, &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(resourceMonitor.Name), + resourceMonitors, err := client.ResourceMonitors.Show(ctx, &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(resourceMonitor.Name), }, }) require.NoError(t, err) @@ -211,13 +211,13 @@ func TestInt_ResourceMonitorAlter(t *testing.T) { t.Run("when changing scheduling info", func(t *testing.T) { resourceMonitor, resourceMonitorCleanup := createResourceMonitor(t, client) t.Cleanup(resourceMonitorCleanup) - frequency, err := FrequencyFromString("NEVER") + frequency, err := sdk.FrequencyFromString("NEVER") require.NoError(t, err) startTimeStamp := "2025-01-01 12:34" endTimeStamp := "2026-01-01 12:34" - alterOptions := &AlterResourceMonitorOptions{ - Set: &ResourceMonitorSet{ + alterOptions := &sdk.AlterResourceMonitorOptions{ + Set: &sdk.ResourceMonitorSet{ Frequency: frequency, StartTimestamp: &startTimeStamp, EndTimestamp: &endTimeStamp, @@ -225,9 +225,9 @@ func TestInt_ResourceMonitorAlter(t *testing.T) { } err = client.ResourceMonitors.Alter(ctx, resourceMonitor.ID(), alterOptions) require.NoError(t, err) - resourceMonitors, err := client.ResourceMonitors.Show(ctx, &ShowResourceMonitorOptions{ - Like: &Like{ - Pattern: String(resourceMonitor.Name), + resourceMonitors, err := client.ResourceMonitors.Show(ctx, &sdk.ShowResourceMonitorOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(resourceMonitor.Name), }, }) require.NoError(t, err) @@ -245,7 +245,7 @@ func TestInt_ResourceMonitorAlter(t *testing.T) { func TestInt_ResourceMonitorDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("when resource monitor exists", func(t *testing.T) { resourceMonitor, _ := createResourceMonitor(t, client) @@ -253,12 +253,12 @@ func TestInt_ResourceMonitorDrop(t *testing.T) { err := client.ResourceMonitors.Drop(ctx, id) require.NoError(t, err) _, err = client.ResourceMonitors.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when resource monitor does not exist", func(t *testing.T) { - id := NewAccountObjectIdentifier("does_not_exist") + id := sdk.NewAccountObjectIdentifier("does_not_exist") err := client.ResourceMonitors.Drop(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/roles_integration_test.go b/pkg/sdk/testint/roles_integration_test.go similarity index 61% rename from pkg/sdk/roles_integration_test.go rename to pkg/sdk/testint/roles_integration_test.go index aee811fe3a..5d20460685 100644 --- a/pkg/sdk/roles_integration_test.go +++ b/pkg/sdk/testint/roles_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_Roles(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -20,14 +20,14 @@ func TestInt_Roles(t *testing.T) { t.Run("create no options", func(t *testing.T) { roleID := randomAccountObjectIdentifier(t) - err := client.Roles.Create(ctx, NewCreateRoleRequest(roleID)) + err := client.Roles.Create(ctx, sdk.NewCreateRoleRequest(roleID)) require.NoError(t, err) t.Cleanup(func() { - err := client.Roles.Drop(ctx, NewDropRoleRequest(roleID)) + err := client.Roles.Drop(ctx, sdk.NewDropRoleRequest(roleID)) require.NoError(t, err) }) - role, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(roleID)) + role, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(roleID)) require.NoError(t, err) assert.Equal(t, roleID.Name(), role.Name) @@ -35,14 +35,14 @@ func TestInt_Roles(t *testing.T) { t.Run("create if not exists", func(t *testing.T) { roleID := randomAccountObjectIdentifier(t) - err := client.Roles.Create(ctx, NewCreateRoleRequest(roleID).WithIfNotExists(true)) + err := client.Roles.Create(ctx, sdk.NewCreateRoleRequest(roleID).WithIfNotExists(true)) require.NoError(t, err) t.Cleanup(func() { - err := client.Roles.Drop(ctx, NewDropRoleRequest(roleID)) + err := client.Roles.Drop(ctx, sdk.NewDropRoleRequest(roleID)) require.NoError(t, err) }) - role, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(roleID)) + role, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(roleID)) require.NoError(t, err) assert.Equal(t, roleID.Name(), role.Name) }) @@ -50,9 +50,9 @@ func TestInt_Roles(t *testing.T) { t.Run("create complete", func(t *testing.T) { roleID := randomAccountObjectIdentifier(t) comment := randomComment(t) - createReq := NewCreateRoleRequest(roleID). + createReq := sdk.NewCreateRoleRequest(roleID). WithOrReplace(true). - WithTag([]TagAssociation{ + WithTag([]sdk.TagAssociation{ { Name: tag.ID(), Value: "v1", @@ -66,21 +66,21 @@ func TestInt_Roles(t *testing.T) { err := client.Roles.Create(ctx, createReq) require.NoError(t, err) t.Cleanup(func() { - err := client.Roles.Drop(ctx, NewDropRoleRequest(roleID)) + err := client.Roles.Drop(ctx, sdk.NewDropRoleRequest(roleID)) require.NoError(t, err) }) - role, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(roleID)) + role, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(roleID)) require.NoError(t, err) assert.Equal(t, roleID.Name(), role.Name) assert.Equal(t, comment, role.Comment) // verify tags - tag1Value, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), ObjectTypeRole) + tag1Value, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), sdk.ObjectTypeRole) require.NoError(t, err) assert.Equal(t, "v1", tag1Value) - tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), role.ID(), ObjectTypeRole) + tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), role.ID(), sdk.ObjectTypeRole) require.NoError(t, err) assert.Equal(t, "v2", tag2Value) }) @@ -89,17 +89,17 @@ func TestInt_Roles(t *testing.T) { role, _ := createRole(t, client) newName := randomAccountObjectIdentifier(t) t.Cleanup(func() { - err := client.Roles.Drop(ctx, NewDropRoleRequest(newName)) + err := client.Roles.Drop(ctx, sdk.NewDropRoleRequest(newName)) if err != nil { - err = client.Roles.Drop(ctx, NewDropRoleRequest(role.ID())) + err = client.Roles.Drop(ctx, sdk.NewDropRoleRequest(role.ID())) require.NoError(t, err) } }) - err := client.Roles.Alter(ctx, NewAlterRoleRequest(role.ID()).WithRenameTo(newName)) + err := client.Roles.Alter(ctx, sdk.NewAlterRoleRequest(role.ID()).WithRenameTo(newName)) require.NoError(t, err) - r, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(newName)) + r, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(newName)) require.NoError(t, err) assert.Equal(t, newName.Name(), r.Name) }) @@ -112,7 +112,7 @@ func TestInt_Roles(t *testing.T) { require.Error(t, err) tagValue := "new-tag-value" - err = client.Roles.Alter(ctx, NewAlterRoleRequest(role.ID()).WithSetTags([]TagAssociation{ + err = client.Roles.Alter(ctx, sdk.NewAlterRoleRequest(role.ID()).WithSetTags([]sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, @@ -120,7 +120,7 @@ func TestInt_Roles(t *testing.T) { })) require.NoError(t, err) - addedTag, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), ObjectTypeRole) + addedTag, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), sdk.ObjectTypeRole) require.NoError(t, err) assert.Equal(t, tagValue, addedTag) }) @@ -128,8 +128,8 @@ func TestInt_Roles(t *testing.T) { t.Run("alter unset tags", func(t *testing.T) { tagValue := "tag-value" id := randomAccountObjectIdentifier(t) - role, cleanup := createRoleWithRequest(t, client, NewCreateRoleRequest(id). - WithTag([]TagAssociation{ + role, cleanup := createRoleWithRequest(t, client, sdk.NewCreateRoleRequest(id). + WithTag([]sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, @@ -137,14 +137,14 @@ func TestInt_Roles(t *testing.T) { })) t.Cleanup(cleanup) - value, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), ObjectTypeRole) + value, err := client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), sdk.ObjectTypeRole) require.NoError(t, err) assert.Equal(t, tagValue, value) - err = client.Roles.Alter(ctx, NewAlterRoleRequest(role.ID()).WithUnsetTags([]ObjectIdentifier{tag.ID()})) + err = client.Roles.Alter(ctx, sdk.NewAlterRoleRequest(role.ID()).WithUnsetTags([]sdk.ObjectIdentifier{tag.ID()})) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), ObjectTypeRole) + _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), role.ID(), sdk.ObjectTypeRole) require.Error(t, err) }) @@ -153,10 +153,10 @@ func TestInt_Roles(t *testing.T) { t.Cleanup(cleanupRole) comment := randomComment(t) - err := client.Roles.Alter(ctx, NewAlterRoleRequest(role.ID()).WithSetComment(comment)) + err := client.Roles.Alter(ctx, sdk.NewAlterRoleRequest(role.ID()).WithSetComment(comment)) require.NoError(t, err) - r, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + r, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) assert.Equal(t, comment, r.Comment) }) @@ -164,23 +164,23 @@ func TestInt_Roles(t *testing.T) { t.Run("alter unset comment", func(t *testing.T) { comment := randomComment(t) id := randomAccountObjectIdentifier(t) - role, cleanup := createRoleWithRequest(t, client, NewCreateRoleRequest(id).WithComment(comment)) + role, cleanup := createRoleWithRequest(t, client, sdk.NewCreateRoleRequest(id).WithComment(comment)) t.Cleanup(cleanup) - err := client.Roles.Alter(ctx, NewAlterRoleRequest(role.ID()).WithUnsetComment(true)) + err := client.Roles.Alter(ctx, sdk.NewAlterRoleRequest(role.ID()).WithUnsetComment(true)) require.NoError(t, err) - r, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + r, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) assert.Equal(t, "", r.Comment) }) t.Run("drop no options", func(t *testing.T) { role, _ := createRole(t, client) - err := client.Roles.Drop(ctx, NewDropRoleRequest(role.ID())) + err := client.Roles.Drop(ctx, sdk.NewDropRoleRequest(role.ID())) require.NoError(t, err) - r, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + r, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.Nil(t, r) require.Error(t, err) }) @@ -192,11 +192,11 @@ func TestInt_Roles(t *testing.T) { role2, cleanup2 := createRole(t, client) t.Cleanup(cleanup2) - roles, err := client.Roles.Show(ctx, NewShowRoleRequest()) + roles, err := client.Roles.Show(ctx, sdk.NewShowRoleRequest()) require.NoError(t, err) require.GreaterOrEqual(t, len(roles), 2) - roleIDs := make([]AccountObjectIdentifier, len(roles)) + roleIDs := make([]sdk.AccountObjectIdentifier, len(roles)) for i, r := range roles { roleIDs[i] = r.ID() } @@ -208,15 +208,15 @@ func TestInt_Roles(t *testing.T) { role, cleanup := createRole(t, client) t.Cleanup(cleanup) - roles, err := client.Roles.Show(ctx, NewShowRoleRequest().WithLike(NewLikeRequest(role.Name))) + roles, err := client.Roles.Show(ctx, sdk.NewShowRoleRequest().WithLike(sdk.NewLikeRequest(role.Name))) require.NoError(t, err) assert.Equal(t, 1, len(roles)) assert.Equal(t, role.Name, roles[0].Name) }) t.Run("in class", func(t *testing.T) { - roles, err := client.Roles.Show(ctx, NewShowRoleRequest().WithInClass(RolesInClass{ - Class: NewSchemaObjectIdentifier("SNOWFLAKE", "ML", "ANOMALY_DETECTION"), + roles, err := client.Roles.Show(ctx, sdk.NewShowRoleRequest().WithInClass(sdk.RolesInClass{ + Class: sdk.NewSchemaObjectIdentifier("SNOWFLAKE", "ML", "ANOMALY_DETECTION"), })) require.NoError(t, err) assert.Equal(t, 1, len(roles)) @@ -227,7 +227,7 @@ func TestInt_Roles(t *testing.T) { role, cleanup := createRole(t, client) t.Cleanup(cleanup) - r, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + r, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) require.NotNil(t, r) assert.Equal(t, role.Name, r.Name) @@ -241,17 +241,17 @@ func TestInt_Roles(t *testing.T) { t.Cleanup(cleanupUser) userID := user.ID() - err := client.Roles.Grant(ctx, NewGrantRoleRequest(role.ID(), GrantRole{User: &userID})) + err := client.Roles.Grant(ctx, sdk.NewGrantRoleRequest(role.ID(), sdk.GrantRole{User: &userID})) require.NoError(t, err) - roleBefore, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + roleBefore, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) assert.Equal(t, 1, roleBefore.AssignedToUsers) - err = client.Roles.Revoke(ctx, NewRevokeRoleRequest(role.ID(), RevokeRole{User: &userID})) + err = client.Roles.Revoke(ctx, sdk.NewRevokeRoleRequest(role.ID(), sdk.RevokeRole{User: &userID})) require.NoError(t, err) - roleAfter, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + roleAfter, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) assert.Equal(t, 0, roleAfter.AssignedToUsers) }) @@ -264,25 +264,25 @@ func TestInt_Roles(t *testing.T) { t.Cleanup(cleanup) parentRoleID := parentRole.ID() - err := client.Roles.Grant(ctx, NewGrantRoleRequest(role.ID(), GrantRole{Role: &parentRoleID})) + err := client.Roles.Grant(ctx, sdk.NewGrantRoleRequest(role.ID(), sdk.GrantRole{Role: &parentRoleID})) require.NoError(t, err) - roleBefore, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + roleBefore, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) - parentRoleBefore, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(parentRole.ID())) + parentRoleBefore, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(parentRole.ID())) require.NoError(t, err) require.Equal(t, 1, roleBefore.GrantedToRoles) require.Equal(t, 1, parentRoleBefore.GrantedRoles) - err = client.Roles.Revoke(ctx, NewRevokeRoleRequest(role.ID(), RevokeRole{Role: &parentRoleID})) + err = client.Roles.Revoke(ctx, sdk.NewRevokeRoleRequest(role.ID(), sdk.RevokeRole{Role: &parentRoleID})) require.NoError(t, err) - roleAfter, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(role.ID())) + roleAfter, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(role.ID())) require.NoError(t, err) - parentRoleAfter, err := client.Roles.ShowByID(ctx, NewShowByIdRoleRequest(parentRole.ID())) + parentRoleAfter, err := client.Roles.ShowByID(ctx, sdk.NewShowByIdRoleRequest(parentRole.ID())) require.NoError(t, err) assert.Equal(t, 0, roleAfter.GrantedToRoles) diff --git a/pkg/sdk/schemas_integration_test.go b/pkg/sdk/testint/schemas_integration_test.go similarity index 65% rename from pkg/sdk/schemas_integration_test.go rename to pkg/sdk/testint/schemas_integration_test.go index eae6aba800..dc3b20fcc7 100644 --- a/pkg/sdk/schemas_integration_test.go +++ b/pkg/sdk/testint/schemas_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "fmt" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_SchemasCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDb := createDatabase(t, client) t.Cleanup(cleanupDb) @@ -21,13 +21,13 @@ func TestInt_SchemasCreate(t *testing.T) { t.Run("replace", func(t *testing.T) { comment := "replaced" - err := client.Schemas.Create(ctx, schema.ID(), &CreateSchemaOptions{ - OrReplace: Bool(true), - DataRetentionTimeInDays: Int(10), - MaxDataExtensionTimeInDays: Int(10), - DefaultDDLCollation: String("en_US-trim"), - WithManagedAccess: Bool(true), - Comment: String(comment), + err := client.Schemas.Create(ctx, schema.ID(), &sdk.CreateSchemaOptions{ + OrReplace: sdk.Bool(true), + DataRetentionTimeInDays: sdk.Int(10), + MaxDataExtensionTimeInDays: sdk.Int(10), + DefaultDDLCollation: sdk.String("en_US-trim"), + WithManagedAccess: sdk.Bool(true), + Comment: sdk.String(comment), }) require.NoError(t, err) s, err := client.Schemas.ShowByID(ctx, schema.ID()) @@ -39,9 +39,9 @@ func TestInt_SchemasCreate(t *testing.T) { t.Run("if not exists", func(t *testing.T) { comment := "some_comment" - err := client.Schemas.Create(ctx, schema.ID(), &CreateSchemaOptions{ - IfNotExists: Bool(true), - Comment: String(comment), + err := client.Schemas.Create(ctx, schema.ID(), &sdk.CreateSchemaOptions{ + IfNotExists: sdk.Bool(true), + Comment: sdk.String(comment), }) require.NoError(t, err) s, err := client.Schemas.ShowByID(ctx, schema.ID()) @@ -51,16 +51,16 @@ func TestInt_SchemasCreate(t *testing.T) { t.Run("clone", func(t *testing.T) { comment := "some_comment" - schemaID := NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).name) - err := client.Schemas.Create(ctx, schemaID, &CreateSchemaOptions{ - Comment: String(comment), + schemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).Name()) + err := client.Schemas.Create(ctx, schemaID, &sdk.CreateSchemaOptions{ + Comment: sdk.String(comment), }) require.NoError(t, err) - clonedSchemaID := NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).name) - err = client.Schemas.Create(ctx, clonedSchemaID, &CreateSchemaOptions{ - Comment: String(comment), - Clone: &Clone{ + clonedSchemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).Name()) + err = client.Schemas.Create(ctx, clonedSchemaID, &sdk.CreateSchemaOptions{ + Comment: sdk.String(comment), + Clone: &sdk.Clone{ SourceObject: schemaID, }, }) @@ -83,18 +83,18 @@ func TestInt_SchemasCreate(t *testing.T) { t.Run("with tags", func(t *testing.T) { tagName := randomString(t) - tagID := NewAccountObjectIdentifier(tagName) - _, err := client.exec(ctx, fmt.Sprintf(`CREATE TAG "%s"`, tagName)) + tagID := sdk.NewAccountObjectIdentifier(tagName) + _, err := client.ExecForTests(ctx, fmt.Sprintf(`CREATE TAG "%s"`, tagName)) require.NoError(t, err) t.Cleanup(func() { - _, err := client.exec(ctx, fmt.Sprintf(`DROP TAG "%s"`, tagName)) + _, err := client.ExecForTests(ctx, fmt.Sprintf(`DROP TAG "%s"`, tagName)) require.NoError(t, err) }) - schemaID := NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).name) + schemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).Name()) tagValue := randomString(t) - err = client.Schemas.Create(ctx, schemaID, &CreateSchemaOptions{ - Tag: []TagAssociation{ + err = client.Schemas.Create(ctx, schemaID, &sdk.CreateSchemaOptions{ + Tag: []sdk.TagAssociation{ { Name: tagID, Value: tagValue, @@ -107,7 +107,7 @@ func TestInt_SchemasCreate(t *testing.T) { require.NoError(t, err) }) - tv, err := client.SystemFunctions.GetTag(ctx, tagID, schemaID, ObjectTypeSchema) + tv, err := client.SystemFunctions.GetTag(ctx, tagID, schemaID, sdk.ObjectTypeSchema) require.NoError(t, err) assert.Equal(t, tagValue, tv) }) @@ -115,15 +115,15 @@ func TestInt_SchemasCreate(t *testing.T) { func TestInt_SchemasAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDb := createDatabase(t, client) t.Cleanup(cleanupDb) t.Run("rename to", func(t *testing.T) { schema, _ := createSchema(t, client, db) - newID := NewDatabaseObjectIdentifier(db.Name, randomString(t)) - err := client.Schemas.Alter(ctx, schema.ID(), &AlterSchemaOptions{ + newID := sdk.NewDatabaseObjectIdentifier(db.Name, randomString(t)) + err := client.Schemas.Alter(ctx, schema.ID(), &sdk.AlterSchemaOptions{ NewName: newID, }) require.NoError(t, err) @@ -145,11 +145,11 @@ func TestInt_SchemasAlter(t *testing.T) { table, _ := createTable(t, client, db, schema) t.Cleanup(func() { - _, err := client.exec(ctx, fmt.Sprintf("DROP TABLE \"%s\".\"%s\".\"%s\"", db.Name, swapSchema.Name, table.Name)) + _, err := client.ExecForTests(ctx, fmt.Sprintf("DROP TABLE \"%s\".\"%s\".\"%s\"", db.Name, swapSchema.Name, table.Name)) require.NoError(t, err) }) - err := client.Schemas.Alter(ctx, schema.ID(), &AlterSchemaOptions{ + err := client.Schemas.Alter(ctx, schema.ID(), &sdk.AlterSchemaOptions{ SwapWith: swapSchema.ID(), }) require.NoError(t, err) @@ -166,12 +166,12 @@ func TestInt_SchemasAlter(t *testing.T) { t.Cleanup(cleanupSchema) comment := randomComment(t) - err := client.Schemas.Alter(ctx, schema.ID(), &AlterSchemaOptions{ - Set: &SchemaSet{ - DataRetentionTimeInDays: Int(3), - MaxDataExtensionTimeInDays: Int(3), - DefaultDDLCollation: String("en_US-trim"), - Comment: String(comment), + err := client.Schemas.Alter(ctx, schema.ID(), &sdk.AlterSchemaOptions{ + Set: &sdk.SchemaSet{ + DataRetentionTimeInDays: sdk.Int(3), + MaxDataExtensionTimeInDays: sdk.Int(3), + DefaultDDLCollation: sdk.String("en_US-trim"), + Comment: sdk.String(comment), }, }) require.NoError(t, err) @@ -182,16 +182,16 @@ func TestInt_SchemasAlter(t *testing.T) { }) t.Run("unset", func(t *testing.T) { - schemaID := NewDatabaseObjectIdentifier(db.Name, randomString(t)) + schemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomString(t)) comment := randomComment(t) - err := client.Schemas.Create(ctx, schemaID, &CreateSchemaOptions{ - Comment: String(comment), + err := client.Schemas.Create(ctx, schemaID, &sdk.CreateSchemaOptions{ + Comment: sdk.String(comment), }) require.NoError(t, err) - err = client.Schemas.Alter(ctx, schemaID, &AlterSchemaOptions{ - Unset: &SchemaUnset{ - Comment: Bool(true), + err = client.Schemas.Alter(ctx, schemaID, &sdk.AlterSchemaOptions{ + Unset: &sdk.SchemaUnset{ + Comment: sdk.Bool(true), }, }) require.NoError(t, err) @@ -207,7 +207,7 @@ func TestInt_SchemasAlter(t *testing.T) { }) t.Run("set tags", func(t *testing.T) { - schemaID := NewDatabaseObjectIdentifier(db.Name, randomString(t)) + schemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomString(t)) err := client.Schemas.Create(ctx, schemaID, nil) require.NoError(t, err) t.Cleanup(func() { @@ -222,9 +222,9 @@ func TestInt_SchemasAlter(t *testing.T) { t.Cleanup(cleanupTag) tagValue := "tag-value" - err = client.Schemas.Alter(ctx, schemaID, &AlterSchemaOptions{ - Set: &SchemaSet{ - Tag: []TagAssociation{ + err = client.Schemas.Alter(ctx, schemaID, &sdk.AlterSchemaOptions{ + Set: &sdk.SchemaSet{ + Tag: []sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, @@ -234,25 +234,25 @@ func TestInt_SchemasAlter(t *testing.T) { }) require.NoError(t, err) - tv, err := client.SystemFunctions.GetTag(ctx, tag.ID(), s.ID(), ObjectTypeSchema) + tv, err := client.SystemFunctions.GetTag(ctx, tag.ID(), s.ID(), sdk.ObjectTypeSchema) require.NoError(t, err) assert.Equal(t, tagValue, tv) }) t.Run("unset tags", func(t *testing.T) { tagName := randomString(t) - tagID := NewAccountObjectIdentifier(tagName) - _, err := client.exec(ctx, fmt.Sprintf(`CREATE TAG "%s"`, tagName)) + tagID := sdk.NewAccountObjectIdentifier(tagName) + _, err := client.ExecForTests(ctx, fmt.Sprintf(`CREATE TAG "%s"`, tagName)) require.NoError(t, err) t.Cleanup(func() { - _, err := client.exec(ctx, fmt.Sprintf(`DROP TAG "%s"`, tagName)) + _, err := client.ExecForTests(ctx, fmt.Sprintf(`DROP TAG "%s"`, tagName)) require.NoError(t, err) }) - schemaID := NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).name) + schemaID := sdk.NewDatabaseObjectIdentifier(db.Name, randomAccountObjectIdentifier(t).Name()) tagValue := randomString(t) - err = client.Schemas.Create(ctx, schemaID, &CreateSchemaOptions{ - Tag: []TagAssociation{ + err = client.Schemas.Create(ctx, schemaID, &sdk.CreateSchemaOptions{ + Tag: []sdk.TagAssociation{ { Name: tagID, Value: tagValue, @@ -265,16 +265,16 @@ func TestInt_SchemasAlter(t *testing.T) { require.NoError(t, err) }) - err = client.Schemas.Alter(ctx, schemaID, &AlterSchemaOptions{ - Unset: &SchemaUnset{ - Tag: []ObjectIdentifier{ + err = client.Schemas.Alter(ctx, schemaID, &sdk.AlterSchemaOptions{ + Unset: &sdk.SchemaUnset{ + Tag: []sdk.ObjectIdentifier{ tagID, }, }, }) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tagID, schemaID, ObjectTypeSchema) + _, err = client.SystemFunctions.GetTag(ctx, tagID, schemaID, sdk.ObjectTypeSchema) require.Error(t, err) }) @@ -282,8 +282,8 @@ func TestInt_SchemasAlter(t *testing.T) { schema, cleanupSchema := createSchema(t, client, db) t.Cleanup(cleanupSchema) - err := client.Schemas.Alter(ctx, schema.ID(), &AlterSchemaOptions{ - EnableManagedAccess: Bool(true), + err := client.Schemas.Alter(ctx, schema.ID(), &sdk.AlterSchemaOptions{ + EnableManagedAccess: sdk.Bool(true), }) require.NoError(t, err) @@ -296,7 +296,7 @@ func TestInt_SchemasAlter(t *testing.T) { func TestInt_SchemasShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDb := createDatabase(t, client) t.Cleanup(cleanupDb) @@ -315,18 +315,18 @@ func TestInt_SchemasShow(t *testing.T) { }) t.Run("with options", func(t *testing.T) { - schemas, err := client.Schemas.Show(ctx, &ShowSchemaOptions{ - Terse: Bool(true), - History: Bool(true), - Like: &Like{ - Pattern: String(schema.Name), + schemas, err := client.Schemas.Show(ctx, &sdk.ShowSchemaOptions{ + Terse: sdk.Bool(true), + History: sdk.Bool(true), + Like: &sdk.Like{ + Pattern: sdk.String(schema.Name), }, - In: &SchemaIn{ - Account: Bool(true), + In: &sdk.SchemaIn{ + Account: sdk.Bool(true), }, - StartsWith: String(schema.Name), - LimitFrom: &LimitFrom{ - Rows: Int(1), + StartsWith: sdk.String(schema.Name), + LimitFrom: &sdk.LimitFrom{ + Rows: sdk.Int(1), }, }) require.NoError(t, err) @@ -340,7 +340,7 @@ func TestInt_SchemasShow(t *testing.T) { func TestInt_SchemasDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDb := createDatabase(t, client) t.Cleanup(cleanupDb) @@ -354,8 +354,8 @@ func TestInt_SchemasDrop(t *testing.T) { err = client.Schemas.Drop(ctx, schema.ID(), nil) require.NoError(t, err) - schemas, err := client.Schemas.Show(ctx, &ShowSchemaOptions{ - Like: &Like{ + schemas, err := client.Schemas.Show(ctx, &sdk.ShowSchemaOptions{ + Like: &sdk.Like{ Pattern: &schema.Name, }, }) @@ -367,7 +367,7 @@ func TestInt_SchemasDrop(t *testing.T) { todo: this test is failing, need to fix func TestInt_SchemasUndrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) db, cleanupDb := createDatabase(t, client) t.Cleanup(cleanupDb) diff --git a/pkg/sdk/session_policies_gen_integration_test.go b/pkg/sdk/testint/session_policies_gen_integration_test.go similarity index 63% rename from pkg/sdk/session_policies_gen_integration_test.go rename to pkg/sdk/testint/session_policies_gen_integration_test.go index cab45b2f4c..d054df48dd 100644 --- a/pkg/sdk/session_policies_gen_integration_test.go +++ b/pkg/sdk/testint/session_policies_gen_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_SessionPolicies(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -18,7 +18,7 @@ func TestInt_SessionPolicies(t *testing.T) { schema, schemaCleanup := createSchema(t, client, database) t.Cleanup(schemaCleanup) - assertSessionPolicy := func(t *testing.T, sessionPolicy *SessionPolicy, id SchemaObjectIdentifier, expectedComment string) { + assertSessionPolicy := func(t *testing.T, sessionPolicy *sdk.SessionPolicy, id sdk.SchemaObjectIdentifier, expectedComment string) { t.Helper() assert.NotEmpty(t, sessionPolicy.CreatedOn) assert.Equal(t, id.Name(), sessionPolicy.Name) @@ -32,8 +32,8 @@ func TestInt_SessionPolicies(t *testing.T) { assertSessionPolicyDescription := func( t *testing.T, - sessionPolicyDescription *SessionPolicyDescription, - id SchemaObjectIdentifier, + sessionPolicyDescription *sdk.SessionPolicyDescription, + id sdk.SchemaObjectIdentifier, ) { t.Helper() assert.NotEmpty(t, sessionPolicyDescription.CreatedOn) @@ -43,19 +43,19 @@ func TestInt_SessionPolicies(t *testing.T) { assert.Equal(t, "", sessionPolicyDescription.Comment) } - cleanupSessionPolicyProvider := func(id SchemaObjectIdentifier) func() { + cleanupSessionPolicyProvider := func(id sdk.SchemaObjectIdentifier) func() { return func() { - err := client.SessionPolicies.Drop(ctx, NewDropSessionPolicyRequest(id)) + err := client.SessionPolicies.Drop(ctx, sdk.NewDropSessionPolicyRequest(id)) require.NoError(t, err) } } - createSessionPolicy := func(t *testing.T) *SessionPolicy { + createSessionPolicy := func(t *testing.T) *sdk.SessionPolicy { t.Helper() name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - err := client.SessionPolicies.Create(ctx, NewCreateSessionPolicyRequest(id)) + err := client.SessionPolicies.Create(ctx, sdk.NewCreateSessionPolicyRequest(id)) require.NoError(t, err) t.Cleanup(cleanupSessionPolicyProvider(id)) @@ -67,14 +67,14 @@ func TestInt_SessionPolicies(t *testing.T) { t.Run("create session_policy: complete case", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) comment := randomComment(t) - request := NewCreateSessionPolicyRequest(id). - WithSessionIdleTimeoutMins(Int(5)). - WithSessionUiIdleTimeoutMins(Int(34)). + request := sdk.NewCreateSessionPolicyRequest(id). + WithSessionIdleTimeoutMins(sdk.Int(5)). + WithSessionUiIdleTimeoutMins(sdk.Int(34)). WithComment(&comment). - WithIfNotExists(Bool(true)) + WithIfNotExists(sdk.Bool(true)) err := client.SessionPolicies.Create(ctx, request) require.NoError(t, err) @@ -88,9 +88,9 @@ func TestInt_SessionPolicies(t *testing.T) { t.Run("create session_policy: no optionals", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - request := NewCreateSessionPolicyRequest(id) + request := sdk.NewCreateSessionPolicyRequest(id) err := client.SessionPolicies.Create(ctx, request) require.NoError(t, err) @@ -104,34 +104,34 @@ func TestInt_SessionPolicies(t *testing.T) { t.Run("drop session_policy: existing", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - err := client.SessionPolicies.Create(ctx, NewCreateSessionPolicyRequest(id)) + err := client.SessionPolicies.Create(ctx, sdk.NewCreateSessionPolicyRequest(id)) require.NoError(t, err) - err = client.SessionPolicies.Drop(ctx, NewDropSessionPolicyRequest(id)) + err = client.SessionPolicies.Drop(ctx, sdk.NewDropSessionPolicyRequest(id)) require.NoError(t, err) _, err = client.SessionPolicies.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("drop session_policy: non-existing", func(t *testing.T) { - id := NewSchemaObjectIdentifier(database.Name, schema.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, "does_not_exist") - err := client.SessionPolicies.Drop(ctx, NewDropSessionPolicyRequest(id)) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + err := client.SessionPolicies.Drop(ctx, sdk.NewDropSessionPolicyRequest(id)) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("alter session_policy: set value and unset value", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - err := client.SessionPolicies.Create(ctx, NewCreateSessionPolicyRequest(id)) + err := client.SessionPolicies.Create(ctx, sdk.NewCreateSessionPolicyRequest(id)) require.NoError(t, err) t.Cleanup(cleanupSessionPolicyProvider(id)) - alterRequest := NewAlterSessionPolicyRequest(id).WithSet(NewSessionPolicySetRequest().WithComment(String("new comment"))) + alterRequest := sdk.NewAlterSessionPolicyRequest(id).WithSet(sdk.NewSessionPolicySetRequest().WithComment(sdk.String("new comment"))) err = client.SessionPolicies.Alter(ctx, alterRequest) require.NoError(t, err) @@ -140,7 +140,7 @@ func TestInt_SessionPolicies(t *testing.T) { assert.Equal(t, "new comment", alteredSessionPolicy.Comment) - alterRequest = NewAlterSessionPolicyRequest(id).WithUnset(NewSessionPolicyUnsetRequest().WithComment(Bool(true))) + alterRequest = sdk.NewAlterSessionPolicyRequest(id).WithUnset(sdk.NewSessionPolicyUnsetRequest().WithComment(sdk.Bool(true))) err = client.SessionPolicies.Alter(ctx, alterRequest) require.NoError(t, err) @@ -155,51 +155,51 @@ func TestInt_SessionPolicies(t *testing.T) { t.Cleanup(tagCleanup) name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - err := client.SessionPolicies.Create(ctx, NewCreateSessionPolicyRequest(id)) + err := client.SessionPolicies.Create(ctx, sdk.NewCreateSessionPolicyRequest(id)) require.NoError(t, err) t.Cleanup(cleanupSessionPolicyProvider(id)) tagValue := "abc" - tags := []TagAssociation{ + tags := []sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, }, } - alterRequestSetTags := NewAlterSessionPolicyRequest(id).WithSetTags(tags) + alterRequestSetTags := sdk.NewAlterSessionPolicyRequest(id).WithSetTags(tags) err = client.SessionPolicies.Alter(ctx, alterRequestSetTags) require.NoError(t, err) - returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeSessionPolicy) + returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeSessionPolicy) require.NoError(t, err) assert.Equal(t, tagValue, returnedTagValue) - unsetTags := []ObjectIdentifier{ + unsetTags := []sdk.ObjectIdentifier{ tag.ID(), } - alterRequestUnsetTags := NewAlterSessionPolicyRequest(id).WithUnsetTags(unsetTags) + alterRequestUnsetTags := sdk.NewAlterSessionPolicyRequest(id).WithUnsetTags(unsetTags) err = client.SessionPolicies.Alter(ctx, alterRequestUnsetTags) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeSessionPolicy) + _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeSessionPolicy) require.Error(t, err) }) t.Run("alter session_policy: rename", func(t *testing.T) { name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - err := client.SessionPolicies.Create(ctx, NewCreateSessionPolicyRequest(id)) + err := client.SessionPolicies.Create(ctx, sdk.NewCreateSessionPolicyRequest(id)) require.NoError(t, err) newName := randomString(t) - newId := NewSchemaObjectIdentifier(database.Name, schema.Name, newName) - alterRequest := NewAlterSessionPolicyRequest(id).WithRenameTo(&newId) + newId := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, newName) + alterRequest := sdk.NewAlterSessionPolicyRequest(id).WithRenameTo(&newId) err = client.SessionPolicies.Alter(ctx, alterRequest) if err != nil { @@ -210,7 +210,7 @@ func TestInt_SessionPolicies(t *testing.T) { require.NoError(t, err) _, err = client.SessionPolicies.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) sessionPolicy, err := client.SessionPolicies.ShowByID(ctx, newId) require.NoError(t, err) @@ -222,7 +222,7 @@ func TestInt_SessionPolicies(t *testing.T) { sessionPolicy1 := createSessionPolicy(t) sessionPolicy2 := createSessionPolicy(t) - showRequest := NewShowSessionPolicyRequest() + showRequest := sdk.NewShowSessionPolicyRequest() returnedSessionPolicies, err := client.SessionPolicies.Show(ctx, showRequest) require.NoError(t, err) diff --git a/pkg/sdk/sessions_integration_test.go b/pkg/sdk/testint/sessions_integration_test.go similarity index 60% rename from pkg/sdk/sessions_integration_test.go rename to pkg/sdk/testint/sessions_integration_test.go index 28f9edd371..be1e9e24da 100644 --- a/pkg/sdk/sessions_integration_test.go +++ b/pkg/sdk/testint/sessions_integration_test.go @@ -1,36 +1,36 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_AlterSession(t *testing.T) { client := testClient(t) - ctx := context.Background() - opts := &AlterSessionOptions{ - Set: &SessionSet{ - &SessionParameters{ - AbortDetachedQuery: Bool(true), - Autocommit: Bool(true), - GeographyOutputFormat: Pointer(GeographyOutputFormatGeoJSON), - WeekOfYearPolicy: Int(1), + ctx := testContext(t) + opts := &sdk.AlterSessionOptions{ + Set: &sdk.SessionSet{ + SessionParameters: &sdk.SessionParameters{ + AbortDetachedQuery: sdk.Bool(true), + Autocommit: sdk.Bool(true), + GeographyOutputFormat: sdk.Pointer(sdk.GeographyOutputFormatGeoJSON), + WeekOfYearPolicy: sdk.Int(1), }, }, } err := client.Sessions.AlterSession(ctx, opts) require.NoError(t, err) cleanup := func() { - opts = &AlterSessionOptions{ - Unset: &SessionUnset{ - &SessionParametersUnset{ - AbortDetachedQuery: Bool(true), - Autocommit: Bool(true), - GeographyOutputFormat: Bool(true), - WeekOfYearPolicy: Bool(true), + opts = &sdk.AlterSessionOptions{ + Unset: &sdk.SessionUnset{ + SessionParametersUnset: &sdk.SessionParametersUnset{ + AbortDetachedQuery: sdk.Bool(true), + Autocommit: sdk.Bool(true), + GeographyOutputFormat: sdk.Bool(true), + WeekOfYearPolicy: sdk.Bool(true), }, }, } @@ -39,23 +39,23 @@ func TestInt_AlterSession(t *testing.T) { } t.Cleanup(cleanup) - parameter, err := client.Parameters.ShowSessionParameter(ctx, SessionParameterAbortDetachedQuery) + parameter, err := client.Parameters.ShowSessionParameter(ctx, sdk.SessionParameterAbortDetachedQuery) require.NoError(t, err) assert.Equal(t, "true", parameter.Value) - parameter, err = client.Parameters.ShowSessionParameter(ctx, SessionParameterAutocommit) + parameter, err = client.Parameters.ShowSessionParameter(ctx, sdk.SessionParameterAutocommit) require.NoError(t, err) assert.Equal(t, "true", parameter.Value) - parameter, err = client.Parameters.ShowSessionParameter(ctx, SessionParameterGeographyOutputFormat) + parameter, err = client.Parameters.ShowSessionParameter(ctx, sdk.SessionParameterGeographyOutputFormat) require.NoError(t, err) - assert.Equal(t, string(GeographyOutputFormatGeoJSON), parameter.Value) - parameter, err = client.Parameters.ShowSessionParameter(ctx, SessionParameterWeekOfYearPolicy) + assert.Equal(t, string(sdk.GeographyOutputFormatGeoJSON), parameter.Value) + parameter, err = client.Parameters.ShowSessionParameter(ctx, sdk.SessionParameterWeekOfYearPolicy) require.NoError(t, err) assert.Equal(t, "1", parameter.Value) } func TestInt_ShowParameters(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) parameters, err := client.Parameters.ShowParameters(ctx, nil) require.NoError(t, err) assert.NotEmpty(t, parameters) @@ -63,49 +63,49 @@ func TestInt_ShowParameters(t *testing.T) { func TestInt_ShowAccountParameter(t *testing.T) { client := testClient(t) - ctx := context.Background() - parameter, err := client.Parameters.ShowAccountParameter(ctx, AccountParameterAutocommit) + ctx := testContext(t) + parameter, err := client.Parameters.ShowAccountParameter(ctx, sdk.AccountParameterAutocommit) require.NoError(t, err) assert.NotEmpty(t, parameter) } func TestInt_ShowSessionParameter(t *testing.T) { client := testClient(t) - ctx := context.Background() - parameter, err := client.Parameters.ShowSessionParameter(ctx, SessionParameterAutocommit) + ctx := testContext(t) + parameter, err := client.Parameters.ShowSessionParameter(ctx, sdk.SessionParameterAutocommit) require.NoError(t, err) assert.NotEmpty(t, parameter) } func TestInt_ShowObjectParameter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - parameter, err := client.Parameters.ShowObjectParameter(ctx, ObjectParameterDataRetentionTimeInDays, Object{ObjectType: databaseTest.ObjectType(), Name: databaseTest.ID()}) + parameter, err := client.Parameters.ShowObjectParameter(ctx, sdk.ObjectParameterDataRetentionTimeInDays, sdk.Object{ObjectType: databaseTest.ObjectType(), Name: databaseTest.ID()}) require.NoError(t, err) assert.NotEmpty(t, parameter) } func TestInt_ShowUserParameter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) user, err := client.ContextFunctions.CurrentUser(ctx) require.NoError(t, err) - userID := NewAccountObjectIdentifier(user) - parameter, err := client.Parameters.ShowUserParameter(ctx, UserParameterAutocommit, userID) + userID := sdk.NewAccountObjectIdentifier(user) + parameter, err := client.Parameters.ShowUserParameter(ctx, sdk.UserParameterAutocommit, userID) require.NoError(t, err) assert.NotEmpty(t, parameter) } func TestInt_UseWarehouse(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) originalWH, err := client.ContextFunctions.CurrentWarehouse(ctx) require.NoError(t, err) t.Cleanup(func() { - originalWHIdentifier := NewAccountObjectIdentifier(originalWH) - if !validObjectidentifier(originalWHIdentifier) { + originalWHIdentifier := sdk.NewAccountObjectIdentifier(originalWH) + if !sdk.ValidObjectIdentifier(originalWHIdentifier) { return } err := client.Sessions.UseWarehouse(ctx, originalWHIdentifier) @@ -123,12 +123,12 @@ func TestInt_UseWarehouse(t *testing.T) { func TestInt_UseDatabase(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) originalDB, err := client.ContextFunctions.CurrentDatabase(ctx) require.NoError(t, err) t.Cleanup(func() { - originalDBIdentifier := NewAccountObjectIdentifier(originalDB) - if !validObjectidentifier(originalDBIdentifier) { + originalDBIdentifier := sdk.NewAccountObjectIdentifier(originalDB) + if !sdk.ValidObjectIdentifier(originalDBIdentifier) { return } err := client.Sessions.UseDatabase(ctx, originalDBIdentifier) @@ -146,7 +146,7 @@ func TestInt_UseDatabase(t *testing.T) { func TestInt_UseSchema(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) schemaTest, schemaCleanup := createSchema(t, client, databaseTest) @@ -156,8 +156,8 @@ func TestInt_UseSchema(t *testing.T) { originalDB, err := client.ContextFunctions.CurrentDatabase(ctx) require.NoError(t, err) t.Cleanup(func() { - originalSchemaIdentifier := NewDatabaseObjectIdentifier(originalDB, originalSchema) - if !validObjectidentifier(originalSchemaIdentifier) { + originalSchemaIdentifier := sdk.NewDatabaseObjectIdentifier(originalDB, originalSchema) + if !sdk.ValidObjectIdentifier(originalSchemaIdentifier) { return } err := client.Sessions.UseSchema(ctx, originalSchemaIdentifier) diff --git a/pkg/sdk/testint/setup_integration_test.go b/pkg/sdk/testint/setup_integration_test.go new file mode 100644 index 0000000000..e688274c00 --- /dev/null +++ b/pkg/sdk/testint/setup_integration_test.go @@ -0,0 +1,78 @@ +package testint + +import ( + "context" + "log" + "os" + "testing" + "time" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) + +var itc integrationTestContext + +func TestMain(m *testing.M) { + exitVal := execute(m) + os.Exit(exitVal) +} + +func execute(m *testing.M) int { + defer timer("tests")() + setup() + exitVal := m.Run() + cleanup() + return exitVal +} + +func setup() { + log.Println("Running integration tests setup") + + err := itc.initialize() + if err != nil { + log.Printf("Integration test context initialisation failed with %s\n", err) + os.Exit(1) + } +} + +func cleanup() { + log.Println("Running integration tests cleanup") +} + +type integrationTestContext struct { + client *sdk.Client + ctx context.Context +} + +func (itc *integrationTestContext) initialize() error { + log.Println("Initializing integration test context") + var err error + itc.client, err = sdk.NewDefaultClient() + itc.ctx = context.Background() + return err +} + +// timer measures time from invocation point to the end of method. +// It's supposed to be used like: +// +// defer timer("something to measure name")() +func timer(name string) func() { + start := time.Now() + return func() { + log.Printf("[DEBUG] %s took %v\n", name, time.Since(start)) + } +} + +// TODO: Discuss after this initial change is merged. +// This is temporary way to move all integration tests to this package without doing revolution in a single PR. +func testClient(t *testing.T) *sdk.Client { + t.Helper() + return itc.client +} + +// TODO: Discuss after this initial change is merged. +// This is temporary way to move all integration tests to this package without doing revolution in a single PR. +func testContext(t *testing.T) context.Context { + t.Helper() + return itc.ctx +} diff --git a/pkg/sdk/shares_integration_test.go b/pkg/sdk/testint/shares_integration_test.go similarity index 62% rename from pkg/sdk/shares_integration_test.go rename to pkg/sdk/testint/shares_integration_test.go index 6988e10028..5c31d8fa0c 100644 --- a/pkg/sdk/shares_integration_test.go +++ b/pkg/sdk/testint/shares_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_SharesShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) @@ -24,9 +24,9 @@ func TestInt_SharesShow(t *testing.T) { }) t.Run("with show options", func(t *testing.T) { - showOptions := &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + showOptions := &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, } shares, err := client.Shares.Show(ctx, showOptions) @@ -36,9 +36,9 @@ func TestInt_SharesShow(t *testing.T) { }) t.Run("when searching a non-existent share", func(t *testing.T) { - showOptions := &ShowShareOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } shares, err := client.Shares.Show(ctx, showOptions) @@ -47,9 +47,9 @@ func TestInt_SharesShow(t *testing.T) { }) t.Run("when limiting the number of results", func(t *testing.T) { - showOptions := &ShowShareOptions{ - Limit: &LimitFrom{ - Rows: Int(1), + showOptions := &sdk.ShowShareOptions{ + Limit: &sdk.LimitFrom{ + Rows: sdk.Int(1), }, } shares, err := client.Shares.Show(ctx, showOptions) @@ -60,21 +60,21 @@ func TestInt_SharesShow(t *testing.T) { func TestInt_SharesCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("test complete", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - err := client.Shares.Create(ctx, id, &CreateShareOptions{ - OrReplace: Bool(true), - Comment: String("test comment"), + err := client.Shares.Create(ctx, id, &sdk.CreateShareOptions{ + OrReplace: sdk.Bool(true), + Comment: sdk.String("test comment"), }) require.NoError(t, err) - shares, err := client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(id.Name()), + shares, err := client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(id.Name()), }, - Limit: &LimitFrom{ - Rows: Int(1), + Limit: &sdk.LimitFrom{ + Rows: sdk.Int(1), }, }) require.NoError(t, err) @@ -90,9 +90,9 @@ func TestInt_SharesCreate(t *testing.T) { t.Run("test no options", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - err := client.Shares.Create(ctx, id, &CreateShareOptions{ - OrReplace: Bool(true), - Comment: String("test comment"), + err := client.Shares.Create(ctx, id, &sdk.CreateShareOptions{ + OrReplace: sdk.Bool(true), + Comment: sdk.String("test comment"), }) require.NoError(t, err) shares, err := client.Shares.Show(ctx, nil) @@ -108,7 +108,7 @@ func TestInt_SharesCreate(t *testing.T) { func TestInt_SharesDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("when share exists", func(t *testing.T) { shareTest, _ := createShare(t, client) @@ -117,14 +117,14 @@ func TestInt_SharesDrop(t *testing.T) { }) t.Run("when share does not exist", func(t *testing.T) { - err := client.Shares.Drop(ctx, NewAccountObjectIdentifier("does_not_exist")) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + err := client.Shares.Drop(ctx, sdk.NewAccountObjectIdentifier("does_not_exist")) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_SharesAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -132,32 +132,32 @@ func TestInt_SharesAlter(t *testing.T) { t.Run("add and remove accounts", func(t *testing.T) { shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) }) require.NoError(t, err) secondaryClient := testSecondaryClient(t) - accountsToAdd := []AccountIdentifier{ + accountsToAdd := []sdk.AccountIdentifier{ getAccountIdentifier(t, secondaryClient), } // first add the account. - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Add: &ShareAdd{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Add: &sdk.ShareAdd{ Accounts: accountsToAdd, - ShareRestrictions: Bool(false), + ShareRestrictions: sdk.Bool(false), }, }) require.NoError(t, err) - shares, err := client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + shares, err := client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, }) require.NoError(t, err) @@ -166,16 +166,16 @@ func TestInt_SharesAlter(t *testing.T) { assert.Equal(t, accountsToAdd, share.To) // now remove the account that was added. - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Remove: &ShareRemove{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Remove: &sdk.ShareRemove{ Accounts: accountsToAdd, }, }) require.NoError(t, err) - shares, err = client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + shares, err = client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, }) require.NoError(t, err) @@ -187,31 +187,31 @@ func TestInt_SharesAlter(t *testing.T) { t.Run("set accounts", func(t *testing.T) { shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) }) require.NoError(t, err) secondaryClient := testSecondaryClient(t) - accountsToSet := []AccountIdentifier{ + accountsToSet := []sdk.AccountIdentifier{ getAccountIdentifier(t, secondaryClient), } // first add the account. - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Set: &ShareSet{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Set: &sdk.ShareSet{ Accounts: accountsToSet, }, }) require.NoError(t, err) - shares, err := client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + shares, err := client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, }) require.NoError(t, err) @@ -223,28 +223,28 @@ func TestInt_SharesAlter(t *testing.T) { t.Run("set and unset comment", func(t *testing.T) { shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) }) comment := randomComment(t) - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Set: &ShareSet{ - Comment: String(comment), + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Set: &sdk.ShareSet{ + Comment: sdk.String(comment), }, }) require.NoError(t, err) - shares, err := client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + shares, err := client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, }) require.NoError(t, err) @@ -253,16 +253,16 @@ func TestInt_SharesAlter(t *testing.T) { assert.Equal(t, comment, share.Comment) // reset comment - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Unset: &ShareUnset{ - Comment: Bool(true), + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Unset: &sdk.ShareUnset{ + Comment: sdk.Bool(true), }, }) require.NoError(t, err) - shares, err = client.Shares.Show(ctx, &ShowShareOptions{ - Like: &Like{ - Pattern: String(shareTest.Name.Name()), + shares, err = client.Shares.Show(ctx, &sdk.ShowShareOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(shareTest.Name.Name()), }, }) require.NoError(t, err) @@ -274,12 +274,12 @@ func TestInt_SharesAlter(t *testing.T) { t.Run("set and unset tags", func(t *testing.T) { shareTest, shareCleanup := createShare(t, client) t.Cleanup(shareCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) @@ -291,7 +291,7 @@ func TestInt_SharesAlter(t *testing.T) { t.Cleanup(tagCleanup) tagTest2, tagCleanup2 := createTag(t, client, databaseTest, schemaTest) t.Cleanup(tagCleanup2) - tagAssociations := []TagAssociation{ + tagAssociations := []sdk.TagAssociation{ { Name: tagTest.ID(), Value: randomString(t), @@ -301,33 +301,33 @@ func TestInt_SharesAlter(t *testing.T) { Value: randomString(t), }, } - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Set: &ShareSet{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Set: &sdk.ShareSet{ Tag: tagAssociations, }, }) require.NoError(t, err) - tagValue, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), shareTest.ID(), ObjectTypeShare) + tagValue, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), shareTest.ID(), sdk.ObjectTypeShare) require.NoError(t, err) assert.Equal(t, tagAssociations[0].Value, tagValue) - tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), shareTest.ID(), ObjectTypeShare) + tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), shareTest.ID(), sdk.ObjectTypeShare) require.NoError(t, err) assert.Equal(t, tagAssociations[1].Value, tagValue) // unset tags - err = client.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - IfExists: Bool(true), - Unset: &ShareUnset{ - Tag: []ObjectIdentifier{ + err = client.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + IfExists: sdk.Bool(true), + Unset: &sdk.ShareUnset{ + Tag: []sdk.ObjectIdentifier{ tagTest.ID(), }, }, }) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tagTest.ID(), shareTest.ID(), ObjectTypeShare) + _, err = client.SystemFunctions.GetTag(ctx, tagTest.ID(), shareTest.ID(), sdk.ObjectTypeShare) require.Error(t, err) - tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), shareTest.ID(), ObjectTypeShare) + tagValue, err = client.SystemFunctions.GetTag(ctx, tagTest2.ID(), shareTest.ID(), sdk.ObjectTypeShare) require.NoError(t, err) assert.Equal(t, tagAssociations[1].Value, tagValue) }) @@ -335,7 +335,7 @@ func TestInt_SharesAlter(t *testing.T) { func TestInt_ShareDescribeProvider(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("describe share", func(t *testing.T) { shareTest, shareCleanup := createShare(t, client) @@ -344,12 +344,12 @@ func TestInt_ShareDescribeProvider(t *testing.T) { databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) - err := client.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := client.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = client.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = client.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) @@ -360,7 +360,7 @@ func TestInt_ShareDescribeProvider(t *testing.T) { require.NoError(t, err) assert.Equal(t, 1, len(shareDetails.SharedObjects)) sharedObject := shareDetails.SharedObjects[0] - assert.Equal(t, ObjectTypeDatabase, sharedObject.Kind) + assert.Equal(t, sdk.ObjectTypeDatabase, sharedObject.Kind) assert.Equal(t, databaseTest.ID(), sharedObject.Name) }) }) @@ -368,7 +368,7 @@ func TestInt_ShareDescribeProvider(t *testing.T) { func TestInt_ShareDescribeConsumer(t *testing.T) { consumerClient := testSecondaryClient(t) - ctx := context.Background() + ctx := testContext(t) providerClient := testClient(t) t.Run("describe share", func(t *testing.T) { @@ -378,21 +378,21 @@ func TestInt_ShareDescribeConsumer(t *testing.T) { databaseTest, databaseCleanup := createDatabase(t, providerClient) t.Cleanup(databaseCleanup) - err := providerClient.Grants.GrantPrivilegeToShare(ctx, ObjectPrivilegeUsage, &GrantPrivilegeToShareOn{ + err := providerClient.Grants.GrantPrivilegeToShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.GrantPrivilegeToShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) t.Cleanup(func() { - err = providerClient.Grants.RevokePrivilegeFromShare(ctx, ObjectPrivilegeUsage, &RevokePrivilegeFromShareOn{ + err = providerClient.Grants.RevokePrivilegeFromShare(ctx, sdk.ObjectPrivilegeUsage, &sdk.RevokePrivilegeFromShareOn{ Database: databaseTest.ID(), }, shareTest.ID()) require.NoError(t, err) }) // add consumer account to share. - err = providerClient.Shares.Alter(ctx, shareTest.ID(), &AlterShareOptions{ - Add: &ShareAdd{ - Accounts: []AccountIdentifier{ + err = providerClient.Shares.Alter(ctx, shareTest.ID(), &sdk.AlterShareOptions{ + Add: &sdk.ShareAdd{ + Accounts: []sdk.AccountIdentifier{ getAccountIdentifier(t, consumerClient), }, }, @@ -403,8 +403,8 @@ func TestInt_ShareDescribeConsumer(t *testing.T) { require.NoError(t, err) assert.Equal(t, 1, len(shareDetails.SharedObjects)) sharedObject := shareDetails.SharedObjects[0] - assert.Equal(t, ObjectTypeDatabase, sharedObject.Kind) - assert.Equal(t, NewAccountObjectIdentifier(""), sharedObject.Name) + assert.Equal(t, sdk.ObjectTypeDatabase, sharedObject.Kind) + assert.Equal(t, sdk.NewAccountObjectIdentifier(""), sharedObject.Name) }) }) } diff --git a/pkg/sdk/system_functions_integration_test.go b/pkg/sdk/testint/system_functions_integration_test.go similarity index 80% rename from pkg/sdk/system_functions_integration_test.go rename to pkg/sdk/testint/system_functions_integration_test.go index 61c46fb9d2..de1e7b7dd7 100644 --- a/pkg/sdk/system_functions_integration_test.go +++ b/pkg/sdk/testint/system_functions_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_GetTag(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -25,9 +25,9 @@ func TestInt_GetTag(t *testing.T) { t.Cleanup(maskingPolicyCleanup) tagValue := randomString(t) - err := client.MaskingPolicies.Alter(ctx, maskingPolicyTest.ID(), &AlterMaskingPolicyOptions{ - Set: &MaskingPolicySet{ - Tag: []TagAssociation{ + err := client.MaskingPolicies.Alter(ctx, maskingPolicyTest.ID(), &sdk.AlterMaskingPolicyOptions{ + Set: &sdk.MaskingPolicySet{ + Tag: []sdk.TagAssociation{ { Name: tagTest.ID(), Value: tagValue, @@ -36,7 +36,7 @@ func TestInt_GetTag(t *testing.T) { }, }) require.NoError(t, err) - s, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), maskingPolicyTest.ID(), ObjectTypeMaskingPolicy) + s, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), maskingPolicyTest.ID(), sdk.ObjectTypeMaskingPolicy) require.NoError(t, err) assert.Equal(t, tagValue, s) }) @@ -45,7 +45,7 @@ func TestInt_GetTag(t *testing.T) { maskingPolicyTest, maskingPolicyCleanup := createMaskingPolicy(t, client, databaseTest, schemaTest) t.Cleanup(maskingPolicyCleanup) - s, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), maskingPolicyTest.ID(), ObjectTypeMaskingPolicy) + s, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), maskingPolicyTest.ID(), sdk.ObjectTypeMaskingPolicy) require.Error(t, err) assert.Equal(t, "", s) }) diff --git a/pkg/sdk/tasks_gen_integration_test.go b/pkg/sdk/testint/tasks_gen_integration_test.go similarity index 71% rename from pkg/sdk/tasks_gen_integration_test.go rename to pkg/sdk/testint/tasks_gen_integration_test.go index 7626cfe8c1..8e06191460 100644 --- a/pkg/sdk/tasks_gen_integration_test.go +++ b/pkg/sdk/testint/tasks_gen_integration_test.go @@ -1,16 +1,16 @@ -package sdk +package testint import ( - "context" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_Tasks(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -20,11 +20,11 @@ func TestInt_Tasks(t *testing.T) { sql := "SELECT CURRENT_TIMESTAMP" - assertTask := func(t *testing.T, task *Task, id SchemaObjectIdentifier) { + assertTask := func(t *testing.T, task *sdk.Task, id sdk.SchemaObjectIdentifier) { t.Helper() assert.Equal(t, id, task.ID()) assert.NotEmpty(t, task.CreatedOn) - assert.Equal(t, id.name, task.Name) + assert.Equal(t, id.Name(), task.Name) assert.NotEmpty(t, task.Id) assert.Equal(t, database.Name, task.DatabaseName) assert.Equal(t, schema.Name, task.SchemaName) @@ -45,11 +45,11 @@ func TestInt_Tasks(t *testing.T) { assert.Empty(t, task.Budget) } - assertTaskWithOptions := func(t *testing.T, task *Task, id SchemaObjectIdentifier, comment string, warehouse string, schedule string, condition string, allowOverlappingExecution bool, config string, predecessor *SchemaObjectIdentifier) { + assertTaskWithOptions := func(t *testing.T, task *sdk.Task, id sdk.SchemaObjectIdentifier, comment string, warehouse string, schedule string, condition string, allowOverlappingExecution bool, config string, predecessor *sdk.SchemaObjectIdentifier) { t.Helper() assert.Equal(t, id, task.ID()) assert.NotEmpty(t, task.CreatedOn) - assert.Equal(t, id.name, task.Name) + assert.Equal(t, id.Name(), task.Name) assert.NotEmpty(t, task.Id) assert.Equal(t, database.Name, task.DatabaseName) assert.Equal(t, schema.Name, task.SchemaName) @@ -79,11 +79,11 @@ func TestInt_Tasks(t *testing.T) { } } - assertTaskTerse := func(t *testing.T, task *Task, id SchemaObjectIdentifier, schedule string) { + assertTaskTerse := func(t *testing.T, task *sdk.Task, id sdk.SchemaObjectIdentifier, schedule string) { t.Helper() assert.Equal(t, id, task.ID()) assert.NotEmpty(t, task.CreatedOn) - assert.Equal(t, id.name, task.Name) + assert.Equal(t, id.Name(), task.Name) assert.Equal(t, database.Name, task.DatabaseName) assert.Equal(t, schema.Name, task.SchemaName) assert.Equal(t, schedule, task.Schedule) @@ -106,24 +106,24 @@ func TestInt_Tasks(t *testing.T) { assert.Empty(t, task.Budget) } - cleanupTaskProvider := func(id SchemaObjectIdentifier) func() { + cleanupTaskProvider := func(id sdk.SchemaObjectIdentifier) func() { return func() { - err := client.Tasks.Drop(ctx, NewDropTaskRequest(id)) + err := client.Tasks.Drop(ctx, sdk.NewDropTaskRequest(id)) require.NoError(t, err) } } - createTaskBasicRequest := func(t *testing.T) *CreateTaskRequest { + createTaskBasicRequest := func(t *testing.T) *sdk.CreateTaskRequest { t.Helper() name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - return NewCreateTaskRequest(id, sql) + return sdk.NewCreateTaskRequest(id, sql) } - createTaskWithRequest := func(t *testing.T, request *CreateTaskRequest) *Task { + createTaskWithRequest := func(t *testing.T, request *sdk.CreateTaskRequest) *sdk.Task { t.Helper() - id := request.name + id := request.GetName() err := client.Tasks.Create(ctx, request) require.NoError(t, err) @@ -135,7 +135,7 @@ func TestInt_Tasks(t *testing.T) { return task } - createTask := func(t *testing.T) *Task { + createTask := func(t *testing.T) *sdk.Task { t.Helper() return createTaskWithRequest(t, createTaskBasicRequest(t)) } @@ -145,16 +145,16 @@ func TestInt_Tasks(t *testing.T) { task := createTaskWithRequest(t, request) - assertTask(t, task, request.name) + assertTask(t, task, request.GetName()) }) t.Run("create task: with initial warehouse", func(t *testing.T) { request := createTaskBasicRequest(t). - WithWarehouse(NewCreateTaskWarehouseRequest().WithUserTaskManagedInitialWarehouseSize(&WarehouseSizeXSmall)) + WithWarehouse(sdk.NewCreateTaskWarehouseRequest().WithUserTaskManagedInitialWarehouseSize(&sdk.WarehouseSizeXSmall)) task := createTaskWithRequest(t, request) - assertTask(t, task, request.name) + assertTask(t, task, request.GetName()) }) t.Run("create task: almost complete case", func(t *testing.T) { @@ -162,19 +162,19 @@ func TestInt_Tasks(t *testing.T) { t.Cleanup(warehouseCleanup) request := createTaskBasicRequest(t). - WithOrReplace(Bool(true)). - WithWarehouse(NewCreateTaskWarehouseRequest().WithWarehouse(Pointer(warehouse.ID()))). - WithSchedule(String("10 MINUTE")). - WithConfig(String(`$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$`)). - WithAllowOverlappingExecution(Bool(true)). - WithSessionParameters(&SessionParameters{ - JSONIndent: Int(4), + WithOrReplace(sdk.Bool(true)). + WithWarehouse(sdk.NewCreateTaskWarehouseRequest().WithWarehouse(sdk.Pointer(warehouse.ID()))). + WithSchedule(sdk.String("10 MINUTE")). + WithConfig(sdk.String(`$${"output_dir": "/temp/test_directory/", "learning_rate": 0.1}$$`)). + WithAllowOverlappingExecution(sdk.Bool(true)). + WithSessionParameters(&sdk.SessionParameters{ + JSONIndent: sdk.Int(4), }). - WithUserTaskTimeoutMs(Int(500)). - WithSuspendTaskAfterNumFailures(Int(3)). - WithComment(String("some comment")). - WithWhen(String(`SYSTEM$STREAM_HAS_DATA('MYSTREAM')`)) - id := request.name + WithUserTaskTimeoutMs(sdk.Int(500)). + WithSuspendTaskAfterNumFailures(sdk.Int(3)). + WithComment(sdk.String("some comment")). + WithWhen(sdk.String(`SYSTEM$STREAM_HAS_DATA('MYSTREAM')`)) + id := request.GetName() task := createTaskWithRequest(t, request) @@ -183,18 +183,18 @@ func TestInt_Tasks(t *testing.T) { t.Run("create task: with after", func(t *testing.T) { otherName := randomString(t) - otherId := NewSchemaObjectIdentifier(database.Name, schema.Name, otherName) + otherId := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, otherName) - request := NewCreateTaskRequest(otherId, sql).WithSchedule(String("10 MINUTE")) + request := sdk.NewCreateTaskRequest(otherId, sql).WithSchedule(sdk.String("10 MINUTE")) createTaskWithRequest(t, request) request = createTaskBasicRequest(t). - WithAfter([]SchemaObjectIdentifier{otherId}) + WithAfter([]sdk.SchemaObjectIdentifier{otherId}) task := createTaskWithRequest(t, request) - assertTaskWithOptions(t, task, request.name, "", "", "", "", false, "", &otherId) + assertTaskWithOptions(t, task, request.GetName(), "", "", "", "", false, "", &otherId) }) // TODO: this fails with `syntax error line 1 at position 89 unexpected 'GRANTS'`. @@ -222,14 +222,14 @@ func TestInt_Tasks(t *testing.T) { t.Cleanup(tagCleanup) request := createTaskBasicRequest(t). - WithTag([]TagAssociation{{ + WithTag([]sdk.TagAssociation{{ Name: tag.ID(), Value: "v1", }}) task := createTaskWithRequest(t, request) - returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), task.ID(), ObjectTypeTask) + returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), task.ID(), sdk.ObjectTypeTask) require.NoError(t, err) assert.Equal(t, "v1", returnedTagValue) @@ -239,9 +239,9 @@ func TestInt_Tasks(t *testing.T) { sourceTask := createTask(t) name := randomString(t) - id := NewSchemaObjectIdentifier(database.Name, schema.Name, name) + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, name) - request := NewCloneTaskRequest(id, sourceTask.ID()) + request := sdk.NewCloneTaskRequest(id, sourceTask.ID()) err := client.Tasks.Clone(ctx, request) require.NoError(t, err) @@ -250,35 +250,35 @@ func TestInt_Tasks(t *testing.T) { task, err := client.Tasks.ShowByID(ctx, id) require.NoError(t, err) - assertTask(t, task, request.name) + assertTask(t, task, request.GetName()) }) t.Run("drop task: existing", func(t *testing.T) { request := createTaskBasicRequest(t) - id := request.name + id := request.GetName() err := client.Tasks.Create(ctx, request) require.NoError(t, err) - err = client.Tasks.Drop(ctx, NewDropTaskRequest(id)) + err = client.Tasks.Drop(ctx, sdk.NewDropTaskRequest(id)) require.NoError(t, err) _, err = client.Tasks.ShowByID(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("drop task: non-existing", func(t *testing.T) { - id := NewSchemaObjectIdentifier(database.Name, schema.Name, "does_not_exist") + id := sdk.NewSchemaObjectIdentifier(database.Name, schema.Name, "does_not_exist") - err := client.Tasks.Drop(ctx, NewDropTaskRequest(id)) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + err := client.Tasks.Drop(ctx, sdk.NewDropTaskRequest(id)) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("alter task: set value and unset value", func(t *testing.T) { task := createTask(t) id := task.ID() - alterRequest := NewAlterTaskRequest(id).WithSet(NewTaskSetRequest().WithComment(String("new comment"))) + alterRequest := sdk.NewAlterTaskRequest(id).WithSet(sdk.NewTaskSetRequest().WithComment(sdk.String("new comment"))) err := client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -287,7 +287,7 @@ func TestInt_Tasks(t *testing.T) { assert.Equal(t, "new comment", alteredTask.Comment) - alterRequest = NewAlterTaskRequest(id).WithUnset(NewTaskUnsetRequest().WithComment(Bool(true))) + alterRequest = sdk.NewAlterTaskRequest(id).WithUnset(sdk.NewTaskUnsetRequest().WithComment(sdk.Bool(true))) err = client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -305,44 +305,44 @@ func TestInt_Tasks(t *testing.T) { id := task.ID() tagValue := "abc" - tags := []TagAssociation{ + tags := []sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, }, } - alterRequestSetTags := NewAlterTaskRequest(id).WithSetTags(tags) + alterRequestSetTags := sdk.NewAlterTaskRequest(id).WithSetTags(tags) err := client.Tasks.Alter(ctx, alterRequestSetTags) require.NoError(t, err) - returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeTask) + returnedTagValue, err := client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeTask) require.NoError(t, err) assert.Equal(t, tagValue, returnedTagValue) - unsetTags := []ObjectIdentifier{ + unsetTags := []sdk.ObjectIdentifier{ tag.ID(), } - alterRequestUnsetTags := NewAlterTaskRequest(id).WithUnsetTags(unsetTags) + alterRequestUnsetTags := sdk.NewAlterTaskRequest(id).WithUnsetTags(unsetTags) err = client.Tasks.Alter(ctx, alterRequestUnsetTags) require.NoError(t, err) - _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, ObjectTypeTask) + _, err = client.SystemFunctions.GetTag(ctx, tag.ID(), id, sdk.ObjectTypeTask) require.Error(t, err) }) t.Run("alter task: resume and suspend", func(t *testing.T) { request := createTaskBasicRequest(t). - WithSchedule(String("10 MINUTE")) + WithSchedule(sdk.String("10 MINUTE")) task := createTaskWithRequest(t, request) id := task.ID() assert.Equal(t, "suspended", task.State) - alterRequest := NewAlterTaskRequest(id).WithResume(Bool(true)) + alterRequest := sdk.NewAlterTaskRequest(id).WithResume(sdk.Bool(true)) err := client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -351,7 +351,7 @@ func TestInt_Tasks(t *testing.T) { assert.Equal(t, "started", alteredTask.State) - alterRequest = NewAlterTaskRequest(id).WithSuspend(Bool(true)) + alterRequest = sdk.NewAlterTaskRequest(id).WithSuspend(sdk.Bool(true)) err = client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -363,20 +363,20 @@ func TestInt_Tasks(t *testing.T) { t.Run("alter task: remove after and add after", func(t *testing.T) { request := createTaskBasicRequest(t). - WithSchedule(String("10 MINUTE")) + WithSchedule(sdk.String("10 MINUTE")) otherTask := createTaskWithRequest(t, request) otherId := otherTask.ID() request = createTaskBasicRequest(t). - WithAfter([]SchemaObjectIdentifier{otherId}) + WithAfter([]sdk.SchemaObjectIdentifier{otherId}) task := createTaskWithRequest(t, request) id := task.ID() assert.Contains(t, task.Predecessors, otherId.Name()) - alterRequest := NewAlterTaskRequest(id).WithRemoveAfter([]SchemaObjectIdentifier{otherId}) + alterRequest := sdk.NewAlterTaskRequest(id).WithRemoveAfter([]sdk.SchemaObjectIdentifier{otherId}) err := client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -386,7 +386,7 @@ func TestInt_Tasks(t *testing.T) { require.NoError(t, err) assert.Equal(t, "[]", task.Predecessors) - alterRequest = NewAlterTaskRequest(id).WithAddAfter([]SchemaObjectIdentifier{otherId}) + alterRequest = sdk.NewAlterTaskRequest(id).WithAddAfter([]sdk.SchemaObjectIdentifier{otherId}) err = client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -402,7 +402,7 @@ func TestInt_Tasks(t *testing.T) { id := task.ID() newSql := "SELECT CURRENT_DATE" - alterRequest := NewAlterTaskRequest(id).WithModifyAs(String(newSql)) + alterRequest := sdk.NewAlterTaskRequest(id).WithModifyAs(sdk.String(newSql)) err := client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -412,7 +412,7 @@ func TestInt_Tasks(t *testing.T) { assert.Equal(t, newSql, alteredTask.Definition) newWhen := `SYSTEM$STREAM_HAS_DATA('MYSTREAM')` - alterRequest = NewAlterTaskRequest(id).WithModifyWhen(String(newWhen)) + alterRequest = sdk.NewAlterTaskRequest(id).WithModifyWhen(sdk.String(newWhen)) err = client.Tasks.Alter(ctx, alterRequest) require.NoError(t, err) @@ -426,7 +426,7 @@ func TestInt_Tasks(t *testing.T) { task1 := createTask(t) task2 := createTask(t) - showRequest := NewShowTaskRequest() + showRequest := sdk.NewShowTaskRequest() returnedTasks, err := client.Tasks.Show(ctx, showRequest) require.NoError(t, err) @@ -437,11 +437,11 @@ func TestInt_Tasks(t *testing.T) { t.Run("show task: terse", func(t *testing.T) { request := createTaskBasicRequest(t). - WithSchedule(String("10 MINUTE")) + WithSchedule(sdk.String("10 MINUTE")) task := createTaskWithRequest(t, request) - showRequest := NewShowTaskRequest().WithTerse(Bool(true)) + showRequest := sdk.NewShowTaskRequest().WithTerse(sdk.Bool(true)) returnedTasks, err := client.Tasks.Show(ctx, showRequest) require.NoError(t, err) @@ -453,10 +453,10 @@ func TestInt_Tasks(t *testing.T) { task1 := createTask(t) task2 := createTask(t) - showRequest := NewShowTaskRequest(). - WithLike(&Like{&task1.Name}). - WithIn(&In{Schema: NewDatabaseObjectIdentifier(database.Name, schema.Name)}). - WithLimit(&LimitFrom{Rows: Int(5)}) + showRequest := sdk.NewShowTaskRequest(). + WithLike(&sdk.Like{Pattern: &task1.Name}). + WithIn(&sdk.In{Schema: sdk.NewDatabaseObjectIdentifier(database.Name, schema.Name)}). + WithLimit(&sdk.LimitFrom{Rows: sdk.Int(5)}) returnedTasks, err := client.Tasks.Show(ctx, showRequest) require.NoError(t, err) @@ -477,7 +477,7 @@ func TestInt_Tasks(t *testing.T) { t.Run("execute task: default", func(t *testing.T) { task := createTask(t) - executeRequest := NewExecuteTaskRequest(task.ID()) + executeRequest := sdk.NewExecuteTaskRequest(task.ID()) err := client.Tasks.Execute(ctx, executeRequest) require.NoError(t, err) }) diff --git a/pkg/sdk/users_integration_test.go b/pkg/sdk/testint/users_integration_test.go similarity index 63% rename from pkg/sdk/users_integration_test.go rename to pkg/sdk/testint/users_integration_test.go index 90a49c7816..3eb6fb6fe9 100644 --- a/pkg/sdk/users_integration_test.go +++ b/pkg/sdk/testint/users_integration_test.go @@ -1,17 +1,17 @@ -package sdk +package testint import ( - "context" "strings" "testing" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_UsersShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) userTest, userCleanup := createUserWithName(t, client, "USER_FOO") t.Cleanup(userCleanup) @@ -20,9 +20,9 @@ func TestInt_UsersShow(t *testing.T) { t.Cleanup(user2Cleanup) t.Run("with like options", func(t *testing.T) { - showOptions := &ShowUserOptions{ - Like: &Like{ - Pattern: String(userTest.Name), + showOptions := &sdk.ShowUserOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(userTest.Name), }, } users, err := client.Users.Show(ctx, showOptions) @@ -32,8 +32,8 @@ func TestInt_UsersShow(t *testing.T) { }) t.Run("with starts with options", func(t *testing.T) { - showOptions := &ShowUserOptions{ - StartsWith: String("USER"), + showOptions := &sdk.ShowUserOptions{ + StartsWith: sdk.String("USER"), } users, err := client.Users.Show(ctx, showOptions) require.NoError(t, err) @@ -42,10 +42,10 @@ func TestInt_UsersShow(t *testing.T) { assert.Equal(t, 2, len(users)) }) t.Run("with starts with, limit and from options", func(t *testing.T) { - showOptions := &ShowUserOptions{ - Limit: Int(10), - From: String("USER_C"), - StartsWith: String("USER"), + showOptions := &sdk.ShowUserOptions{ + Limit: sdk.Int(10), + From: sdk.String("USER_C"), + StartsWith: sdk.String("USER"), } users, err := client.Users.Show(ctx, showOptions) @@ -55,9 +55,9 @@ func TestInt_UsersShow(t *testing.T) { }) t.Run("when searching a non-existent user", func(t *testing.T) { - showOptions := &ShowUserOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowUserOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } users, err := client.Users.Show(ctx, showOptions) @@ -66,8 +66,8 @@ func TestInt_UsersShow(t *testing.T) { }) t.Run("when limiting the number of results", func(t *testing.T) { - showOptions := &ShowUserOptions{ - Limit: Int(1), + showOptions := &sdk.ShowUserOptions{ + Limit: sdk.Int(1), } users, err := client.Users.Show(ctx, showOptions) require.NoError(t, err) @@ -77,7 +77,7 @@ func TestInt_UsersShow(t *testing.T) { func TestInt_UserCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) @@ -90,7 +90,7 @@ func TestInt_UserCreate(t *testing.T) { t.Run("test complete case", func(t *testing.T) { id := randomAccountObjectIdentifier(t) tagValue := randomString(t) - tags := []TagAssociation{ + tags := []sdk.TagAssociation{ { Name: tag.ID(), Value: tagValue, @@ -99,82 +99,80 @@ func TestInt_UserCreate(t *testing.T) { password := randomString(t) loginName := randomString(t) - opts := &CreateUserOptions{ - OrReplace: Bool(true), - name: id, - ObjectProperties: &UserObjectProperties{ + opts := &sdk.CreateUserOptions{ + OrReplace: sdk.Bool(true), + ObjectProperties: &sdk.UserObjectProperties{ Password: &password, LoginName: &loginName, }, - ObjectParameters: &UserObjectParameters{ - EnableUnredactedQuerySyntaxError: Bool(true), + ObjectParameters: &sdk.UserObjectParameters{ + EnableUnredactedQuerySyntaxError: sdk.Bool(true), }, - SessionParameters: &SessionParameters{ - Autocommit: Bool(true), + SessionParameters: &sdk.SessionParameters{ + Autocommit: sdk.Bool(true), }, - With: Bool(true), + With: sdk.Bool(true), Tags: tags, } err := client.Users.Create(ctx, id, opts) require.NoError(t, err) userDetails, err := client.Users.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, id.name, userDetails.Name.Value) + assert.Equal(t, id.Name(), userDetails.Name.Value) assert.Equal(t, strings.ToUpper(loginName), userDetails.LoginName.Value) - user, err := client.Users.Show(ctx, &ShowUserOptions{ - Like: &Like{ - Pattern: &id.name, + user, err := client.Users.Show(ctx, &sdk.ShowUserOptions{ + Like: &sdk.Like{ + Pattern: sdk.Pointer(id.Name()), }, }) require.NoError(t, err) assert.Equal(t, 1, len(user)) - assert.Equal(t, id.name, user[0].Name) + assert.Equal(t, id.Name(), user[0].Name) }) t.Run("test if not exists", func(t *testing.T) { id := randomAccountObjectIdentifier(t) tagValue := randomString(t) - tags := []TagAssociation{ + tags := []sdk.TagAssociation{ { - Name: NewAccountObjectIdentifier(tag.Name), + Name: sdk.NewAccountObjectIdentifier(tag.Name), Value: tagValue, }, } password := randomString(t) loginName := randomString(t) - opts := &CreateUserOptions{ - IfNotExists: Bool(true), - name: id, - ObjectProperties: &UserObjectProperties{ + opts := &sdk.CreateUserOptions{ + IfNotExists: sdk.Bool(true), + ObjectProperties: &sdk.UserObjectProperties{ Password: &password, LoginName: &loginName, }, - ObjectParameters: &UserObjectParameters{ - EnableUnredactedQuerySyntaxError: Bool(true), + ObjectParameters: &sdk.UserObjectParameters{ + EnableUnredactedQuerySyntaxError: sdk.Bool(true), }, - SessionParameters: &SessionParameters{ - Autocommit: Bool(true), + SessionParameters: &sdk.SessionParameters{ + Autocommit: sdk.Bool(true), }, - With: Bool(true), + With: sdk.Bool(true), Tags: tags, } err := client.Users.Create(ctx, id, opts) require.NoError(t, err) userDetails, err := client.Users.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, id.name, userDetails.Name.Value) + assert.Equal(t, id.Name(), userDetails.Name.Value) assert.Equal(t, strings.ToUpper(loginName), userDetails.LoginName.Value) - user, err := client.Users.Show(ctx, &ShowUserOptions{ - Like: &Like{ - Pattern: &id.name, + user, err := client.Users.Show(ctx, &sdk.ShowUserOptions{ + Like: &sdk.Like{ + Pattern: sdk.Pointer(id.Name()), }, }) require.NoError(t, err) assert.Equal(t, 1, len(user)) - assert.Equal(t, id.name, user[0].Name) + assert.Equal(t, id.Name(), user[0].Name) }) t.Run("test no options", func(t *testing.T) { @@ -184,24 +182,24 @@ func TestInt_UserCreate(t *testing.T) { require.NoError(t, err) userDetails, err := client.Users.Describe(ctx, id) require.NoError(t, err) - assert.Equal(t, id.name, userDetails.Name.Value) - assert.Equal(t, strings.ToUpper(id.name), userDetails.LoginName.Value) + assert.Equal(t, id.Name(), userDetails.Name.Value) + assert.Equal(t, strings.ToUpper(id.Name()), userDetails.LoginName.Value) assert.Empty(t, userDetails.Password.Value) - user, err := client.Users.Show(ctx, &ShowUserOptions{ - Like: &Like{ - Pattern: &id.name, + user, err := client.Users.Show(ctx, &sdk.ShowUserOptions{ + Like: &sdk.Like{ + Pattern: sdk.Pointer(id.Name()), }, }) require.NoError(t, err) assert.Equal(t, 1, len(user)) - assert.Equal(t, id.name, user[0].Name) + assert.Equal(t, id.Name(), user[0].Name) }) } func TestInt_UserDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) user, userCleanup := createUser(t, client) t.Cleanup(userCleanup) @@ -213,15 +211,15 @@ func TestInt_UserDescribe(t *testing.T) { }) t.Run("when user does not exist", func(t *testing.T) { - id := NewAccountObjectIdentifier("does_not_exist") + id := sdk.NewAccountObjectIdentifier("does_not_exist") _, err := client.Users.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_UserDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("when user exists", func(t *testing.T) { user, _ := createUser(t, client) @@ -229,12 +227,12 @@ func TestInt_UserDrop(t *testing.T) { err := client.Users.Drop(ctx, id) require.NoError(t, err) _, err = client.Users.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when user does not exist", func(t *testing.T) { - id := NewAccountObjectIdentifier("does_not_exist") + id := sdk.NewAccountObjectIdentifier("does_not_exist") err := client.Users.Drop(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/warehouses_integration_test.go b/pkg/sdk/testint/warehouses_integration_test.go similarity index 61% rename from pkg/sdk/warehouses_integration_test.go rename to pkg/sdk/testint/warehouses_integration_test.go index 1e9d8f8baa..5fb78b0104 100644 --- a/pkg/sdk/warehouses_integration_test.go +++ b/pkg/sdk/testint/warehouses_integration_test.go @@ -1,20 +1,20 @@ -package sdk +package testint import ( - "context" "testing" "time" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestInt_WarehousesShow(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) - testWarehouse, warehouseCleanup := createWarehouseWithOptions(t, client, &CreateWarehouseOptions{ - WarehouseSize: &WarehouseSizeSmall, + testWarehouse, warehouseCleanup := createWarehouseWithOptions(t, client, &sdk.CreateWarehouseOptions{ + WarehouseSize: &sdk.WarehouseSizeSmall, }) t.Cleanup(warehouseCleanup) _, warehouse2Cleanup := createWarehouse(t, client) @@ -27,8 +27,8 @@ func TestInt_WarehousesShow(t *testing.T) { }) t.Run("show with options", func(t *testing.T) { - showOptions := &ShowWarehouseOptions{ - Like: &Like{ + showOptions := &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ Pattern: &testWarehouse.Name, }, } @@ -36,13 +36,13 @@ func TestInt_WarehousesShow(t *testing.T) { require.NoError(t, err) assert.Equal(t, 1, len(warehouses)) assert.Equal(t, testWarehouse.Name, warehouses[0].Name) - assert.Equal(t, WarehouseSizeSmall, warehouses[0].Size) + assert.Equal(t, sdk.WarehouseSizeSmall, warehouses[0].Size) }) t.Run("when searching a non-existent password policy", func(t *testing.T) { - showOptions := &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String("non-existent"), + showOptions := &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String("non-existent"), }, } warehouses, err := client.Warehouses.Show(ctx, showOptions) @@ -53,7 +53,7 @@ func TestInt_WarehousesShow(t *testing.T) { func TestInt_WarehouseCreate(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) databaseTest, databaseCleanup := createDatabase(t, client) t.Cleanup(databaseCleanup) schemaTest, schemaCleanup := createSchema(t, client, databaseTest) @@ -65,23 +65,23 @@ func TestInt_WarehouseCreate(t *testing.T) { t.Run("test complete", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - err := client.Warehouses.Create(ctx, id, &CreateWarehouseOptions{ - OrReplace: Bool(true), - WarehouseType: &WarehouseTypeStandard, - WarehouseSize: &WarehouseSizeSmall, - MaxClusterCount: Int(8), - MinClusterCount: Int(2), - ScalingPolicy: &ScalingPolicyEconomy, - AutoSuspend: Int(1000), - AutoResume: Bool(true), - InitiallySuspended: Bool(false), - Comment: String("comment"), - EnableQueryAcceleration: Bool(true), - QueryAccelerationMaxScaleFactor: Int(90), - MaxConcurrencyLevel: Int(10), - StatementQueuedTimeoutInSeconds: Int(2000), - StatementTimeoutInSeconds: Int(3000), - Tag: []TagAssociation{ + err := client.Warehouses.Create(ctx, id, &sdk.CreateWarehouseOptions{ + OrReplace: sdk.Bool(true), + WarehouseType: &sdk.WarehouseTypeStandard, + WarehouseSize: &sdk.WarehouseSizeSmall, + MaxClusterCount: sdk.Int(8), + MinClusterCount: sdk.Int(2), + ScalingPolicy: &sdk.ScalingPolicyEconomy, + AutoSuspend: sdk.Int(1000), + AutoResume: sdk.Bool(true), + InitiallySuspended: sdk.Bool(false), + Comment: sdk.String("comment"), + EnableQueryAcceleration: sdk.Bool(true), + QueryAccelerationMaxScaleFactor: sdk.Int(90), + MaxConcurrencyLevel: sdk.Int(10), + StatementQueuedTimeoutInSeconds: sdk.Int(2000), + StatementTimeoutInSeconds: sdk.Int(3000), + Tag: []sdk.TagAssociation{ { Name: tagTest.ID(), Value: "v1", @@ -94,36 +94,36 @@ func TestInt_WarehouseCreate(t *testing.T) { }) require.NoError(t, err) t.Cleanup(func() { - err = client.Warehouses.Drop(ctx, id, &DropWarehouseOptions{ - IfExists: Bool(true), + err = client.Warehouses.Drop(ctx, id, &sdk.DropWarehouseOptions{ + IfExists: sdk.Bool(true), }) require.NoError(t, err) }) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(id.Name()), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(id.Name()), }, }) require.NoError(t, err) require.Equal(t, 1, len(warehouses)) warehouse := warehouses[0] assert.Equal(t, id.Name(), warehouse.Name) - assert.Equal(t, WarehouseTypeStandard, warehouse.Type) - assert.Equal(t, WarehouseSizeSmall, warehouse.Size) + assert.Equal(t, sdk.WarehouseTypeStandard, warehouse.Type) + assert.Equal(t, sdk.WarehouseSizeSmall, warehouse.Size) assert.Equal(t, 8, warehouse.MaxClusterCount) assert.Equal(t, 2, warehouse.MinClusterCount) - assert.Equal(t, ScalingPolicyEconomy, warehouse.ScalingPolicy) + assert.Equal(t, sdk.ScalingPolicyEconomy, warehouse.ScalingPolicy) assert.Equal(t, 1000, warehouse.AutoSuspend) assert.Equal(t, true, warehouse.AutoResume) - assert.Contains(t, []WarehouseState{WarehouseStateResuming, WarehouseStateStarted}, warehouse.State) + assert.Contains(t, []sdk.WarehouseState{sdk.WarehouseStateResuming, sdk.WarehouseStateStarted}, warehouse.State) assert.Equal(t, "comment", warehouse.Comment) assert.Equal(t, true, warehouse.EnableQueryAcceleration) assert.Equal(t, 90, warehouse.QueryAccelerationMaxScaleFactor) - tag1Value, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), warehouse.ID(), ObjectTypeWarehouse) + tag1Value, err := client.SystemFunctions.GetTag(ctx, tagTest.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) assert.Equal(t, "v1", tag1Value) - tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2Test.ID(), warehouse.ID(), ObjectTypeWarehouse) + tag2Value, err := client.SystemFunctions.GetTag(ctx, tag2Test.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) assert.Equal(t, "v2", tag2Value) }) @@ -133,28 +133,28 @@ func TestInt_WarehouseCreate(t *testing.T) { err := client.Warehouses.Create(ctx, id, nil) require.NoError(t, err) t.Cleanup(func() { - err = client.Warehouses.Drop(ctx, id, &DropWarehouseOptions{ - IfExists: Bool(true), + err = client.Warehouses.Drop(ctx, id, &sdk.DropWarehouseOptions{ + IfExists: sdk.Bool(true), }) require.NoError(t, err) }) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(id.Name()), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(id.Name()), }, }) require.NoError(t, err) require.Equal(t, 1, len(warehouses)) result := warehouses[0] assert.Equal(t, id.Name(), result.Name) - assert.Equal(t, WarehouseTypeStandard, result.Type) - assert.Equal(t, WarehouseSizeXSmall, result.Size) + assert.Equal(t, sdk.WarehouseTypeStandard, result.Type) + assert.Equal(t, sdk.WarehouseSizeXSmall, result.Size) assert.Equal(t, 1, result.MaxClusterCount) assert.Equal(t, 1, result.MinClusterCount) - assert.Equal(t, ScalingPolicyStandard, result.ScalingPolicy) + assert.Equal(t, sdk.ScalingPolicyStandard, result.ScalingPolicy) assert.Equal(t, 600, result.AutoSuspend) assert.Equal(t, true, result.AutoResume) - assert.Contains(t, []WarehouseState{WarehouseStateResuming, WarehouseStateStarted}, result.State) + assert.Contains(t, []sdk.WarehouseState{sdk.WarehouseStateResuming, sdk.WarehouseStateStarted}, result.State) assert.Equal(t, "", result.Comment) assert.Equal(t, false, result.EnableQueryAcceleration) assert.Equal(t, 8, result.QueryAccelerationMaxScaleFactor) @@ -163,7 +163,7 @@ func TestInt_WarehouseCreate(t *testing.T) { func TestInt_WarehouseDescribe(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) @@ -177,15 +177,15 @@ func TestInt_WarehouseDescribe(t *testing.T) { }) t.Run("when warehouse does not exist", func(t *testing.T) { - id := NewAccountObjectIdentifier("does_not_exist") + id := sdk.NewAccountObjectIdentifier("does_not_exist") _, err := client.Warehouses.Describe(ctx, id) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } func TestInt_WarehouseAlter(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) database, dbCleanup := createDatabase(t, client) t.Cleanup(dbCleanup) @@ -198,21 +198,21 @@ func TestInt_WarehouseAlter(t *testing.T) { t.Run("terraform acc test", func(t *testing.T) { id := randomAccountObjectIdentifier(t) - opts := &CreateWarehouseOptions{ - Comment: String("test comment"), - WarehouseSize: &WarehouseSizeXSmall, - AutoSuspend: Int(60), - MaxClusterCount: Int(1), - MinClusterCount: Int(1), - ScalingPolicy: &ScalingPolicyStandard, - AutoResume: Bool(true), - InitiallySuspended: Bool(true), + opts := &sdk.CreateWarehouseOptions{ + Comment: sdk.String("test comment"), + WarehouseSize: &sdk.WarehouseSizeXSmall, + AutoSuspend: sdk.Int(60), + MaxClusterCount: sdk.Int(1), + MinClusterCount: sdk.Int(1), + ScalingPolicy: &sdk.ScalingPolicyStandard, + AutoResume: sdk.Bool(true), + InitiallySuspended: sdk.Bool(true), } err := client.Warehouses.Create(ctx, id, opts) require.NoError(t, err) t.Cleanup(func() { - err = client.Warehouses.Drop(ctx, id, &DropWarehouseOptions{ - IfExists: Bool(true), + err = client.Warehouses.Drop(ctx, id, &sdk.DropWarehouseOptions{ + IfExists: sdk.Bool(true), }) require.NoError(t, err) }) @@ -220,16 +220,16 @@ func TestInt_WarehouseAlter(t *testing.T) { require.NoError(t, err) assert.Equal(t, 1, warehouse.MaxClusterCount) assert.Equal(t, 1, warehouse.MinClusterCount) - assert.Equal(t, ScalingPolicyStandard, warehouse.ScalingPolicy) + assert.Equal(t, sdk.ScalingPolicyStandard, warehouse.ScalingPolicy) assert.Equal(t, 60, warehouse.AutoSuspend) assert.Equal(t, true, warehouse.AutoResume) assert.Equal(t, "test comment", warehouse.Comment) - assert.Equal(t, WarehouseStateSuspended, warehouse.State) - assert.Equal(t, WarehouseSizeXSmall, warehouse.Size) + assert.Equal(t, sdk.WarehouseStateSuspended, warehouse.State) + assert.Equal(t, sdk.WarehouseSizeXSmall, warehouse.Size) // rename newID := randomAccountObjectIdentifier(t) - alterOptions := &AlterWarehouseOptions{ + alterOptions := &sdk.AlterWarehouseOptions{ NewName: newID, } err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) @@ -239,10 +239,10 @@ func TestInt_WarehouseAlter(t *testing.T) { assert.Equal(t, newID.Name(), warehouse.Name) // change props - alterOptions = &AlterWarehouseOptions{ - Set: &WarehouseSet{ - WarehouseSize: &WarehouseSizeSmall, - Comment: String("test comment2"), + alterOptions = &sdk.AlterWarehouseOptions{ + Set: &sdk.WarehouseSet{ + WarehouseSize: &sdk.WarehouseSizeSmall, + Comment: sdk.String("test comment2"), }, } err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) @@ -250,31 +250,31 @@ func TestInt_WarehouseAlter(t *testing.T) { warehouse, err = client.Warehouses.ShowByID(ctx, newID) require.NoError(t, err) assert.Equal(t, "test comment2", warehouse.Comment) - assert.Equal(t, WarehouseSizeSmall, warehouse.Size) + assert.Equal(t, sdk.WarehouseSizeSmall, warehouse.Size) }) t.Run("set", func(t *testing.T) { warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) - alterOptions := &AlterWarehouseOptions{ - Set: &WarehouseSet{ - WarehouseSize: &WarehouseSizeMedium, - AutoSuspend: Int(1234), - EnableQueryAcceleration: Bool(true), + alterOptions := &sdk.AlterWarehouseOptions{ + Set: &sdk.WarehouseSet{ + WarehouseSize: &sdk.WarehouseSizeMedium, + AutoSuspend: sdk.Int(1234), + EnableQueryAcceleration: sdk.Bool(true), }, } err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) assert.Equal(t, 1, len(warehouses)) result := warehouses[0] require.NoError(t, err) - assert.Equal(t, WarehouseSizeMedium, result.Size) + assert.Equal(t, sdk.WarehouseSizeMedium, result.Size) assert.Equal(t, true, result.EnableQueryAcceleration) assert.Equal(t, 1234, result.AutoSuspend) }) @@ -285,7 +285,7 @@ func TestInt_WarehouseAlter(t *testing.T) { t.Cleanup(warehouseCleanup) newID := randomAccountObjectIdentifier(t) - alterOptions := &AlterWarehouseOptions{ + alterOptions := &sdk.AlterWarehouseOptions{ NewName: newID, } err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) @@ -295,7 +295,7 @@ func TestInt_WarehouseAlter(t *testing.T) { assert.Equal(t, newID.Name(), result.Name) // rename back to original name so it can be cleaned up - alterOptions = &AlterWarehouseOptions{ + alterOptions = &sdk.AlterWarehouseOptions{ NewName: oldID, } err = client.Warehouses.Alter(ctx, newID, alterOptions) @@ -303,25 +303,25 @@ func TestInt_WarehouseAlter(t *testing.T) { }) t.Run("unset", func(t *testing.T) { - createOptions := &CreateWarehouseOptions{ - Comment: String("test comment"), - MaxClusterCount: Int(10), + createOptions := &sdk.CreateWarehouseOptions{ + Comment: sdk.String("test comment"), + MaxClusterCount: sdk.Int(10), } warehouse, warehouseCleanup := createWarehouseWithOptions(t, client, createOptions) t.Cleanup(warehouseCleanup) id := warehouse.ID() - alterOptions := &AlterWarehouseOptions{ - Unset: &WarehouseUnset{ - Comment: Bool(true), - MaxClusterCount: Bool(true), + alterOptions := &sdk.AlterWarehouseOptions{ + Unset: &sdk.WarehouseUnset{ + Comment: sdk.Bool(true), + MaxClusterCount: sdk.Bool(true), }, } err := client.Warehouses.Alter(ctx, id, alterOptions) require.NoError(t, err) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) @@ -336,56 +336,56 @@ func TestInt_WarehouseAlter(t *testing.T) { warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) - alterOptions := &AlterWarehouseOptions{ - Suspend: Bool(true), + alterOptions := &sdk.AlterWarehouseOptions{ + Suspend: sdk.Bool(true), } err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) assert.Equal(t, 1, len(warehouses)) result := warehouses[0] - assert.Contains(t, []WarehouseState{WarehouseStateSuspended, WarehouseStateSuspending}, result.State) + assert.Contains(t, []sdk.WarehouseState{sdk.WarehouseStateSuspended, sdk.WarehouseStateSuspending}, result.State) - alterOptions = &AlterWarehouseOptions{ - Resume: Bool(true), + alterOptions = &sdk.AlterWarehouseOptions{ + Resume: sdk.Bool(true), } err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - warehouses, err = client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err = client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) assert.Equal(t, 1, len(warehouses)) result = warehouses[0] - assert.Contains(t, []WarehouseState{WarehouseStateStarted, WarehouseStateResuming}, result.State) + assert.Contains(t, []sdk.WarehouseState{sdk.WarehouseStateStarted, sdk.WarehouseStateResuming}, result.State) }) t.Run("resume without suspending", func(t *testing.T) { warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) - alterOptions := &AlterWarehouseOptions{ - Resume: Bool(true), - IfSuspended: Bool(true), + alterOptions := &sdk.AlterWarehouseOptions{ + Resume: sdk.Bool(true), + IfSuspended: sdk.Bool(true), } err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) assert.Equal(t, 1, len(warehouses)) result := warehouses[0] - assert.Contains(t, []WarehouseState{WarehouseStateStarted, WarehouseStateResuming}, result.State) + assert.Contains(t, []sdk.WarehouseState{sdk.WarehouseStateStarted, sdk.WarehouseStateResuming}, result.State) }) t.Run("abort all queries", func(t *testing.T) { @@ -396,13 +396,13 @@ func TestInt_WarehouseAlter(t *testing.T) { t.Cleanup(resetWarehouse) // Start a long query - go client.exec(ctx, "CALL SYSTEM$WAIT(30);") //nolint:errcheck // we don't care if this eventually errors, as long as it runs for a little while + go client.ExecForTests(ctx, "CALL SYSTEM$WAIT(30);") //nolint:errcheck // we don't care if this eventually errors, as long as it runs for a little while time.Sleep(5 * time.Second) // Check that query is running - warehouses, err := client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err := client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) @@ -412,8 +412,8 @@ func TestInt_WarehouseAlter(t *testing.T) { assert.Equal(t, 0, result.Queued) // Abort all queries - alterOptions := &AlterWarehouseOptions{ - AbortAllQueries: Bool(true), + alterOptions := &sdk.AlterWarehouseOptions{ + AbortAllQueries: sdk.Bool(true), } err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) @@ -422,9 +422,9 @@ func TestInt_WarehouseAlter(t *testing.T) { time.Sleep(5 * time.Second) // Check no query is running - warehouses, err = client.Warehouses.Show(ctx, &ShowWarehouseOptions{ - Like: &Like{ - Pattern: String(warehouse.Name), + warehouses, err = client.Warehouses.Show(ctx, &sdk.ShowWarehouseOptions{ + Like: &sdk.Like{ + Pattern: sdk.String(warehouse.Name), }, }) require.NoError(t, err) @@ -438,9 +438,9 @@ func TestInt_WarehouseAlter(t *testing.T) { warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) - alterOptions := &AlterWarehouseOptions{ - Set: &WarehouseSet{ - Tag: []TagAssociation{ + alterOptions := &sdk.AlterWarehouseOptions{ + Set: &sdk.WarehouseSet{ + Tag: []sdk.TagAssociation{ { Name: tag.ID(), Value: "val", @@ -455,10 +455,10 @@ func TestInt_WarehouseAlter(t *testing.T) { err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - val, err := client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), ObjectTypeWarehouse) + val, err := client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) require.Equal(t, "val", val) - val, err = client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), ObjectTypeWarehouse) + val, err = client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) require.Equal(t, "val2", val) }) @@ -467,9 +467,9 @@ func TestInt_WarehouseAlter(t *testing.T) { warehouse, warehouseCleanup := createWarehouse(t, client) t.Cleanup(warehouseCleanup) - alterOptions := &AlterWarehouseOptions{ - Set: &WarehouseSet{ - Tag: []TagAssociation{ + alterOptions := &sdk.AlterWarehouseOptions{ + Set: &sdk.WarehouseSet{ + Tag: []sdk.TagAssociation{ { Name: tag.ID(), Value: "val1", @@ -483,16 +483,16 @@ func TestInt_WarehouseAlter(t *testing.T) { } err := client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - val, err := client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), ObjectTypeWarehouse) + val, err := client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) require.Equal(t, "val1", val) - val2, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), ObjectTypeWarehouse) + val2, err := client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.NoError(t, err) require.Equal(t, "val2", val2) - alterOptions = &AlterWarehouseOptions{ - Unset: &WarehouseUnset{ - Tag: []ObjectIdentifier{ + alterOptions = &sdk.AlterWarehouseOptions{ + Unset: &sdk.WarehouseUnset{ + Tag: []sdk.ObjectIdentifier{ tag.ID(), tag2.ID(), }, @@ -501,10 +501,10 @@ func TestInt_WarehouseAlter(t *testing.T) { err = client.Warehouses.Alter(ctx, warehouse.ID(), alterOptions) require.NoError(t, err) - val, err = client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), ObjectTypeWarehouse) + val, err = client.SystemFunctions.GetTag(ctx, tag.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.Error(t, err) require.Equal(t, "", val) - val2, err = client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), ObjectTypeWarehouse) + val2, err = client.SystemFunctions.GetTag(ctx, tag2.ID(), warehouse.ID(), sdk.ObjectTypeWarehouse) require.Error(t, err) require.Equal(t, "", val2) }) @@ -512,7 +512,7 @@ func TestInt_WarehouseAlter(t *testing.T) { func TestInt_WarehouseDrop(t *testing.T) { client := testClient(t) - ctx := context.Background() + ctx := testContext(t) t.Run("when warehouse exists", func(t *testing.T) { warehouse, _ := createWarehouse(t, client) @@ -520,22 +520,22 @@ func TestInt_WarehouseDrop(t *testing.T) { err := client.Warehouses.Drop(ctx, warehouse.ID(), nil) require.NoError(t, err) _, err = client.Warehouses.Describe(ctx, warehouse.ID()) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when warehouse does not exist", func(t *testing.T) { - id := NewAccountObjectIdentifier("does_not_exist") + id := sdk.NewAccountObjectIdentifier("does_not_exist") err := client.Warehouses.Drop(ctx, id, nil) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) t.Run("when warehouse exists and if exists is true", func(t *testing.T) { warehouse, _ := createWarehouse(t, client) - dropOptions := &DropWarehouseOptions{IfExists: Bool(true)} + dropOptions := &sdk.DropWarehouseOptions{IfExists: sdk.Bool(true)} err := client.Warehouses.Drop(ctx, warehouse.ID(), dropOptions) require.NoError(t, err) _, err = client.Warehouses.Describe(ctx, warehouse.ID()) - assert.ErrorIs(t, err, errObjectNotExistOrAuthorized) + assert.ErrorIs(t, err, sdk.ErrObjectNotExistOrAuthorized) }) } diff --git a/pkg/sdk/type_helpers.go b/pkg/sdk/type_helpers.go index aa53bcf6be..e1c7034b9c 100644 --- a/pkg/sdk/type_helpers.go +++ b/pkg/sdk/type_helpers.go @@ -14,8 +14,8 @@ func Bool(b bool) *bool { return &b } -// toBool converts a string to a bool. -func toBool(s string) bool { +// ToBool converts a string to a bool. +func ToBool(s string) bool { b, err := strconv.ParseBool(s) if err != nil { panic(err) @@ -28,8 +28,8 @@ func Int(i int) *int { return &i } -// toInt converts a string to an int. -func toInt(s string) int { +// ToInt converts a string to an int. +func ToInt(s string) int { i, err := strconv.Atoi(s) if err != nil { panic(err) @@ -37,13 +37,13 @@ func toInt(s string) int { return i } -// Int64 returns a pointer to the given int64. +// Float64 returns a pointer to the given float64. func Float64(f float64) *float64 { return &f } -// toFloat64 converts a string to a float64. -func toFloat64(s string) float64 { +// ToFloat64 converts a string to a float64. +func ToFloat64(s string) float64 { f, err := strconv.ParseFloat(s, 64) if err != nil { panic(err)