From ec8c81f6739f8dbd764befb1ccd03f192900f8c6 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:03:41 +0100 Subject: [PATCH 01/26] part 2 starts here From 1a6885d13bde25df4d25096d8ef365210f1a0776 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:09:28 +0100 Subject: [PATCH 02/26] Fix dynamic tables datasource acceptance test setup --- .../dynamic_tables_acceptance_test.go | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pkg/datasources/dynamic_tables_acceptance_test.go b/pkg/datasources/dynamic_tables_acceptance_test.go index 828bed57675..bc99919a629 100644 --- a/pkg/datasources/dynamic_tables_acceptance_test.go +++ b/pkg/datasources/dynamic_tables_acceptance_test.go @@ -7,28 +7,32 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_DynamicTables_complete(t *testing.T) { - name := acc.TestClient().Ids.Alpha() - dataSourceName := "data.snowflake_dynamic_tables.dts" - tableName := name + "_table" + _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + dynamicTableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() m := func() map[string]config.Variable { return map[string]config.Variable{ - "name": config.StringVariable(name), + "name": config.StringVariable(dynamicTableId.Name()), "database": config.StringVariable(acc.TestDatabaseName), "schema": config.StringVariable(acc.TestSchemaName), "warehouse": config.StringVariable(acc.TestWarehouseName), - "query": config.StringVariable(fmt.Sprintf("select \"id\" from \"%v\".\"%v\".\"%v\"", acc.TestDatabaseName, acc.TestSchemaName, tableName)), + "query": config.StringVariable(fmt.Sprintf("select \"id\" from %v", tableId.FullyQualifiedName())), "comment": config.StringVariable("Terraform acceptance test"), - "table_name": config.StringVariable(tableName), + "table_name": config.StringVariable(tableId.Name()), } } variableSet1 := m() + dataSourceName := "data.snowflake_dynamic_tables.dts" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -42,10 +46,10 @@ func TestAcc_DynamicTables_complete(t *testing.T) { ConfigVariables: variableSet1, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "like.#", "1"), - resource.TestCheckResourceAttr(dataSourceName, "like.0.pattern", name), + resource.TestCheckResourceAttr(dataSourceName, "like.0.pattern", dynamicTableId.Name()), resource.TestCheckResourceAttr(dataSourceName, "in.#", "1"), - resource.TestCheckResourceAttr(dataSourceName, "in.0.database", acc.TestDatabaseName), - resource.TestCheckResourceAttr(dataSourceName, "starts_with", name), + resource.TestCheckResourceAttr(dataSourceName, "in.0.database", dynamicTableId.DatabaseName()), + resource.TestCheckResourceAttr(dataSourceName, "starts_with", dynamicTableId.Name()), resource.TestCheckResourceAttr(dataSourceName, "limit.#", "1"), resource.TestCheckResourceAttr(dataSourceName, "limit.0.rows", "1"), From e880f6cfe603a3d18420216be70d1fb28c5c2748 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:18:58 +0100 Subject: [PATCH 03/26] Fix external functions datasource acceptance test setup --- pkg/datasources/databases_acceptance_test.go | 4 +- .../dynamic_tables_acceptance_test.go | 2 +- .../external_functions_acceptance_test.go | 37 ++++++++++++------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pkg/datasources/databases_acceptance_test.go b/pkg/datasources/databases_acceptance_test.go index 6f294030ffd..223ebe82265 100644 --- a/pkg/datasources/databases_acceptance_test.go +++ b/pkg/datasources/databases_acceptance_test.go @@ -17,7 +17,7 @@ import ( ) func TestAcc_Databases_Complete(t *testing.T) { - _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) databaseId := acc.TestClient().Ids.RandomAccountObjectIdentifier() @@ -117,7 +117,7 @@ func TestAcc_Databases_Complete(t *testing.T) { } func TestAcc_Databases_DifferentFiltering(t *testing.T) { - _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) prefix := random.AlphaN(4) diff --git a/pkg/datasources/dynamic_tables_acceptance_test.go b/pkg/datasources/dynamic_tables_acceptance_test.go index bc99919a629..3c5eb68b0f2 100644 --- a/pkg/datasources/dynamic_tables_acceptance_test.go +++ b/pkg/datasources/dynamic_tables_acceptance_test.go @@ -14,7 +14,7 @@ import ( ) func TestAcc_DynamicTables_complete(t *testing.T) { - _ = testenvs.GetOrSkipTest(t, testenvs.ConfigureClientOnce) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() diff --git a/pkg/datasources/external_functions_acceptance_test.go b/pkg/datasources/external_functions_acceptance_test.go index 016b26eac70..9e9cbf9ce12 100644 --- a/pkg/datasources/external_functions_acceptance_test.go +++ b/pkg/datasources/external_functions_acceptance_test.go @@ -5,27 +5,33 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_ExternalFunctions_basic(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + comment := random.Comment() + m := func() map[string]config.Variable { return map[string]config.Variable{ "database": config.StringVariable(acc.TestDatabaseName), "schema": config.StringVariable(acc.TestSchemaName), - "name": config.StringVariable(accName), + "name": config.StringVariable(id.Name()), "api_allowed_prefixes": config.ListVariable(config.StringVariable("https://123456.execute-api.us-west-2.amazonaws.com/prod/")), "url_of_proxy_and_resource": config.StringVariable("https://123456.execute-api.us-west-2.amazonaws.com/prod/test_func"), - "comment": config.StringVariable("Terraform acceptance test"), + "comment": config.StringVariable(comment), } } - - dataSourceName := "data.snowflake_external_functions.external_functions" configVariables := m() + dataSourceName := "data.snowflake_external_functions.external_functions" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -40,11 +46,11 @@ func TestAcc_ExternalFunctions_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "database", acc.TestDatabaseName), resource.TestCheckResourceAttr(dataSourceName, "schema", acc.TestSchemaName), - resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.#"), - resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.0.name"), - resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.0.database"), - resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.0.schema"), - resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.0.comment"), + resource.TestCheckResourceAttr(dataSourceName, "external_functions.#", "1"), + resource.TestCheckResourceAttr(dataSourceName, "external_functions.0.name", id.Name()), + resource.TestCheckResourceAttr(dataSourceName, "external_functions.0.database", id.DatabaseName()), + resource.TestCheckResourceAttr(dataSourceName, "external_functions.0.schema", id.SchemaName()), + resource.TestCheckResourceAttr(dataSourceName, "external_functions.0.comment", comment), resource.TestCheckResourceAttrSet(dataSourceName, "external_functions.0.language"), ), }, @@ -53,15 +59,20 @@ func TestAcc_ExternalFunctions_basic(t *testing.T) { } func TestAcc_ExternalFunctions_no_database(t *testing.T) { - accName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + comment := random.Comment() + m := func() map[string]config.Variable { return map[string]config.Variable{ "database": config.StringVariable(acc.TestDatabaseName), "schema": config.StringVariable(acc.TestSchemaName), - "name": config.StringVariable(accName), + "name": config.StringVariable(id.Name()), "api_allowed_prefixes": config.ListVariable(config.StringVariable("https://123456.execute-api.us-west-2.amazonaws.com/prod/")), "url_of_proxy_and_resource": config.StringVariable("https://123456.execute-api.us-west-2.amazonaws.com/prod/test_func"), - "comment": config.StringVariable("Terraform acceptance test"), + "comment": config.StringVariable(comment), } } From f6cfd8ab065a62d5b5432571356b30734694a7f4 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:26:14 +0100 Subject: [PATCH 04/26] Fix external tables datasource acceptance test setup --- .../external_tables_acceptance_test.go | 52 ++++++++----------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/pkg/datasources/external_tables_acceptance_test.go b/pkg/datasources/external_tables_acceptance_test.go index 7deff130475..6bb68af9088 100644 --- a/pkg/datasources/external_tables_acceptance_test.go +++ b/pkg/datasources/external_tables_acceptance_test.go @@ -6,15 +6,19 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_ExternalTables(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() - stageName := acc.TestClient().Ids.Alpha() - externalTableName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + externalTableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -24,43 +28,33 @@ func TestAcc_ExternalTables(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: externalTables(databaseName, schemaName, stageName, externalTableName), + Config: externalTables(stageId, externalTableId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "database", databaseName), - resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "schema", schemaName), + resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "database", stageId.DatabaseName()), + resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "schema", stageId.SchemaName()), resource.TestCheckResourceAttrSet("data.snowflake_external_tables.t", "external_tables.#"), resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "external_tables.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "external_tables.0.name", externalTableName), + resource.TestCheckResourceAttr("data.snowflake_external_tables.t", "external_tables.0.name", externalTableId.Name()), ), }, }, }) } -func externalTables(databaseName string, schemaName string, stageName string, externalTableName string) string { +func externalTables(stageId sdk.SchemaObjectIdentifier, externalTableId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` - - resource snowflake_database "test" { - name = "%v" - } - - resource snowflake_schema "test"{ - name = "%v" - database = snowflake_database.test.name - } - resource "snowflake_stage" "test" { - name = "%v" + name = "%[3]s" url = "s3://snowflake-workshop-lab/weather-nyc" - database = snowflake_database.test.name - schema = snowflake_schema.test.name + database = "%[1]s" + schema = "%[2]s" comment = "Terraform acceptance test" } resource "snowflake_external_table" "test_table" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = "%v" + database = "%[1]s" + schema = "%[2]s" + name = "%[4]s" comment = "Terraform acceptance test" column { name = "column1" @@ -68,13 +62,13 @@ func externalTables(databaseName string, schemaName string, stageName string, ex as = "TO_VARCHAR(TO_TIMESTAMP_NTZ(value:unix_timestamp_property::NUMBER, 3), 'yyyy-mm-dd-hh')" } file_format = "TYPE = CSV" - location = "@${snowflake_database.test.name}.${snowflake_schema.test.name}.${snowflake_stage.test.name}" + location = "@${snowflake_stage.test.fully_qualified_name}" } data snowflake_external_tables "t" { - database = snowflake_external_table.test_table.database - schema = snowflake_external_table.test_table.schema + database = "%[1]s" + schema = "%[2]s" depends_on = [snowflake_external_table.test_table] } - `, databaseName, schemaName, stageName, externalTableName) + `, stageId.DatabaseName(), stageId.SchemaName(), stageId.Name(), externalTableId.Name()) } From 1cbe723455b2e3a4c546edffc266b8df974ac295 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:29:01 +0100 Subject: [PATCH 05/26] Fix failover groups datasource acceptance test setup --- pkg/datasources/failover_groups_acceptance_test.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/datasources/failover_groups_acceptance_test.go b/pkg/datasources/failover_groups_acceptance_test.go index 2944cdca4a0..8d6a53675df 100644 --- a/pkg/datasources/failover_groups_acceptance_test.go +++ b/pkg/datasources/failover_groups_acceptance_test.go @@ -7,6 +7,7 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) @@ -15,9 +16,12 @@ func TestAcc_FailoverGroups(t *testing.T) { // TODO [SNOW-1002023]: Unskip; Business Critical Snowflake Edition needed _ = testenvs.GetOrSkipTest(t, testenvs.TestFailoverGroups) + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + failoverGroupId := acc.TestClient().Ids.RandomAccountObjectIdentifier() accountName := testenvs.GetOrSkipTest(t, testenvs.BusinessCriticalAccount) - name := acc.TestClient().Ids.Alpha() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -27,8 +31,9 @@ func TestAcc_FailoverGroups(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: failoverGroupsConfig(name, accountName), + Config: failoverGroupsConfig(failoverGroupId, accountName), Check: resource.ComposeTestCheckFunc( + // TODO [SNOW-1348343]: fix these assertions - there might be multiple failover groups if we run tests in parallel resource.TestCheckResourceAttr("data.snowflake_failover_groups.d", "failover_groups.#", "1"), resource.TestCheckResourceAttr("data.snowflake_failover_groups.d", "failover_groups.0.object_types.#", "1"), resource.TestCheckResourceAttr("data.snowflake_failover_groups.d", "failover_groups.0.object_types.0", "ROLES"), @@ -40,7 +45,7 @@ func TestAcc_FailoverGroups(t *testing.T) { }) } -func failoverGroupsConfig(failoverGroupName string, allowedAccount string) string { +func failoverGroupsConfig(failoverGroupId sdk.AccountObjectIdentifier, allowedAccount string) string { return fmt.Sprintf(` resource "snowflake_failover_group" "source_failover_group" { name = "%s" @@ -51,5 +56,5 @@ func failoverGroupsConfig(failoverGroupName string, allowedAccount string) strin data "snowflake_failover_groups" "d" { depends_on = [snowflake_failover_group.source_failover_group] } - `, failoverGroupName, allowedAccount) + `, failoverGroupId.Name(), allowedAccount) } From 459789102398231443151cc656ed1bd7a5e980c0 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 16:34:17 +0100 Subject: [PATCH 06/26] Fix file formats datasource acceptance test setup --- .../file_formats_acceptance_test.go | 71 ++++++++----------- 1 file changed, 28 insertions(+), 43 deletions(-) diff --git a/pkg/datasources/file_formats_acceptance_test.go b/pkg/datasources/file_formats_acceptance_test.go index 9fc3c2c52f5..eca32a01d2f 100644 --- a/pkg/datasources/file_formats_acceptance_test.go +++ b/pkg/datasources/file_formats_acceptance_test.go @@ -6,14 +6,18 @@ import ( acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_FileFormats(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() - fileFormatName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + fileFormatId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -23,13 +27,13 @@ func TestAcc_FileFormats(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: fileFormats(databaseName, schemaName, fileFormatName), + Config: fileFormats(fileFormatId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", databaseName), - resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", schemaName), + resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", fileFormatId.DatabaseName()), + resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", fileFormatId.SchemaName()), resource.TestCheckResourceAttrSet("data.snowflake_file_formats.t", "file_formats.#"), resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "file_formats.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "file_formats.0.name", fileFormatName), + resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "file_formats.0.name", fileFormatId.Name()), ), }, }, @@ -37,8 +41,9 @@ func TestAcc_FileFormats(t *testing.T) { } func TestAcc_FileFormatsEmpty(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -48,10 +53,10 @@ func TestAcc_FileFormatsEmpty(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: zeroFileFormats(databaseName, schemaName), + Config: zeroFileFormats(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", databaseName), - resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", schemaName), + resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", acc.TestSchemaName), resource.TestCheckResourceAttrSet("data.snowflake_file_formats.t", "file_formats.#"), resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "file_formats.#", "0"), ), @@ -60,22 +65,12 @@ func TestAcc_FileFormatsEmpty(t *testing.T) { }) } -func fileFormats(databaseName string, schemaName string, fileFormatName string) string { +func fileFormats(fileFormatId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` - - resource snowflake_database "d" { - name = "%v" - } - - resource snowflake_schema "s"{ - name = "%v" - database = snowflake_database.d.name - } - resource snowflake_file_format "t"{ - name = "%v" - database = snowflake_schema.s.database - schema = snowflake_schema.s.name + name = "%[3]s" + database = "%[1]s" + schema = "%[2]s" format_type = "CSV" compression = "GZIP" record_delimiter = "\r" @@ -101,28 +96,18 @@ func fileFormats(databaseName string, schemaName string, fileFormatName string) } data snowflake_file_formats "t" { - database = snowflake_file_format.t.database - schema = snowflake_file_format.t.schema + database = "%[1]s" + schema = "%[2]s" depends_on = [snowflake_file_format.t] } - `, databaseName, schemaName, fileFormatName) + `, fileFormatId.DatabaseName(), fileFormatId.SchemaName(), fileFormatId.Name()) } -func zeroFileFormats(databaseName string, schemaName string) string { +func zeroFileFormats() string { return fmt.Sprintf(` - - resource snowflake_database "d" { - name = "%v" - } - - resource snowflake_schema "s"{ - name = "%v" - database = snowflake_database.d.name - } - data snowflake_file_formats "t" { - database = snowflake_schema.s.database - schema = snowflake_schema.s.name + database = "%[1]s" + schema = "%[2]s" } - `, databaseName, schemaName) + `, acc.TestDatabaseName, acc.TestSchemaName) } From 80140b177a8c44b66fda46a8e9a6510adfd6ba15 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 17:08:17 +0100 Subject: [PATCH 07/26] Fix functions datasource acceptance test setup --- pkg/datasources/functions_acceptance_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/datasources/functions_acceptance_test.go b/pkg/datasources/functions_acceptance_test.go index 4ac49882fea..ca53707f1f9 100644 --- a/pkg/datasources/functions_acceptance_test.go +++ b/pkg/datasources/functions_acceptance_test.go @@ -21,7 +21,6 @@ func TestAcc_Functions(t *testing.T) { t.Setenv(string(testenvs.ConfigureClientOnce), "") dataSourceName := "data.snowflake_functions.functions" - resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, From e43c9bc254662bddd5f606101c6f2ff7912bfd57 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Thu, 13 Mar 2025 17:09:47 +0100 Subject: [PATCH 08/26] Generate grants datasource config builder --- .../gen/datasource_schema_def.go | 8 +- .../datasourcemodel/grants_model_gen.go | 109 ++++++++++++++++++ 2 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go index 4841a41e3db..2674d03810e 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -22,6 +22,10 @@ func GetDatasourceSchemaDetails() []genhelpers.ResourceSchemaDetails { } var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ + { + name: "Accounts", + schema: datasources.Accounts().Schema, + }, { name: "Database", schema: datasources.Database().Schema, @@ -39,7 +43,7 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ schema: datasources.Databases().Schema, }, { - name: "Accounts", - schema: datasources.Accounts().Schema, + name: "Grants", + schema: datasources.Grants().Schema, }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go new file mode 100644 index 00000000000..83ba17f51b3 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go @@ -0,0 +1,109 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package datasourcemodel + +import ( + "encoding/json" + + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/datasources" +) + +type GrantsModel struct { + FutureGrantsIn tfconfig.Variable `json:"future_grants_in,omitempty"` + FutureGrantsTo tfconfig.Variable `json:"future_grants_to,omitempty"` + Grants tfconfig.Variable `json:"grants,omitempty"` + GrantsOf tfconfig.Variable `json:"grants_of,omitempty"` + GrantsOn tfconfig.Variable `json:"grants_on,omitempty"` + GrantsTo tfconfig.Variable `json:"grants_to,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func Grants( + datasourceName string, +) *GrantsModel { + g := &GrantsModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.Grants)} + return g +} + +func GrantsWithDefaultMeta() *GrantsModel { + g := &GrantsModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.Grants)} + return g +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (g *GrantsModel) MarshalJSON() ([]byte, error) { + type Alias GrantsModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(g), + DependsOn: g.DependsOn(), + }) +} + +func (g *GrantsModel) WithDependsOn(values ...string) *GrantsModel { + g.SetDependsOn(values...) + return g +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +// future_grants_in attribute type is not yet supported, so WithFutureGrantsIn can't be generated + +// future_grants_to attribute type is not yet supported, so WithFutureGrantsTo can't be generated + +// grants attribute type is not yet supported, so WithGrants can't be generated + +// grants_of attribute type is not yet supported, so WithGrantsOf can't be generated + +// grants_on attribute type is not yet supported, so WithGrantsOn can't be generated + +// grants_to attribute type is not yet supported, so WithGrantsTo can't be generated + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (g *GrantsModel) WithFutureGrantsInValue(value tfconfig.Variable) *GrantsModel { + g.FutureGrantsIn = value + return g +} + +func (g *GrantsModel) WithFutureGrantsToValue(value tfconfig.Variable) *GrantsModel { + g.FutureGrantsTo = value + return g +} + +func (g *GrantsModel) WithGrantsValue(value tfconfig.Variable) *GrantsModel { + g.Grants = value + return g +} + +func (g *GrantsModel) WithGrantsOfValue(value tfconfig.Variable) *GrantsModel { + g.GrantsOf = value + return g +} + +func (g *GrantsModel) WithGrantsOnValue(value tfconfig.Variable) *GrantsModel { + g.GrantsOn = value + return g +} + +func (g *GrantsModel) WithGrantsToValue(value tfconfig.Variable) *GrantsModel { + g.GrantsTo = value + return g +} From 57770d96d17206e7d45a72ae2c0bf1d0eaa6e58b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 01:58:04 +0100 Subject: [PATCH 09/26] Add single value workaround --- .../gen/templates/marshal_json.tmpl | 8 +-- .../datasourcemodel/grants_model_ext.go | 16 ++++++ .../datasourcemodel/grants_model_gen.go | 8 +-- .../config/hcl_config_provider.go | 9 +++- .../config/hcl_config_provider_test.go | 49 +++++++++++++++++++ .../bettertestspoc/config/placeholders.go | 5 +- pkg/datasources/grants_acceptance_test.go | 8 ++- 7 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/templates/marshal_json.tmpl b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/templates/marshal_json.tmpl index 96c00d6e1bc..0de389fe128 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/templates/marshal_json.tmpl +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/templates/marshal_json.tmpl @@ -11,10 +11,12 @@ func ({{ $modelVar }} *{{ $modelName }}) MarshalJSON() ([]byte, error) { type Alias {{ $modelName }} return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)({{ $modelVar }}), - DependsOn: {{ $modelVar }}.DependsOn(), + Alias: (*Alias)({{ $modelVar }}), + DependsOn: {{ $modelVar }}.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go new file mode 100644 index 00000000000..f35cfa6ab99 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -0,0 +1,16 @@ +package datasourcemodel + +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" +) + +func GrantsOnAccount( + datasourceName string, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "account": tfconfig.BoolVariable(true), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go index 83ba17f51b3..39e483254be 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_gen.go @@ -46,10 +46,12 @@ func (g *GrantsModel) MarshalJSON() ([]byte, error) { type Alias GrantsModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(g), - DependsOn: g.DependsOn(), + Alias: (*Alias)(g), + DependsOn: g.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/hcl_config_provider.go b/pkg/acceptance/bettertestspoc/config/hcl_config_provider.go index e96fe57d166..78d20a83d35 100644 --- a/pkg/acceptance/bettertestspoc/config/hcl_config_provider.go +++ b/pkg/acceptance/bettertestspoc/config/hcl_config_provider.go @@ -10,7 +10,7 @@ import ( hclv1parser "github.com/hashicorp/hcl/json/parser" ) -var DefaultHclConfigProvider = NewHclV1ConfigProvider(replaceNullPlaceholders, unquoteBlockType, fixBlockArguments, replaceMultilinePlaceholders, unquoteArguments, unquoteArguments, removeDoubleNewlines, unquoteDependsOnReferences) +var DefaultHclConfigProvider = NewHclV1ConfigProvider(replaceNullPlaceholders, removeSingleAttributeWorkaroundLines, unquoteBlockType, fixBlockArguments, replaceMultilinePlaceholders, unquoteArguments, removeDoubleNewlines, unquoteDependsOnReferences) // HclConfigProvider defines methods to generate .tf config from .tf.json configs. type HclConfigProvider interface { @@ -98,6 +98,13 @@ EOT`), `\n`, ` `), nil } +// Conversion to HCL using hcl v1 has problem with nested jsons where there is only one child value. +// Current workaround used is to add the placeholder attribute which is later removed from the resulting HCL. +func removeSingleAttributeWorkaroundLines(s string) (string, error) { + lineToRemoveRegex := regexp.MustCompile(fmt.Sprintf(`( +)"(.*)"( += +)"%s"\n`, SnowflakeProviderConfigSingleAttributeWorkaround)) + return lineToRemoveRegex.ReplaceAllString(s, ""), nil +} + // Conversion to HCL using hcl v1 does not unquote arguments. // Check experiments subpackage for details. func unquoteArguments(s string) (string, error) { diff --git a/pkg/acceptance/bettertestspoc/config/hcl_config_provider_test.go b/pkg/acceptance/bettertestspoc/config/hcl_config_provider_test.go index 431e6c36811..97f4502c1ee 100644 --- a/pkg/acceptance/bettertestspoc/config/hcl_config_provider_test.go +++ b/pkg/acceptance/bettertestspoc/config/hcl_config_provider_test.go @@ -103,4 +103,53 @@ EOT _, err := config.DefaultHclConfigProvider.HclFromJson([]byte(resourceJson)) require.ErrorContains(t, err, "object expected closing RBRACE got: EOF") }) + + t.Run("document improper handling when there is only one value inside", func(t *testing.T) { + datasourceJson := `{ + "data": { + "snowflake_grants": { + "test": { + "grants_on": { + "account": true + } + } + } + } + }` + expectedResult := `"data" "snowflake_grants" "test" "grants_on" { + account = true +} +` + + result, err := config.DefaultHclConfigProvider.HclFromJson([]byte(datasourceJson)) + + require.NoError(t, err) + require.Equal(t, expectedResult, result) + }) + + t.Run("only one value inside - working with special formatter", func(t *testing.T) { + datasourceJson := `{ + "data": { + "snowflake_grants": { + "test": { + "grants_on": { + "account": true + }, + "any_name": "SF_TF_TEST_SINGLE_ATTRIBUTE_WORKAROUND" + } + } + } + }` + expectedResult := `data "snowflake_grants" "test" { + grants_on { + account = true + } +} +` + + result, err := config.DefaultHclConfigProvider.HclFromJson([]byte(datasourceJson)) + + require.NoError(t, err) + require.Equal(t, expectedResult, result) + }) } diff --git a/pkg/acceptance/bettertestspoc/config/placeholders.go b/pkg/acceptance/bettertestspoc/config/placeholders.go index c54e892d79e..e3b3914a4f8 100644 --- a/pkg/acceptance/bettertestspoc/config/placeholders.go +++ b/pkg/acceptance/bettertestspoc/config/placeholders.go @@ -3,6 +3,7 @@ package config type ReplacementPlaceholder string const ( - SnowflakeProviderConfigNull ReplacementPlaceholder = "SF_TF_TEST_NULL_PLACEHOLDER" - SnowflakeProviderConfigMultilineMarker ReplacementPlaceholder = "SF_TF_TEST_MULTILINE_MARKER_PLACEHOLDER" + SnowflakeProviderConfigNull ReplacementPlaceholder = "SF_TF_TEST_NULL_PLACEHOLDER" + SnowflakeProviderConfigMultilineMarker ReplacementPlaceholder = "SF_TF_TEST_MULTILINE_MARKER_PLACEHOLDER" + SnowflakeProviderConfigSingleAttributeWorkaround ReplacementPlaceholder = "SF_TF_TEST_SINGLE_ATTRIBUTE_WORKAROUND" ) diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index ec2e06d553f..c8cd66cdfbc 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -5,7 +5,9 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/datasourcemodel" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/config" @@ -15,6 +17,8 @@ import ( ) func TestAcc_Grants_On_Account(t *testing.T) { + grantsModel := datasourcemodel.GrantsOnAccount("test") + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -24,8 +28,8 @@ func TestAcc_Grants_On_Account(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/Account"), - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) From 0da69cb67f4fc13da9f81dc6d0c0530a32671a03 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 01:58:51 +0100 Subject: [PATCH 10/26] Regenerate datasource model builders --- .../config/datasourcemodel/accounts_model_gen.go | 8 +++++--- .../config/datasourcemodel/database_model_gen.go | 8 +++++--- .../config/datasourcemodel/database_role_model_gen.go | 8 +++++--- .../config/datasourcemodel/database_roles_model_gen.go | 8 +++++--- .../config/datasourcemodel/databases_model_gen.go | 8 +++++--- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/accounts_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/accounts_model_gen.go index f21a456df80..efd04d6c4bc 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/accounts_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/accounts_model_gen.go @@ -43,10 +43,12 @@ func (a *AccountsModel) MarshalJSON() ([]byte, error) { type Alias AccountsModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(a), - DependsOn: a.DependsOn(), + Alias: (*Alias)(a), + DependsOn: a.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_model_gen.go index 7ecb98bf7d3..91affc0458b 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_model_gen.go @@ -54,10 +54,12 @@ func (d *DatabaseModel) MarshalJSON() ([]byte, error) { type Alias DatabaseModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(d), - DependsOn: d.DependsOn(), + Alias: (*Alias)(d), + DependsOn: d.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_role_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_role_model_gen.go index 053f0f5376d..164fd6b8944 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_role_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_role_model_gen.go @@ -53,10 +53,12 @@ func (d *DatabaseRoleModel) MarshalJSON() ([]byte, error) { type Alias DatabaseRoleModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(d), - DependsOn: d.DependsOn(), + Alias: (*Alias)(d), + DependsOn: d.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_roles_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_roles_model_gen.go index 74d3435fe55..0d82048e02d 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_roles_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/database_roles_model_gen.go @@ -49,10 +49,12 @@ func (d *DatabaseRolesModel) MarshalJSON() ([]byte, error) { type Alias DatabaseRolesModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(d), - DependsOn: d.DependsOn(), + Alias: (*Alias)(d), + DependsOn: d.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/databases_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/databases_model_gen.go index bab46b9750e..b6ff8e12572 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/databases_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/databases_model_gen.go @@ -46,10 +46,12 @@ func (d *DatabasesModel) MarshalJSON() ([]byte, error) { type Alias DatabasesModel return json.Marshal(&struct { *Alias - DependsOn []string `json:"depends_on,omitempty"` + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` }{ - Alias: (*Alias)(d), - DependsOn: d.DependsOn(), + Alias: (*Alias)(d), + DependsOn: d.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, }) } From fbe0dec05e1e57962b80f9cf9f607fa930767b20 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 02:05:43 +0100 Subject: [PATCH 11/26] Test grants in account model builder --- .../datasourcemodel/grants_model_ext_test.go | 24 +++++++++++++++++++ .../On/Account/snowflake_grants_on_account.tf | 5 ---- 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/Account/snowflake_grants_on_account.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go new file mode 100644 index 00000000000..089339a2238 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -0,0 +1,24 @@ +package datasourcemodel_test + +import ( + "testing" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/datasourcemodel" + "github.com/stretchr/testify/require" +) + +func Test_GrantsModel(t *testing.T) { + t.Run("on account", func(t *testing.T) { + expected := `data "snowflake_grants" "test" { + grants_on { + account = true + } +} +` + + result := config.FromModels(t, datasourcemodel.GrantsOnAccount("test")) + + require.Equal(t, expected, result) + }) +} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/Account/snowflake_grants_on_account.tf b/pkg/datasources/testdata/TestAcc_Grants/On/Account/snowflake_grants_on_account.tf deleted file mode 100644 index 4c66d5a46e4..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/Account/snowflake_grants_on_account.tf +++ /dev/null @@ -1,5 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - account = true - } -} From 92fa71d39fcdd2f1583f173e7ed189c8f72f2544 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 11:49:50 +0100 Subject: [PATCH 12/26] Remove unused func --- pkg/provider/provider_acceptance_test.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pkg/provider/provider_acceptance_test.go b/pkg/provider/provider_acceptance_test.go index 7eacda0f4fd..950e94f6458 100644 --- a/pkg/provider/provider_acceptance_test.go +++ b/pkg/provider/provider_acceptance_test.go @@ -886,15 +886,6 @@ data %[2]s t {} `, profile, feature) } -func providerConfigWithDatasourcePreviewFeature(profile, feature string) string { - return fmt.Sprintf(` -provider "snowflake" { - profile = "%[1]s" -} -data %[2]s t {} -`, profile, feature) -} - func datasourceModel() config.DatasourceModel { return datasourcemodel.Database("t", acc.TestDatabaseName) } From bb6ab3dd90f86a38aade730f58ebff679d837d78 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:03:24 +0100 Subject: [PATCH 13/26] Fix grants on account object test setup --- .../datasourcemodel/grants_model_ext.go | 18 +++++++++++++ .../datasourcemodel/grants_model_ext_test.go | 26 +++++++++++++++++++ pkg/datasources/grants_acceptance_test.go | 12 ++++----- .../snowflake_grants_on_account_object.tf | 6 ----- .../On/AccountObject/variables.tf | 3 --- 5 files changed, 50 insertions(+), 15 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/snowflake_grants_on_account_object.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index f35cfa6ab99..6dafdbe39a2 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -1,7 +1,11 @@ package datasourcemodel import ( + "fmt" + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" ) func GrantsOnAccount( @@ -14,3 +18,17 @@ func GrantsOnAccount( }), ) } + +func GrantsOnAccountObject( + datasourceName string, + id sdk.AccountObjectIdentifier, + objectType sdk.ObjectType, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "object_name": tfconfig.StringVariable(id.Name()), + "object_type": tfconfig.StringVariable(fmt.Sprintf("%s", objectType)), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go index 089339a2238..1a295f3aaa3 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -1,10 +1,13 @@ package datasourcemodel_test import ( + "fmt" "testing" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/datasourcemodel" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/stretchr/testify/require" ) @@ -21,4 +24,27 @@ func Test_GrantsModel(t *testing.T) { require.Equal(t, expected, result) }) + + t.Run("on account object", func(t *testing.T) { + id := randomAccountObjectIdentifier() + expected := fmt.Sprintf(`data "snowflake_grants" "test" { + grants_on { + object_name = "%s" + object_type = "DATABASE" + } +} +`, id.Name()) + + result := config.FromModels(t, datasourcemodel.GrantsOnAccountObject("test", id, sdk.ObjectTypeDatabase)) + + require.Equal(t, expected, result) + }) +} + +func randomAccountObjectIdentifier() sdk.AccountObjectIdentifier { + return sdk.NewAccountObjectIdentifier(random.StringN(12)) +} + +func randomSchemaObjectIdentifier() sdk.SchemaObjectIdentifier { + return sdk.NewSchemaObjectIdentifier(random.StringN(12), random.StringN(12), random.StringN(12)) } diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index c8cd66cdfbc..d51347fc460 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -36,9 +36,10 @@ func TestAcc_Grants_On_Account(t *testing.T) { } func TestAcc_Grants_On_AccountObject(t *testing.T) { - configVariables := config.Variables{ - "database": config.StringVariable(acc.TestDatabaseName), - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + grantsModel := datasourcemodel.GrantsOnAccountObject("test", acc.TestClient().Ids.DatabaseId(), sdk.ObjectTypeDatabase) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -49,9 +50,8 @@ func TestAcc_Grants_On_AccountObject(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/AccountObject"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/snowflake_grants_on_account_object.tf b/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/snowflake_grants_on_account_object.tf deleted file mode 100644 index cd936923665..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/snowflake_grants_on_account_object.tf +++ /dev/null @@ -1,6 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - object_name = var.database - object_type = "DATABASE" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/variables.tf deleted file mode 100644 index bfdd9eeb3c1..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/AccountObject/variables.tf +++ /dev/null @@ -1,3 +0,0 @@ -variable "database" { - type = string -} From 5334d51d9b281e055ba074f40ba0eb2cdab4c9ba Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:03:35 +0100 Subject: [PATCH 14/26] Remove unused func --- pkg/sdk/helper_test.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pkg/sdk/helper_test.go b/pkg/sdk/helper_test.go index 57421942d98..7a46a66db71 100644 --- a/pkg/sdk/helper_test.go +++ b/pkg/sdk/helper_test.go @@ -1,11 +1,9 @@ package sdk import ( - "strings" "testing" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testprofiles" - "github.com/snowflakedb/gosnowflake" ) func defaultTestClient(t *testing.T) *Client { @@ -48,10 +46,3 @@ func testClient(t *testing.T, profile string) *Client { return client } - -func configAccountId(t *testing.T, cfg *gosnowflake.Config) AccountIdentifier { - t.Helper() - accountIdRaw := cfg.Account - parts := strings.SplitN(accountIdRaw, "-", 2) - return NewAccountIdentifier(parts[0], parts[1]) -} From 7c550ba42db3aa55eab9503e822a750f120ad6e0 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:12:55 +0100 Subject: [PATCH 15/26] Fix grants on database object acceptance test setup --- .../datasourcemodel/grants_model_ext.go | 14 ++++++++++++++ .../datasourcemodel/grants_model_ext_test.go | 19 +++++++++++++++++++ pkg/datasources/grants_acceptance_test.go | 13 ++++++------- .../snowflake_grants_on_database_object.tf | 6 ------ .../On/DatabaseObject/variables.tf | 7 ------- 5 files changed, 39 insertions(+), 20 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/snowflake_grants_on_database_object.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index 6dafdbe39a2..ebd5c71eef3 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -32,3 +32,17 @@ func GrantsOnAccountObject( }), ) } + +func GrantsOnDatabaseObject( + datasourceName string, + id sdk.DatabaseObjectIdentifier, + objectType sdk.ObjectType, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "object_name": tfconfig.StringVariable(id.FullyQualifiedName()), + "object_type": tfconfig.StringVariable(fmt.Sprintf("%s", objectType)), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go index 1a295f3aaa3..fcacefe2e58 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -39,12 +39,31 @@ func Test_GrantsModel(t *testing.T) { require.Equal(t, expected, result) }) + + t.Run("on database object", func(t *testing.T) { + id := randomDatabaseObjectIdentifier() + expected := fmt.Sprintf(`data "snowflake_grants" "test" { + grants_on { + object_name = "\"%s\".\"%s\"" + object_type = "SCHEMA" + } +} +`, id.DatabaseName(), id.Name()) + + result := config.FromModels(t, datasourcemodel.GrantsOnDatabaseObject("test", id, sdk.ObjectTypeSchema)) + + require.Equal(t, expected, result) + }) } func randomAccountObjectIdentifier() sdk.AccountObjectIdentifier { return sdk.NewAccountObjectIdentifier(random.StringN(12)) } +func randomDatabaseObjectIdentifier() sdk.DatabaseObjectIdentifier { + return sdk.NewDatabaseObjectIdentifier(random.StringN(12), random.StringN(12)) +} + func randomSchemaObjectIdentifier() sdk.SchemaObjectIdentifier { return sdk.NewSchemaObjectIdentifier(random.StringN(12), random.StringN(12), random.StringN(12)) } diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index d51347fc460..4aef2905922 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -58,10 +58,10 @@ func TestAcc_Grants_On_AccountObject(t *testing.T) { } func TestAcc_Grants_On_DatabaseObject(t *testing.T) { - configVariables := config.Variables{ - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + grantsModel := datasourcemodel.GrantsOnDatabaseObject("test", acc.TestClient().Ids.SchemaId(), sdk.ObjectTypeSchema) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -72,9 +72,8 @@ func TestAcc_Grants_On_DatabaseObject(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/DatabaseObject"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/snowflake_grants_on_database_object.tf b/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/snowflake_grants_on_database_object.tf deleted file mode 100644 index ffb7081367a..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/snowflake_grants_on_database_object.tf +++ /dev/null @@ -1,6 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - object_name = "\"${var.database}\".\"${var.schema}\"" - object_type = "SCHEMA" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/variables.tf deleted file mode 100644 index 626dbab534f..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/DatabaseObject/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} From b2ba2e22553341d68f625ae0f677303adde0854d Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:22:59 +0100 Subject: [PATCH 16/26] Fix grants on schema object acceptance test setup --- .../datasourcemodel/grants_model_ext.go | 14 ++++++++++++ .../datasourcemodel/grants_model_ext_test.go | 21 +++++++++++++++--- pkg/datasources/grants_acceptance_test.go | 22 +++++++++++-------- .../snowflake_grants_on_schema_object.tf | 17 -------------- .../On/SchemaObject/variables.tf | 11 ---------- 5 files changed, 45 insertions(+), 40 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/snowflake_grants_on_schema_object.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index ebd5c71eef3..da40f231929 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -46,3 +46,17 @@ func GrantsOnDatabaseObject( }), ) } + +func GrantsOnSchemaObject( + datasourceName string, + id sdk.SchemaObjectIdentifier, + objectType sdk.ObjectType, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "object_name": tfconfig.StringVariable(id.FullyQualifiedName()), + "object_type": tfconfig.StringVariable(fmt.Sprintf("%s", objectType)), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go index fcacefe2e58..8960e2474d1 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -54,16 +54,31 @@ func Test_GrantsModel(t *testing.T) { require.Equal(t, expected, result) }) + + t.Run("on schema object", func(t *testing.T) { + id := randomSchemaObjectIdentifier() + expected := fmt.Sprintf(`data "snowflake_grants" "test" { + grants_on { + object_name = "\"%s\".\"%s\".\"%s\"" + object_type = "VIEW" + } +} +`, id.DatabaseName(), id.SchemaName(), id.Name()) + + result := config.FromModels(t, datasourcemodel.GrantsOnSchemaObject("test", id, sdk.ObjectTypeView)) + + require.Equal(t, expected, result) + }) } func randomAccountObjectIdentifier() sdk.AccountObjectIdentifier { - return sdk.NewAccountObjectIdentifier(random.StringN(12)) + return sdk.NewAccountObjectIdentifier(random.AlphaN(12)) } func randomDatabaseObjectIdentifier() sdk.DatabaseObjectIdentifier { - return sdk.NewDatabaseObjectIdentifier(random.StringN(12), random.StringN(12)) + return sdk.NewDatabaseObjectIdentifier(random.AlphaN(12), random.AlphaN(12)) } func randomSchemaObjectIdentifier() sdk.SchemaObjectIdentifier { - return sdk.NewSchemaObjectIdentifier(random.StringN(12), random.StringN(12), random.StringN(12)) + return sdk.NewSchemaObjectIdentifier(random.AlphaN(12), random.AlphaN(12), random.AlphaN(12)) } diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 4aef2905922..4d7a24c443d 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -1,6 +1,7 @@ package datasources_test import ( + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "regexp" "testing" @@ -80,12 +81,16 @@ func TestAcc_Grants_On_DatabaseObject(t *testing.T) { } func TestAcc_Grants_On_SchemaObject(t *testing.T) { - tableName := acc.TestClient().Ids.Alpha() - configVariables := config.Variables{ - "database": config.StringVariable(acc.TestDatabaseName), - "schema": config.StringVariable(acc.TestSchemaName), - "table": config.StringVariable(tableName), - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + viewId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + statement := "SELECT ROLE_NAME FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + columnNames := []string{"ROLE_NAME"} + + viewModel := model.View("test", viewId.DatabaseName(), viewId.Name(), viewId.SchemaName(), statement).WithColumnNames(columnNames...) + grantsModel := datasourcemodel.GrantsOnSchemaObject("test", viewId, sdk.ObjectTypeView). + WithDependsOn(viewModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -96,9 +101,8 @@ func TestAcc_Grants_On_SchemaObject(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/SchemaObject"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, viewModel, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/snowflake_grants_on_schema_object.tf b/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/snowflake_grants_on_schema_object.tf deleted file mode 100644 index f64d445a33d..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/snowflake_grants_on_schema_object.tf +++ /dev/null @@ -1,17 +0,0 @@ -resource "snowflake_table" "test" { - database = var.database - schema = var.schema - name = var.table - - column { - name = "id" - type = "NUMBER(38,0)" - } -} - -data "snowflake_grants" "test" { - grants_on { - object_name = snowflake_table.test.fully_qualified_name - object_type = "TABLE" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/variables.tf deleted file mode 100644 index 92e06a8848c..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "database" { - type = string -} - -variable "schema" { - type = string -} - -variable "table" { - type = string -} From 97424725fc6e1846a17abebf2aeebeb6780d33f3 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:28:49 +0100 Subject: [PATCH 17/26] Fix grants on schema object with arguments acceptance test setup --- .../datasourcemodel/grants_model_ext.go | 14 ++++++++++++++ .../datasourcemodel/grants_model_ext_test.go | 19 +++++++++++++++++++ pkg/datasources/grants_acceptance_test.go | 9 +++------ .../snowflake_grants_on_schema_object.tf | 6 ------ .../SchemaObject_WithArguments/variables.tf | 3 --- 5 files changed, 36 insertions(+), 15 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/snowflake_grants_on_schema_object.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index da40f231929..8bc9e8971ff 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -60,3 +60,17 @@ func GrantsOnSchemaObject( }), ) } + +func GrantsOnSchemaObjectWithArguments( + datasourceName string, + id sdk.SchemaObjectIdentifierWithArguments, + objectType sdk.ObjectType, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "object_name": tfconfig.StringVariable(id.FullyQualifiedName()), + "object_type": tfconfig.StringVariable(fmt.Sprintf("%s", objectType)), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go index 8960e2474d1..426f8e00d95 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -69,6 +69,21 @@ func Test_GrantsModel(t *testing.T) { require.Equal(t, expected, result) }) + + t.Run("on schema object with arguments", func(t *testing.T) { + id := randomSchemaObjectIdentifierWithArguments(sdk.DataTypeVARCHAR) + expected := fmt.Sprintf(`data "snowflake_grants" "test" { + grants_on { + object_name = "\"%s\".\"%s\".\"%s\"(%s)" + object_type = "FUNCTION" + } +} +`, id.DatabaseName(), id.SchemaName(), id.Name(), sdk.DataTypeVARCHAR) + + result := config.FromModels(t, datasourcemodel.GrantsOnSchemaObjectWithArguments("test", id, sdk.ObjectTypeFunction)) + + require.Equal(t, expected, result) + }) } func randomAccountObjectIdentifier() sdk.AccountObjectIdentifier { @@ -82,3 +97,7 @@ func randomDatabaseObjectIdentifier() sdk.DatabaseObjectIdentifier { func randomSchemaObjectIdentifier() sdk.SchemaObjectIdentifier { return sdk.NewSchemaObjectIdentifier(random.AlphaN(12), random.AlphaN(12), random.AlphaN(12)) } + +func randomSchemaObjectIdentifierWithArguments(argumentDataTypes ...sdk.DataType) sdk.SchemaObjectIdentifierWithArguments { + return sdk.NewSchemaObjectIdentifierWithArguments(random.AlphaN(12), random.AlphaN(12), random.AlphaN(12), argumentDataTypes...) +} diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 4d7a24c443d..31599880876 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -113,9 +113,7 @@ func TestAcc_Grants_On_SchemaObject_WithArguments(t *testing.T) { acc.TestAccPreCheck(t) function := acc.TestClient().Function.Create(t, sdk.DataTypeVARCHAR) - configVariables := config.Variables{ - "fully_qualified_function_name": config.StringVariable(function.ID().FullyQualifiedName()), - } + grantsModel := datasourcemodel.GrantsOnSchemaObjectWithArguments("test", function.ID(), sdk.ObjectTypeFunction) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -126,9 +124,8 @@ func TestAcc_Grants_On_SchemaObject_WithArguments(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/SchemaObject_WithArguments"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/snowflake_grants_on_schema_object.tf b/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/snowflake_grants_on_schema_object.tf deleted file mode 100644 index 80d7df5fad7..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/snowflake_grants_on_schema_object.tf +++ /dev/null @@ -1,6 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - object_name = var.fully_qualified_function_name - object_type = "FUNCTION" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/variables.tf deleted file mode 100644 index 8a903b6d62c..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/SchemaObject_WithArguments/variables.tf +++ /dev/null @@ -1,3 +0,0 @@ -variable "fully_qualified_function_name" { - type = string -} From 65cfc171626e350c0975627aefc722b5fe53a0eb Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:38:53 +0100 Subject: [PATCH 18/26] Use builders for invalid grants on acceptance tests --- .../datasourcemodel/grants_model_ext.go | 24 +++++++++++++++++++ .../datasourcemodel/grants_model_ext_test.go | 12 ++++++++++ pkg/datasources/grants_acceptance_test.go | 16 ++++++++----- ...e_grants_on_invalid_missing_object_type.tf | 5 ---- ...nowflake_grants_on_invalid_no_attribute.tf | 4 ---- 5 files changed, 46 insertions(+), 15 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/Invalid/MissingObjectType/snowflake_grants_on_invalid_missing_object_type.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/On/Invalid/NoAttribute/snowflake_grants_on_invalid_no_attribute.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index 8bc9e8971ff..277f4a9c4ee 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -5,6 +5,7 @@ import ( tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" ) @@ -74,3 +75,26 @@ func GrantsOnSchemaObjectWithArguments( }), ) } + +func GrantsOnMissingObjectType( + datasourceName string, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "object_name": tfconfig.StringVariable("DATABASE"), + }), + ) +} + +func GrantsOnEmpty( + datasourceName string, +) *GrantsModel { + placeholder := fmt.Sprintf("%s", config.SnowflakeProviderConfigSingleAttributeWorkaround) + return Grants(datasourceName). + WithGrantsOnValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "placeholder": tfconfig.StringVariable(placeholder), + }), + ) +} diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go index 426f8e00d95..400362b7eda 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext_test.go @@ -84,6 +84,18 @@ func Test_GrantsModel(t *testing.T) { require.Equal(t, expected, result) }) + + t.Run("on empty", func(t *testing.T) { + expected := `data "snowflake_grants" "test" { + grants_on { + } +} +` + + result := config.FromModels(t, datasourcemodel.GrantsOnEmpty("test")) + + require.Equal(t, expected, result) + }) } func randomAccountObjectIdentifier() sdk.AccountObjectIdentifier { diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 31599880876..9fc1e1af4e0 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -132,6 +132,8 @@ func TestAcc_Grants_On_SchemaObject_WithArguments(t *testing.T) { } func TestAcc_Grants_On_Invalid_NoAttribute(t *testing.T) { + grantsModel := datasourcemodel.GrantsOnEmpty("test") + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -141,15 +143,17 @@ func TestAcc_Grants_On_Invalid_NoAttribute(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/Invalid/NoAttribute"), - PlanOnly: true, - ExpectError: regexp.MustCompile("Error: Invalid combination of arguments"), + Config: accconfig.FromModels(t, grantsModel), + PlanOnly: true, + ExpectError: regexp.MustCompile("Error: Invalid combination of arguments"), }, }, }) } func TestAcc_Grants_On_Invalid_MissingObjectType(t *testing.T) { + grantsModel := datasourcemodel.GrantsOnMissingObjectType("test") + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -159,9 +163,9 @@ func TestAcc_Grants_On_Invalid_MissingObjectType(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/On/Invalid/MissingObjectType"), - PlanOnly: true, - ExpectError: regexp.MustCompile("Error: Missing required argument"), + Config: accconfig.FromModels(t, grantsModel), + PlanOnly: true, + ExpectError: regexp.MustCompile("Error: Missing required argument"), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/MissingObjectType/snowflake_grants_on_invalid_missing_object_type.tf b/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/MissingObjectType/snowflake_grants_on_invalid_missing_object_type.tf deleted file mode 100644 index d94be962db7..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/MissingObjectType/snowflake_grants_on_invalid_missing_object_type.tf +++ /dev/null @@ -1,5 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - object_name = "some_object" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/NoAttribute/snowflake_grants_on_invalid_no_attribute.tf b/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/NoAttribute/snowflake_grants_on_invalid_no_attribute.tf deleted file mode 100644 index 4ec09a6115e..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/On/Invalid/NoAttribute/snowflake_grants_on_invalid_no_attribute.tf +++ /dev/null @@ -1,4 +0,0 @@ -data "snowflake_grants" "test" { - grants_on { - } -} From cd484cdf9abac2e6e1c2333acc294cb812bd8b7d Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:50:01 +0100 Subject: [PATCH 19/26] Fix grants to database role acceptance test setup --- .../config/datasourcemodel/grants_model_ext.go | 12 ++++++++++++ pkg/datasources/grants_acceptance_test.go | 18 +++++++++--------- .../snowflake_grants_to_database_role.tf | 14 -------------- .../To/DatabaseRole/variables.tf | 7 ------- 4 files changed, 21 insertions(+), 30 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/snowflake_grants_to_database_role.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index 277f4a9c4ee..cd26974250f 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -98,3 +98,15 @@ func GrantsOnEmpty( }), ) } + +func GrantsToDatabaseRole( + datasourceName string, + id sdk.DatabaseObjectIdentifier, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsToValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "database_role": tfconfig.StringVariable(id.FullyQualifiedName()), + }), + ) +} diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 9fc1e1af4e0..80e2cca1655 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -202,12 +202,13 @@ func TestAcc_Grants_To_AccountRole(t *testing.T) { } func TestAcc_Grants_To_DatabaseRole(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - databaseRoleName := acc.TestClient().Ids.Alpha() - configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "database_role": config.StringVariable(databaseRoleName), - } + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + databaseRoleId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + databaseRoleModel := model.DatabaseRole("test", databaseRoleId.DatabaseName(), databaseRoleId.Name()) + grantsModel := datasourcemodel.GrantsToDatabaseRole("test", databaseRoleId). + WithDependsOn(databaseRoleModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -218,9 +219,8 @@ func TestAcc_Grants_To_DatabaseRole(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/To/DatabaseRole"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresent(), + Config: accconfig.FromModels(t, databaseRoleModel, grantsModel), + Check: checkAtLeastOneGrantPresent(), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/snowflake_grants_to_database_role.tf b/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/snowflake_grants_to_database_role.tf deleted file mode 100644 index 87183c9a9b8..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/snowflake_grants_to_database_role.tf +++ /dev/null @@ -1,14 +0,0 @@ -resource "snowflake_database" "test" { - name = var.database -} - -resource "snowflake_database_role" "test" { - name = var.database_role - database = snowflake_database.test.name -} - -data "snowflake_grants" "test" { - grants_to { - database_role = "\"${snowflake_database.test.name}\".\"${snowflake_database_role.test.name}\"" - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/variables.tf deleted file mode 100644 index 447fa919c0a..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/To/DatabaseRole/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "database" { - type = string -} - -variable "database_role" { - type = string -} From 3ca0bf0b43ce60542cc5483741ad171e25aa9f49 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 12:55:42 +0100 Subject: [PATCH 20/26] Fix grants to user and share acceptance tests setup --- .../datasourcemodel/grants_model_ext.go | 12 ++++++++++ pkg/datasources/grants_acceptance_test.go | 22 ++++++++++--------- .../To/Share/snowflake_grants_to_share.tf | 10 ++------- .../To/User/snowflake_grants_to_user.tf | 5 ----- .../TestAcc_Grants/To/User/variables.tf | 3 --- 5 files changed, 26 insertions(+), 26 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/To/User/snowflake_grants_to_user.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Grants/To/User/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go index cd26974250f..1adf9d95882 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/grants_model_ext.go @@ -110,3 +110,15 @@ func GrantsToDatabaseRole( }), ) } + +func GrantsToUser( + datasourceName string, + id sdk.AccountObjectIdentifier, +) *GrantsModel { + return Grants(datasourceName). + WithGrantsToValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "user": tfconfig.StringVariable(id.Name()), + }), + ) +} diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 80e2cca1655..c7bf9ee3bbf 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -227,10 +227,11 @@ func TestAcc_Grants_To_DatabaseRole(t *testing.T) { } func TestAcc_Grants_To_User(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + userId := acc.TestClient().Context.CurrentUser(t) - configVariables := config.Variables{ - "user": config.StringVariable(userId.Name()), - } + grantsModel := datasourcemodel.GrantsToUser("test", userId) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -241,20 +242,21 @@ func TestAcc_Grants_To_User(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Grants/To/User"), - ConfigVariables: configVariables, - Check: checkAtLeastOneGrantPresentLimited(), + Config: accconfig.FromModels(t, grantsModel), + Check: checkAtLeastOneGrantPresentLimited(), }, }, }) } func TestAcc_Grants_To_Share(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - shareName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + shareId := acc.TestClient().Ids.RandomAccountObjectIdentifier() configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "share": config.StringVariable(shareName), + "database": config.StringVariable(acc.TestDatabaseName), + "share": config.StringVariable(shareId.Name()), } resource.Test(t, resource.TestCase{ diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf b/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf index 5fa9e344244..d4028dd9b76 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf @@ -1,17 +1,11 @@ -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_share" "test" { - depends_on = [snowflake_database.test] - name = var.share } resource "snowflake_grant_privileges_to_share" "test" { to_share = snowflake_share.test.name - privileges = ["USAGE"] - on_database = snowflake_database.test.name + privileges = ["USAGE"] + on_database = var.database } data "snowflake_grants" "test" { diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/User/snowflake_grants_to_user.tf b/pkg/datasources/testdata/TestAcc_Grants/To/User/snowflake_grants_to_user.tf deleted file mode 100644 index fa2cffc3ac2..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/To/User/snowflake_grants_to_user.tf +++ /dev/null @@ -1,5 +0,0 @@ -data "snowflake_grants" "test" { - grants_to { - user = var.user - } -} diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/User/variables.tf b/pkg/datasources/testdata/TestAcc_Grants/To/User/variables.tf deleted file mode 100644 index be0022a44a8..00000000000 --- a/pkg/datasources/testdata/TestAcc_Grants/To/User/variables.tf +++ /dev/null @@ -1,3 +0,0 @@ -variable "user" { - type = string -} From f114cd1d833aa657f39eb431f9e58287dd384d32 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:08:00 +0100 Subject: [PATCH 21/26] Fix grants of database role acceptance tests setup --- pkg/datasources/grants_acceptance_test.go | 10 ++++++---- .../DatabaseRole/snowflake_grants_of_database_role.tf | 10 +++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index c7bf9ee3bbf..7cf58686394 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -371,11 +371,13 @@ func TestAcc_Grants_Of_AccountRole(t *testing.T) { } func TestAcc_Grants_Of_DatabaseRole(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - databaseRoleName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + databaseRoleId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "database_role": config.StringVariable(databaseRoleName), + "database": config.StringVariable(acc.TestDatabaseName), + "database_role": config.StringVariable(databaseRoleId.Name()), } resource.Test(t, resource.TestCase{ diff --git a/pkg/datasources/testdata/TestAcc_Grants/Of/DatabaseRole/snowflake_grants_of_database_role.tf b/pkg/datasources/testdata/TestAcc_Grants/Of/DatabaseRole/snowflake_grants_of_database_role.tf index 2495cee7f99..4fbd0a850ca 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/Of/DatabaseRole/snowflake_grants_of_database_role.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/Of/DatabaseRole/snowflake_grants_of_database_role.tf @@ -1,16 +1,12 @@ data "snowflake_current_role" "test" {} -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_database_role" "test" { name = var.database_role - database = snowflake_database.test.name + database = var.database } resource "snowflake_grant_database_role" "test" { - database_role_name = "\"${snowflake_database.test.name}\".\"${snowflake_database_role.test.name}\"" + database_role_name = snowflake_database_role.test.fully_qualified_name parent_role_name = data.snowflake_current_role.test.name } @@ -18,6 +14,6 @@ data "snowflake_grants" "test" { depends_on = [snowflake_grant_database_role.test] grants_of { - database_role = "\"${snowflake_database.test.name}\".\"${snowflake_database_role.test.name}\"" + database_role = snowflake_database_role.test.fully_qualified_name } } From ab9c335e9e6be6536c4591a6cec760f0bdafc438 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:10:15 +0100 Subject: [PATCH 22/26] Fix grants of share acceptance tests setup --- pkg/datasources/grants_acceptance_test.go | 9 ++++----- .../TestAcc_Grants/Of/Share/snowflake_grants_of_share.tf | 8 +------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 7cf58686394..3829dba93f9 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -405,19 +405,18 @@ func TestAcc_Grants_Of_ApplicationRole(t *testing.T) { // TODO [SNOW-1284394]: Unskip the test func TestAcc_Grants_Of_Share(t *testing.T) { t.Skip("TestAcc_Share are skipped") - databaseName := acc.TestClient().Ids.Alpha() - shareName := acc.TestClient().Ids.Alpha() + shareId := acc.TestClient().Ids.RandomAccountObjectIdentifier() accountId := acc.SecondaryTestClient().Account.GetAccountIdentifier(t) require.NotNil(t, accountId) configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "share": config.StringVariable(shareName), + "database": config.StringVariable(acc.TestDatabaseName), + "share": config.StringVariable(shareId.Name()), "account": config.StringVariable(accountId.FullyQualifiedName()), } - datasourceName := "data.snowflake_grants.test" + datasourceName := "data.snowflake_grants.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, diff --git a/pkg/datasources/testdata/TestAcc_Grants/Of/Share/snowflake_grants_of_share.tf b/pkg/datasources/testdata/TestAcc_Grants/Of/Share/snowflake_grants_of_share.tf index 001bb832d5b..bcaf674df58 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/Of/Share/snowflake_grants_of_share.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/Of/Share/snowflake_grants_of_share.tf @@ -1,10 +1,4 @@ -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_share" "test" { - depends_on = [snowflake_database.test] - name = var.share accounts = [var.account] } @@ -12,7 +6,7 @@ resource "snowflake_share" "test" { resource "snowflake_grant_privileges_to_share" "test" { to_share = snowflake_share.test.name privileges = ["USAGE"] - on_database = snowflake_database.test.name + on_database = var.database } data "snowflake_grants" "test" { From 81c7cbe221a2342a167ed44aaf56edf6e5280c88 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:14:41 +0100 Subject: [PATCH 23/26] Fix grants future in acceptance tests setup --- pkg/datasources/grants_acceptance_test.go | 18 ++++++++++++------ .../snowflake_grants_future_in_database.tf | 10 +++------- .../snowflake_grants_future_in_schema.tf | 15 +++------------ 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index 3829dba93f9..a5f1ce7e16f 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -406,6 +406,9 @@ func TestAcc_Grants_Of_ApplicationRole(t *testing.T) { func TestAcc_Grants_Of_Share(t *testing.T) { t.Skip("TestAcc_Share are skipped") + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + shareId := acc.TestClient().Ids.RandomAccountObjectIdentifier() accountId := acc.SecondaryTestClient().Account.GetAccountIdentifier(t) require.NotNil(t, accountId) @@ -492,9 +495,11 @@ func TestAcc_Grants_Of_Invalid_ApplicationRoleIdInvalid(t *testing.T) { } func TestAcc_Grants_FutureIn_Database(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + configVariables := config.Variables{ - "database": config.StringVariable(databaseName), + "database": config.StringVariable(acc.TestDatabaseName), } resource.Test(t, resource.TestCase{ @@ -515,11 +520,12 @@ func TestAcc_Grants_FutureIn_Database(t *testing.T) { } func TestAcc_Grants_FutureIn_Schema(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "schema": config.StringVariable(schemaName), + "database": config.StringVariable(acc.TestDatabaseName), + "schema": config.StringVariable(acc.TestSchemaName), } resource.Test(t, resource.TestCase{ diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf index 5a7b657f0e1..04d5769762c 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf @@ -1,15 +1,11 @@ data "snowflake_current_role" "test" {} -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name - privileges = ["CREATE TABLE"] + privileges = ["CREATE TABLE"] on_schema { - future_schemas_in_database = snowflake_database.test.name + future_schemas_in_database = var.database } } @@ -17,6 +13,6 @@ data "snowflake_grants" "test" { depends_on = [snowflake_grant_privileges_to_account_role.test] future_grants_in { - database = snowflake_database.test.name + database = var.database } } diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf index 5da13766973..b609502f818 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf @@ -1,22 +1,13 @@ data "snowflake_current_role" "test" {} -resource "snowflake_database" "test" { - name = var.database -} - -resource "snowflake_schema" "test" { - name = var.schema - database = snowflake_database.test.name -} - resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name - privileges = ["INSERT"] + privileges = ["INSERT"] on_schema_object { future { object_type_plural = "TABLES" - in_schema = "\"${snowflake_database.test.name}\".\"${snowflake_schema.test.name}\"" + in_schema = "\"${var.database}\".\"${var.schema}\"" } } } @@ -25,6 +16,6 @@ data "snowflake_grants" "test" { depends_on = [snowflake_grant_privileges_to_account_role.test] future_grants_in { - schema = "\"${snowflake_database.test.name}\".\"${snowflake_schema.test.name}\"" + schema = "\"${var.database}\".\"${var.schema}\"" } } From 8b1b1a91d9c196a444860ce197c719c615589b91 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:18:23 +0100 Subject: [PATCH 24/26] Fix grants future to acceptance tests setup --- pkg/datasources/grants_acceptance_test.go | 18 +++++++++++------- .../snowflake_grants_future_to_account_role.tf | 6 +----- ...snowflake_grants_future_to_database_role.tf | 14 +++++--------- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/pkg/datasources/grants_acceptance_test.go b/pkg/datasources/grants_acceptance_test.go index a5f1ce7e16f..a6ca7191ef9 100644 --- a/pkg/datasources/grants_acceptance_test.go +++ b/pkg/datasources/grants_acceptance_test.go @@ -1,7 +1,6 @@ package datasources_test import ( - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "regexp" "testing" @@ -9,6 +8,7 @@ import ( accconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/datasourcemodel" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/config" @@ -582,9 +582,11 @@ func TestAcc_Grants_FutureIn_Invalid_SchemaNameNotFullyQualified(t *testing.T) { } func TestAcc_Grants_FutureTo_AccountRole(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + configVariables := config.Variables{ - "database": config.StringVariable(databaseName), + "database": config.StringVariable(acc.TestDatabaseName), } resource.Test(t, resource.TestCase{ @@ -605,11 +607,13 @@ func TestAcc_Grants_FutureTo_AccountRole(t *testing.T) { } func TestAcc_Grants_FutureTo_DatabaseRole(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - databaseRoleName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + databaseRoleId := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() configVariables := config.Variables{ - "database": config.StringVariable(databaseName), - "database_role": config.StringVariable(databaseRoleName), + "database": config.StringVariable(acc.TestDatabaseName), + "database_role": config.StringVariable(databaseRoleId.Name()), } resource.Test(t, resource.TestCase{ diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/AccountRole/snowflake_grants_future_to_account_role.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/AccountRole/snowflake_grants_future_to_account_role.tf index 51959e6ff9a..6345b21e2d0 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/AccountRole/snowflake_grants_future_to_account_role.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/AccountRole/snowflake_grants_future_to_account_role.tf @@ -1,15 +1,11 @@ data "snowflake_current_role" "test" {} -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name privileges = ["CREATE TABLE"] on_schema { - future_schemas_in_database = snowflake_database.test.name + future_schemas_in_database = var.database } } diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf index e194007f222..42131245336 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf @@ -1,18 +1,14 @@ -resource "snowflake_database" "test" { - name = var.database -} - resource "snowflake_database_role" "test" { name = var.database_role - database = snowflake_database.test.name + database = var.database } resource "snowflake_grant_privileges_to_database_role" "test" { - database_role_name = "\"${snowflake_database.test.name}\".\"${snowflake_database_role.test.name}\"" - privileges = ["CREATE TABLE"] + database_role_name = snowflake_database_role.test.fully_qualified_name + privileges = ["CREATE TABLE"] on_schema { - future_schemas_in_database = snowflake_database.test.name + future_schemas_in_database = var.database } } @@ -20,6 +16,6 @@ data "snowflake_grants" "test" { depends_on = [snowflake_grant_privileges_to_database_role.test] future_grants_to { - database_role = "\"${snowflake_database.test.name}\".\"${snowflake_database_role.test.name}\"" + database_role = snowflake_database_role.test.fully_qualified_name } } From de7c8bc738e06b150d39675dc175549eabe42686 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:20:01 +0100 Subject: [PATCH 25/26] Run make pre-push --- .../FutureIn/Database/snowflake_grants_future_in_database.tf | 2 +- .../FutureIn/Schema/snowflake_grants_future_in_schema.tf | 2 +- .../DatabaseRole/snowflake_grants_future_to_database_role.tf | 2 +- .../TestAcc_Grants/To/Share/snowflake_grants_to_share.tf | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf index 04d5769762c..fe4ef6a1255 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Database/snowflake_grants_future_in_database.tf @@ -2,7 +2,7 @@ data "snowflake_current_role" "test" {} resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name - privileges = ["CREATE TABLE"] + privileges = ["CREATE TABLE"] on_schema { future_schemas_in_database = var.database diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf index b609502f818..747219ace6c 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureIn/Schema/snowflake_grants_future_in_schema.tf @@ -2,7 +2,7 @@ data "snowflake_current_role" "test" {} resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name - privileges = ["INSERT"] + privileges = ["INSERT"] on_schema_object { future { diff --git a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf index 42131245336..0c18f629e15 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/FutureTo/DatabaseRole/snowflake_grants_future_to_database_role.tf @@ -5,7 +5,7 @@ resource "snowflake_database_role" "test" { resource "snowflake_grant_privileges_to_database_role" "test" { database_role_name = snowflake_database_role.test.fully_qualified_name - privileges = ["CREATE TABLE"] + privileges = ["CREATE TABLE"] on_schema { future_schemas_in_database = var.database diff --git a/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf b/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf index d4028dd9b76..8e3c2de7443 100644 --- a/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf +++ b/pkg/datasources/testdata/TestAcc_Grants/To/Share/snowflake_grants_to_share.tf @@ -4,7 +4,7 @@ resource "snowflake_share" "test" { resource "snowflake_grant_privileges_to_share" "test" { to_share = snowflake_share.test.name - privileges = ["USAGE"] + privileges = ["USAGE"] on_database = var.database } From d304753e974f5f6445c494edac3a58c2e3d8a1d5 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:29:53 +0100 Subject: [PATCH 26/26] Fix unit tests --- pkg/acceptance/bettertestspoc/config/config_test.go | 3 ++- .../bettertestspoc/config/json_config_provider_test.go | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/acceptance/bettertestspoc/config/config_test.go b/pkg/acceptance/bettertestspoc/config/config_test.go index e9f4a3ec059..92e18b2b148 100644 --- a/pkg/acceptance/bettertestspoc/config/config_test.go +++ b/pkg/acceptance/bettertestspoc/config/config_test.go @@ -97,7 +97,8 @@ func Test_DatasourceFromModelPoc(t *testing.T) { t.Run("test basic", func(t *testing.T) { datasourceModel := datasourcemodel.Databases("test") expectedOutput := strings.TrimPrefix(` -data "snowflake_databases" "test" {} +data "snowflake_databases" "test" { +} `, "\n") result := config.DatasourceFromModel(t, datasourceModel) diff --git a/pkg/acceptance/bettertestspoc/config/json_config_provider_test.go b/pkg/acceptance/bettertestspoc/config/json_config_provider_test.go index 0d8850dc203..7c467eb38dd 100644 --- a/pkg/acceptance/bettertestspoc/config/json_config_provider_test.go +++ b/pkg/acceptance/bettertestspoc/config/json_config_provider_test.go @@ -91,7 +91,9 @@ func Test_JsonConfigProvider(t *testing.T) { expectedResult := `{ "data": { "snowflake_databases": { - "some_name": {} + "some_name": { + "single_attribute_workaround": "SF_TF_TEST_SINGLE_ATTRIBUTE_WORKAROUND" + } } } }`