From 41a3621952638d45194f64df65a0f1318b303bc4 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:27:38 +0100 Subject: [PATCH 01/34] part 3 starts here From ae88353fcce7af5cc210ce4cac273d12a814a515 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:30:32 +0100 Subject: [PATCH 02/34] Fix masking policies datasource acceptance test setup --- pkg/datasources/masking_policies_acceptance_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/datasources/masking_policies_acceptance_test.go b/pkg/datasources/masking_policies_acceptance_test.go index 495e6ab61da..3e82b84e648 100644 --- a/pkg/datasources/masking_policies_acceptance_test.go +++ b/pkg/datasources/masking_policies_acceptance_test.go @@ -6,21 +6,25 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" - tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_MaskingPolicies(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() body := "case when current_role() in ('ANALYST') then 'true' else 'false' end" @@ -96,6 +100,9 @@ func TestAcc_MaskingPolicies(t *testing.T) { } func TestAcc_MaskingPolicies_Filtering(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := random.AlphaN(4) idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) From 9c7ef88a0b0d20b9e1183ffa51859f514a84cf2b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:33:57 +0100 Subject: [PATCH 03/34] Fix materialized views datasource acceptance test setup --- .../materialized_views_acceptance_test.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/datasources/materialized_views_acceptance_test.go b/pkg/datasources/materialized_views_acceptance_test.go index bf1e7524beb..e04f090f670 100644 --- a/pkg/datasources/materialized_views_acceptance_test.go +++ b/pkg/datasources/materialized_views_acceptance_test.go @@ -6,13 +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_MaterializedViews(t *testing.T) { - tableName := acc.TestClient().Ids.Alpha() - viewName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + viewId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -23,20 +28,20 @@ func TestAcc_MaterializedViews(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: materializedViews(acc.TestWarehouseName, acc.TestDatabaseName, acc.TestSchemaName, tableName, viewName), + Config: materializedViews(acc.TestWarehouseName, tableId, viewId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_materialized_views.v", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("data.snowflake_materialized_views.v", "schema", acc.TestSchemaName), resource.TestCheckResourceAttrSet("data.snowflake_materialized_views.v", "materialized_views.#"), resource.TestCheckResourceAttr("data.snowflake_materialized_views.v", "materialized_views.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_materialized_views.v", "materialized_views.0.name", viewName), + resource.TestCheckResourceAttr("data.snowflake_materialized_views.v", "materialized_views.0.name", viewId.Name()), ), }, }, }) } -func materializedViews(warehouseName string, databaseName string, schemaName string, tableName string, viewName string) string { +func materializedViews(warehouseName string, tableId sdk.SchemaObjectIdentifier, viewId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource snowflake_table "t"{ name = "%[4]v" @@ -64,5 +69,5 @@ func materializedViews(warehouseName string, databaseName string, schemaName str schema = "%[3]s" depends_on = [snowflake_materialized_view.v] } - `, warehouseName, databaseName, schemaName, tableName, viewName) + `, warehouseName, tableId.DatabaseName(), tableId.SchemaName(), tableId.Name(), viewId.Name()) } From b5e552bec2c741c90d754f342d330459fb01635a Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:36:14 +0100 Subject: [PATCH 04/34] Fix network policies datasource acceptance test setup --- pkg/datasources/network_policies_acceptance_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/datasources/network_policies_acceptance_test.go b/pkg/datasources/network_policies_acceptance_test.go index 57b58582903..05970d2379e 100644 --- a/pkg/datasources/network_policies_acceptance_test.go +++ b/pkg/datasources/network_policies_acceptance_test.go @@ -7,13 +7,18 @@ import ( "testing" 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/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_NetworkPolicies_Complete(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() id2 := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() From 8eb5296b30601ac3e04610cff2645e2bcd38b30a Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:39:54 +0100 Subject: [PATCH 05/34] Add network policies datasource model builder --- .../gen/datasource_schema_def.go | 4 + .../network_policies_model_gen.go | 93 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/network_policies_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 2674d03810e..841c01f54fc 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -46,4 +46,8 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ name: "Grants", schema: datasources.Grants().Schema, }, + { + name: "NetworkPolicies", + schema: datasources.NetworkPolicies().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/network_policies_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/network_policies_model_gen.go new file mode 100644 index 00000000000..1722a655ab8 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/network_policies_model_gen.go @@ -0,0 +1,93 @@ +// 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 NetworkPoliciesModel struct { + Like tfconfig.Variable `json:"like,omitempty"` + NetworkPolicies tfconfig.Variable `json:"network_policies,omitempty"` + WithDescribe tfconfig.Variable `json:"with_describe,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func NetworkPolicies( + datasourceName string, +) *NetworkPoliciesModel { + n := &NetworkPoliciesModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.NetworkPolicies)} + return n +} + +func NetworkPoliciesWithDefaultMeta() *NetworkPoliciesModel { + n := &NetworkPoliciesModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.NetworkPolicies)} + return n +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (n *NetworkPoliciesModel) MarshalJSON() ([]byte, error) { + type Alias NetworkPoliciesModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` + }{ + Alias: (*Alias)(n), + DependsOn: n.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, + }) +} + +func (n *NetworkPoliciesModel) WithDependsOn(values ...string) *NetworkPoliciesModel { + n.SetDependsOn(values...) + return n +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (n *NetworkPoliciesModel) WithLike(like string) *NetworkPoliciesModel { + n.Like = tfconfig.StringVariable(like) + return n +} + +// network_policies attribute type is not yet supported, so WithNetworkPolicies can't be generated + +func (n *NetworkPoliciesModel) WithWithDescribe(withDescribe bool) *NetworkPoliciesModel { + n.WithDescribe = tfconfig.BoolVariable(withDescribe) + return n +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (n *NetworkPoliciesModel) WithLikeValue(value tfconfig.Variable) *NetworkPoliciesModel { + n.Like = value + return n +} + +func (n *NetworkPoliciesModel) WithNetworkPoliciesValue(value tfconfig.Variable) *NetworkPoliciesModel { + n.NetworkPolicies = value + return n +} + +func (n *NetworkPoliciesModel) WithWithDescribeValue(value tfconfig.Variable) *NetworkPoliciesModel { + n.WithDescribe = value + return n +} From 6e3b559681bc5207f36628c3cd1e4cf0db5f25df Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 13:45:12 +0100 Subject: [PATCH 06/34] Add network policy resource model builder --- .../resourceassert/gen/resource_schema_def.go | 4 + .../config/model/network_policy_model_gen.go | 131 ++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/network_policy_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go index e5451d9c670..7491bfb74ed 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -177,4 +177,8 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "ManagedAccount", schema: resources.ManagedAccount().Schema, }, + { + name: "NetworkPolicy", + schema: resources.NetworkPolicy().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/network_policy_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/network_policy_model_gen.go new file mode 100644 index 00000000000..2ade3d46056 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/network_policy_model_gen.go @@ -0,0 +1,131 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type NetworkPolicyModel struct { + AllowedIpList tfconfig.Variable `json:"allowed_ip_list,omitempty"` + AllowedNetworkRuleList tfconfig.Variable `json:"allowed_network_rule_list,omitempty"` + BlockedIpList tfconfig.Variable `json:"blocked_ip_list,omitempty"` + BlockedNetworkRuleList tfconfig.Variable `json:"blocked_network_rule_list,omitempty"` + Comment tfconfig.Variable `json:"comment,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func NetworkPolicy( + resourceName string, + name string, +) *NetworkPolicyModel { + n := &NetworkPolicyModel{ResourceModelMeta: config.Meta(resourceName, resources.NetworkPolicy)} + n.WithName(name) + return n +} + +func NetworkPolicyWithDefaultMeta( + name string, +) *NetworkPolicyModel { + n := &NetworkPolicyModel{ResourceModelMeta: config.DefaultMeta(resources.NetworkPolicy)} + n.WithName(name) + return n +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (n *NetworkPolicyModel) MarshalJSON() ([]byte, error) { + type Alias NetworkPolicyModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(n), + DependsOn: n.DependsOn(), + }) +} + +func (n *NetworkPolicyModel) WithDependsOn(values ...string) *NetworkPolicyModel { + n.SetDependsOn(values...) + return n +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +// allowed_ip_list attribute type is not yet supported, so WithAllowedIpList can't be generated + +// allowed_network_rule_list attribute type is not yet supported, so WithAllowedNetworkRuleList can't be generated + +// blocked_ip_list attribute type is not yet supported, so WithBlockedIpList can't be generated + +// blocked_network_rule_list attribute type is not yet supported, so WithBlockedNetworkRuleList can't be generated + +func (n *NetworkPolicyModel) WithComment(comment string) *NetworkPolicyModel { + n.Comment = tfconfig.StringVariable(comment) + return n +} + +func (n *NetworkPolicyModel) WithFullyQualifiedName(fullyQualifiedName string) *NetworkPolicyModel { + n.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return n +} + +func (n *NetworkPolicyModel) WithName(name string) *NetworkPolicyModel { + n.Name = tfconfig.StringVariable(name) + return n +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (n *NetworkPolicyModel) WithAllowedIpListValue(value tfconfig.Variable) *NetworkPolicyModel { + n.AllowedIpList = value + return n +} + +func (n *NetworkPolicyModel) WithAllowedNetworkRuleListValue(value tfconfig.Variable) *NetworkPolicyModel { + n.AllowedNetworkRuleList = value + return n +} + +func (n *NetworkPolicyModel) WithBlockedIpListValue(value tfconfig.Variable) *NetworkPolicyModel { + n.BlockedIpList = value + return n +} + +func (n *NetworkPolicyModel) WithBlockedNetworkRuleListValue(value tfconfig.Variable) *NetworkPolicyModel { + n.BlockedNetworkRuleList = value + return n +} + +func (n *NetworkPolicyModel) WithCommentValue(value tfconfig.Variable) *NetworkPolicyModel { + n.Comment = value + return n +} + +func (n *NetworkPolicyModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *NetworkPolicyModel { + n.FullyQualifiedName = value + return n +} + +func (n *NetworkPolicyModel) WithNameValue(value tfconfig.Variable) *NetworkPolicyModel { + n.Name = value + return n +} From 2b9459f56ba40c28a62539bb26012709512b4470 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 14:07:01 +0100 Subject: [PATCH 07/34] Use builders for network policies datasource test --- .../config/model/network_policy_model_ext.go | 44 ++++ .../network_policies_acceptance_test.go | 203 +++++++----------- 2 files changed, 126 insertions(+), 121 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/model/network_policy_model_ext.go diff --git a/pkg/acceptance/bettertestspoc/config/model/network_policy_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/network_policy_model_ext.go new file mode 100644 index 00000000000..71c14d1ce4e --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/network_policy_model_ext.go @@ -0,0 +1,44 @@ +package model + +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/collections" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) + +func (n *NetworkPolicyModel) WithAllowedNetworkRules(rules ...sdk.SchemaObjectIdentifier) *NetworkPolicyModel { + return n.WithAllowedNetworkRuleListValue( + tfconfig.SetVariable( + collections.Map(rules, func(rule sdk.SchemaObjectIdentifier) tfconfig.Variable { + return tfconfig.StringVariable(rule.FullyQualifiedName()) + })..., + ), + ) +} + +func (n *NetworkPolicyModel) WithBlockedNetworkRules(rules ...sdk.SchemaObjectIdentifier) *NetworkPolicyModel { + return n.WithBlockedNetworkRuleListValue( + tfconfig.SetVariable( + collections.Map(rules, func(rule sdk.SchemaObjectIdentifier) tfconfig.Variable { + return tfconfig.StringVariable(rule.FullyQualifiedName()) + })..., + ), + ) +} + +func (n *NetworkPolicyModel) WithAllowedIps(ips ...string) *NetworkPolicyModel { + return n.WithAllowedIpListValue( + tfconfig.SetVariable( + collections.Map(ips, func(ip string) tfconfig.Variable { return tfconfig.StringVariable(ip) })..., + ), + ) +} + +func (n *NetworkPolicyModel) WithBlockedIps(ips ...string) *NetworkPolicyModel { + return n.WithBlockedIpListValue( + tfconfig.SetVariable( + collections.Map(ips, func(ip string) tfconfig.Variable { return tfconfig.StringVariable(ip) })..., + ), + ) +} diff --git a/pkg/datasources/network_policies_acceptance_test.go b/pkg/datasources/network_policies_acceptance_test.go index 05970d2379e..889ce847543 100644 --- a/pkg/datasources/network_policies_acceptance_test.go +++ b/pkg/datasources/network_policies_acceptance_test.go @@ -1,13 +1,14 @@ package datasources_test import ( - "encoding/json" - "fmt" "regexp" "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/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" @@ -28,6 +29,29 @@ func TestAcc_NetworkPolicies_Complete(t *testing.T) { blockedNetworkRuleId1 := acc.TestClient().Ids.RandomSchemaObjectIdentifier() blockedNetworkRuleId2 := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + networkPolicyModel1 := model.NetworkPolicy("test", id.Name()). + WithComment(comment). + WithAllowedNetworkRules(allowedNetworkRuleId1, allowedNetworkRuleId2). + WithBlockedNetworkRules(blockedNetworkRuleId1, blockedNetworkRuleId2). + WithAllowedIps("1.1.1.1", "2.2.2.2"). + WithBlockedIps("3.3.3.3", "4.4.4.4") + networkPolicyModel2 := model.NetworkPolicy("test2", id2.Name()) + networkPoliciesModel := datasourcemodel.NetworkPolicies("test"). + WithLike(id.Name()). + WithDependsOn(networkPolicyModel1.ResourceReference(), networkPolicyModel2.ResourceReference()) + networkPoliciesModel2WithDescribe := datasourcemodel.NetworkPolicies("test"). + WithWithDescribe(true). + WithLike(id2.Name()). + WithDependsOn(networkPolicyModel1.ResourceReference(), networkPolicyModel2.ResourceReference()) + networkPoliciesModel1WithDescribe := datasourcemodel.NetworkPolicies("test"). + WithWithDescribe(true). + WithLike(id.Name()). + WithDependsOn(networkPolicyModel1.ResourceReference(), networkPolicyModel2.ResourceReference()) + networkPoliciesModel1WithoutDescribe := datasourcemodel.NetworkPolicies("test"). + WithWithDescribe(false). + WithLike(id.Name()). + WithDependsOn(networkPolicyModel1.ResourceReference(), networkPolicyModel2.ResourceReference()) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -43,144 +67,81 @@ func TestAcc_NetworkPolicies_Complete(t *testing.T) { acc.TestClient().NetworkRule.CreateWithIdentifier(t, blockedNetworkRuleId1) acc.TestClient().NetworkRule.CreateWithIdentifier(t, blockedNetworkRuleId2) }, - Config: networkPolicyConfigComplete( - id.Name(), - []string{allowedNetworkRuleId1.FullyQualifiedName(), allowedNetworkRuleId2.FullyQualifiedName()}, - []string{blockedNetworkRuleId1.FullyQualifiedName(), blockedNetworkRuleId2.FullyQualifiedName()}, - []string{"1.1.1.1", "2.2.2.2"}, - []string{"3.3.3.3", "4.4.4.4"}, - comment, - id2.Name(), - ), + Config: accconfig.FromModels(t, networkPolicyModel1, networkPolicyModel2, networkPoliciesModel), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_ip_list", "2"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_ip_list", "2"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_network_rules", "2"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_network_rules", "2"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.comment", comment), - - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_ip_list"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_ip_list"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_network_rule_list"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_network_rule_list"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.comment", comment), + + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_ip_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_ip_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_network_rule_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_network_rule_list"), ), }, { - Config: networkPolicyConfigBasic(id.Name(), true), + Config: accconfig.FromModels(t, networkPolicyModel1, networkPolicyModel2, networkPoliciesModel1WithDescribe), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.comment", ""), - - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.#", "1"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_ip_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_ip_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_network_rule_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_network_rule_list"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.comment", comment), + + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_ip_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_ip_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_network_rule_list"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_network_rule_list"), ), }, { - Config: networkPolicyConfigBasic(id2.Name(), true), + Config: accconfig.FromModels(t, networkPolicyModel1, networkPolicyModel2, networkPoliciesModel2WithDescribe), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.name", id2.Name()), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.comment", ""), - - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.#", "1"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_ip_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_ip_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.allowed_network_rule_list"), - resource.TestCheckNoResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.0.blocked_network_rule_list"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.name", id2.Name()), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_ip_list", "0"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_ip_list", "0"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_network_rules", "0"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_network_rules", "0"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.comment", ""), + + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.#", "1"), + resource.TestCheckNoResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_ip_list"), + resource.TestCheckNoResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_ip_list"), + resource.TestCheckNoResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.allowed_network_rule_list"), + resource.TestCheckNoResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.0.blocked_network_rule_list"), ), }, { - Config: networkPolicyConfigBasic(id.Name(), false), + Config: accconfig.FromModels(t, networkPolicyModel1, networkPolicyModel2, networkPoliciesModel1WithoutDescribe), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_network_policies.test", "network_policies.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_ip_list", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_allowed_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.entries_in_blocked_network_rules", "0"), - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.show_output.0.comment", ""), - - resource.TestCheckResourceAttr("data.snowflake_network_policies.test", "network_policies.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.#", "1"), + resource.TestCheckResourceAttrSet(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_ip_list", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_allowed_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.entries_in_blocked_network_rules", "2"), + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.show_output.0.comment", comment), + + resource.TestCheckResourceAttr(networkPoliciesModel.DatasourceReference(), "network_policies.0.describe_output.#", "0"), ), }, }, }) } -func networkPolicyConfigBasic(name string, withDescribe bool) string { - return fmt.Sprintf(` - resource "snowflake_network_policy" "test" { - name = "%v" - } - - data "snowflake_network_policies" "test" { - with_describe = %t - like = snowflake_network_policy.test.name - } -`, name, withDescribe) -} - -func networkPolicyConfigComplete( - name string, - allowedRuleList []string, - blockedRuleList []string, - allowedIpList []string, - blockedIpList []string, - comment string, - name2 string, -) string { - allowedRuleListBytes, _ := json.Marshal(allowedRuleList) - blockedRuleListBytes, _ := json.Marshal(blockedRuleList) - allowedIpListBytes, _ := json.Marshal(allowedIpList) - blockedIpListBytes, _ := json.Marshal(blockedIpList) - - return fmt.Sprintf(` - resource "snowflake_network_policy" "test" { - name = "%[1]s" - allowed_network_rule_list = %[2]s - blocked_network_rule_list = %[3]s - allowed_ip_list = %[4]s - blocked_ip_list = %[5]s - comment = "%[6]s" - } - - resource "snowflake_network_policy" "test2" { - name = "%[7]s" - } - - data "snowflake_network_policies" "test" { - like = snowflake_network_policy.test.name - } -`, - name, - string(allowedRuleListBytes), - string(blockedRuleListBytes), - string(allowedIpListBytes), - string(blockedIpListBytes), - comment, - name2, - ) -} - func TestAcc_NetworkPolicies_NetworkPolicyNotFound_WithPostConditions(t *testing.T) { resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, From d01b8c8fcb39e70ed8b82380832ab63568d1c75e Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 14:14:25 +0100 Subject: [PATCH 08/34] Fix parameters datasource acceptance tests setup --- pkg/datasources/parameters_acceptance_test.go | 60 +++++++------------ 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/pkg/datasources/parameters_acceptance_test.go b/pkg/datasources/parameters_acceptance_test.go index 9fbef94d26e..423e29efa69 100644 --- a/pkg/datasources/parameters_acceptance_test.go +++ b/pkg/datasources/parameters_acceptance_test.go @@ -6,6 +6,8 @@ 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" ) @@ -33,7 +35,11 @@ func TestAcc_ParametersOnAccount(t *testing.T) { } func TestAcc_ParametersOnSession(t *testing.T) { - userName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + userId := acc.TestClient().Context.CurrentUser(t) + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -43,12 +49,12 @@ func TestAcc_ParametersOnSession(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: parametersConfigOnSession(userName), + Config: parametersConfigOnSession(userId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("data.snowflake_parameters.p", "parameters.#"), resource.TestCheckResourceAttrSet("data.snowflake_parameters.p", "parameters.0.key"), resource.TestCheckResourceAttrSet("data.snowflake_parameters.p", "parameters.0.value"), - resource.TestCheckResourceAttr("data.snowflake_parameters.p", "user", userName), + resource.TestCheckResourceAttr("data.snowflake_parameters.p", "user", userId.Name()), ), }, }, @@ -56,7 +62,11 @@ func TestAcc_ParametersOnSession(t *testing.T) { } func TestAcc_ParametersOnObject(t *testing.T) { - dbName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + dbId := acc.TestClient().Ids.DatabaseId() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -66,37 +76,18 @@ func TestAcc_ParametersOnObject(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: parametersConfigOnObject(dbName), + Config: parametersConfigOnObject(dbId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("data.snowflake_parameters.p", "parameters.#"), resource.TestCheckResourceAttrSet("data.snowflake_parameters.p", "parameters.0.key"), resource.TestCheckResourceAttr("data.snowflake_parameters.p", "object_type", "DATABASE"), - resource.TestCheckResourceAttr("data.snowflake_parameters.p", "object_name", dbName), + resource.TestCheckResourceAttr("data.snowflake_parameters.p", "object_name", dbId.Name()), ), }, }, }) } -// proves https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/2353 is fixed -func TestAcc_Parameters_TransactionAbortOnErrorCanBeSet(t *testing.T) { - resource.Test(t, resource.TestCase{ - ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, - PreCheck: func() { acc.TestAccPreCheck(t) }, - TerraformVersionChecks: []tfversion.TerraformVersionCheck{ - tfversion.RequireAbove(tfversion.Version1_5_0), - }, - Steps: []resource.TestStep{ - { - Config: `resource "snowflake_account_parameter" "test" { - key = "TRANSACTION_ABORT_ON_ERROR" - value = "true" - }`, - }, - }, - }) -} - func parametersConfigOnAccount() string { return `data "snowflake_parameters" "p" { parameter_type = "ACCOUNT" @@ -104,28 +95,21 @@ func parametersConfigOnAccount() string { }` } -func parametersConfigOnSession(user string) string { +func parametersConfigOnSession(userId sdk.AccountObjectIdentifier) string { s := ` - resource "snowflake_user" "u" { - name = "%s" - } - data "snowflake_parameters" "p" { parameter_type = "SESSION" - user = snowflake_user.u.name + user = "%s" }` - return fmt.Sprintf(s, user) + return fmt.Sprintf(s, userId.Name()) } -func parametersConfigOnObject(name string) string { +func parametersConfigOnObject(databaseId sdk.AccountObjectIdentifier) string { stmt := ` - resource "snowflake_database" "d" { - name = "%s" - } data "snowflake_parameters" "p" { parameter_type = "OBJECT" object_type = "DATABASE" - object_name = snowflake_database.d.name + object_name = "%s" }` - return fmt.Sprintf(stmt, name) + return fmt.Sprintf(stmt, databaseId.Name()) } From da8d7bd0732de5e22fcca7a24b1097742a4278d2 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 14:48:13 +0100 Subject: [PATCH 09/34] Fix pipes datasource acceptance tests setup --- pkg/datasources/pipes_acceptance_test.go | 72 +++++++++++------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/pkg/datasources/pipes_acceptance_test.go b/pkg/datasources/pipes_acceptance_test.go index 34a893a9c1a..00e7146b13c 100644 --- a/pkg/datasources/pipes_acceptance_test.go +++ b/pkg/datasources/pipes_acceptance_test.go @@ -6,14 +6,20 @@ 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_Pipes(t *testing.T) { - databaseName := acc.TestClient().Ids.Alpha() - schemaName := acc.TestClient().Ids.Alpha() - pipeName := acc.TestClient().Ids.Alpha() + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + + tableId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + stageId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + pipeId := acc.TestClient().Ids.RandomSchemaObjectIdentifier() + resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -23,36 +29,25 @@ func TestAcc_Pipes(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: pipes(databaseName, schemaName, pipeName), + Config: pipes(tableId, stageId, pipeId), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_pipes.t", "database", databaseName), - resource.TestCheckResourceAttr("data.snowflake_pipes.t", "schema", schemaName), + resource.TestCheckResourceAttr("data.snowflake_pipes.t", "database", acc.TestDatabaseName), + resource.TestCheckResourceAttr("data.snowflake_pipes.t", "schema", acc.TestSchemaName), resource.TestCheckResourceAttrSet("data.snowflake_pipes.t", "pipes.#"), resource.TestCheckResourceAttr("data.snowflake_pipes.t", "pipes.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_pipes.t", "pipes.0.name", pipeName), + resource.TestCheckResourceAttr("data.snowflake_pipes.t", "pipes.0.name", pipeId.Name()), ), }, }, }) } -func pipes(databaseName string, schemaName string, pipeName string) string { - s := ` -resource "snowflake_database" "test" { - name = "%v" - comment = "Terraform acceptance test" -} - -resource "snowflake_schema" "test" { - name = "%v" - database = snowflake_database.test.name - comment = "Terraform acceptance test" -} - +func pipes(tableId sdk.SchemaObjectIdentifier, stageId sdk.SchemaObjectIdentifier, pipeId sdk.SchemaObjectIdentifier) string { + return fmt.Sprintf(` resource "snowflake_table" "test" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = snowflake_schema.test.name + database = "%[1]s" + schema = "%[2]s" + name = "%[3]s" column { name = "id" type = "NUMBER(5,0)" @@ -64,30 +59,27 @@ resource "snowflake_table" "test" { } resource "snowflake_stage" "test" { - name = snowflake_schema.test.name - database = snowflake_database.test.name - schema = snowflake_schema.test.name - comment = "Terraform acceptance test" -} - -data snowflake_pipes "t" { - database = snowflake_pipe.test.database - schema = snowflake_pipe.test.schema - depends_on = [snowflake_pipe.test] + database = "%[1]s" + schema = "%[2]s" + name = "%[4]s" } resource "snowflake_pipe" "test" { - database = snowflake_database.test.name - schema = snowflake_schema.test.name - name = "%v" + database = "%[1]s" + schema = "%[2]s" + name = "%[5]s" comment = "Terraform acceptance test" copy_statement = < Date: Fri, 14 Mar 2025 14:49:07 +0100 Subject: [PATCH 10/34] Fix procedures datasource acceptance tests setup --- pkg/datasources/procedures_acceptance_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/datasources/procedures_acceptance_test.go b/pkg/datasources/procedures_acceptance_test.go index cf055e5850f..4fddb73ced8 100644 --- a/pkg/datasources/procedures_acceptance_test.go +++ b/pkg/datasources/procedures_acceptance_test.go @@ -4,13 +4,12 @@ import ( "fmt" "testing" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testdatatypes" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" From 22a9ae08c664a5689ae0f7ccc5f52f1838dafef0 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 14:56:18 +0100 Subject: [PATCH 11/34] Fix resource monitors datasource acceptance tests setup --- .../gen/datasource_schema_def.go | 4 + .../resource_monitors_model_gen.go | 82 +++++++++++++++++++ .../resource_monitors_acceptance_test.go | 57 ++++++------- 3 files changed, 113 insertions(+), 30 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/resource_monitors_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 841c01f54fc..1dc3628e5ee 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -50,4 +50,8 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ name: "NetworkPolicies", schema: datasources.NetworkPolicies().Schema, }, + { + name: "ResourceMonitors", + schema: datasources.ResourceMonitors().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/resource_monitors_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/resource_monitors_model_gen.go new file mode 100644 index 00000000000..77580e68f08 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/resource_monitors_model_gen.go @@ -0,0 +1,82 @@ +// 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 ResourceMonitorsModel struct { + Like tfconfig.Variable `json:"like,omitempty"` + ResourceMonitors tfconfig.Variable `json:"resource_monitors,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func ResourceMonitors( + datasourceName string, +) *ResourceMonitorsModel { + r := &ResourceMonitorsModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.ResourceMonitors)} + return r +} + +func ResourceMonitorsWithDefaultMeta() *ResourceMonitorsModel { + r := &ResourceMonitorsModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.ResourceMonitors)} + return r +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (r *ResourceMonitorsModel) MarshalJSON() ([]byte, error) { + type Alias ResourceMonitorsModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` + }{ + Alias: (*Alias)(r), + DependsOn: r.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, + }) +} + +func (r *ResourceMonitorsModel) WithDependsOn(values ...string) *ResourceMonitorsModel { + r.SetDependsOn(values...) + return r +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (r *ResourceMonitorsModel) WithLike(like string) *ResourceMonitorsModel { + r.Like = tfconfig.StringVariable(like) + return r +} + +// resource_monitors attribute type is not yet supported, so WithResourceMonitors can't be generated + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (r *ResourceMonitorsModel) WithLikeValue(value tfconfig.Variable) *ResourceMonitorsModel { + r.Like = value + return r +} + +func (r *ResourceMonitorsModel) WithResourceMonitorsValue(value tfconfig.Variable) *ResourceMonitorsModel { + r.ResourceMonitors = value + return r +} diff --git a/pkg/datasources/resource_monitors_acceptance_test.go b/pkg/datasources/resource_monitors_acceptance_test.go index 7f329e674d5..600960c9180 100644 --- a/pkg/datasources/resource_monitors_acceptance_test.go +++ b/pkg/datasources/resource_monitors_acceptance_test.go @@ -1,23 +1,39 @@ package datasources_test import ( - "fmt" "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/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" + "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" - - acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_ResourceMonitors(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := "data_source_resource_monitor_" - resourceMonitorName := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) - resourceMonitorName2 := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) + resourceMonitorId := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) + resourceMonitorId2 := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) + + resourceMonitorModel1 := model.ResourceMonitor("rm1", resourceMonitorId.Name()). + WithCreditQuota(5) + resourceMonitorModel2 := model.ResourceMonitor("rm2", resourceMonitorId2.Name()). + WithCreditQuota(15) + resourceMonitorsModelLikePrefix := datasourcemodel.ResourceMonitors("test"). + WithLike(prefix+"%"). + WithDependsOn(resourceMonitorModel1.ResourceReference(), resourceMonitorModel2.ResourceReference()) + resourceMonitorsModelLikeFirstMonitorName := datasourcemodel.ResourceMonitors("test"). + WithLike(resourceMonitorId.Name()). + WithDependsOn(resourceMonitorModel1.ResourceReference(), resourceMonitorModel2.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -28,18 +44,18 @@ func TestAcc_ResourceMonitors(t *testing.T) { Steps: []resource.TestStep{ // Filter by prefix pattern (expect 2 items) { - Config: resourceMonitors(resourceMonitorName.Name(), resourceMonitorName2.Name(), prefix+"%"), + Config: accconfig.FromModels(t, resourceMonitorModel1, resourceMonitorModel2, resourceMonitorsModelLikePrefix), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_resource_monitors.test", "resource_monitors.#", "2"), + resource.TestCheckResourceAttr(resourceMonitorsModelLikePrefix.DatasourceReference(), "resource_monitors.#", "2"), ), }, // Filter by exact name (expect 1 item) { - Config: resourceMonitors(resourceMonitorName.Name(), resourceMonitorName2.Name(), resourceMonitorName.Name()), + Config: accconfig.FromModels(t, resourceMonitorModel1, resourceMonitorModel2, resourceMonitorsModelLikeFirstMonitorName), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr("data.snowflake_resource_monitors.test", "resource_monitors.#", "1")), + assert.Check(resource.TestCheckResourceAttr(resourceMonitorsModelLikeFirstMonitorName.DatasourceReference(), "resource_monitors.#", "1")), resourceshowoutputassert.ResourceMonitorDatasourceShowOutput(t, "snowflake_resource_monitors.test"). - HasName(resourceMonitorName.Name()). + HasName(resourceMonitorId.Name()). HasCreditQuota(5). HasUsedCredits(0). HasRemainingCredits(5). @@ -57,22 +73,3 @@ func TestAcc_ResourceMonitors(t *testing.T) { }, }) } - -func resourceMonitors(resourceMonitorName, resourceMonitorName2, searchPrefix string) string { - return fmt.Sprintf(` - resource "snowflake_resource_monitor" "rm1" { - name = "%s" - credit_quota = 5 - } - - resource "snowflake_resource_monitor" "rm2" { - name = "%s" - credit_quota = 15 - } - - data "snowflake_resource_monitors" "test" { - depends_on = [ snowflake_resource_monitor.rm1, snowflake_resource_monitor.rm2 ] - like = "%s" - } - `, resourceMonitorName, resourceMonitorName2, searchPrefix) -} From 84f4c65001ac322a1eb2b2cb1a10d8d0017ea8bf Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 14:58:33 +0100 Subject: [PATCH 12/34] Fix row access policies datasource acceptance tests setup --- .../row_access_policies_acceptance_test.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/datasources/row_access_policies_acceptance_test.go b/pkg/datasources/row_access_policies_acceptance_test.go index 7af1a230e1f..8bb9cc179a1 100644 --- a/pkg/datasources/row_access_policies_acceptance_test.go +++ b/pkg/datasources/row_access_policies_acceptance_test.go @@ -6,21 +6,25 @@ import ( "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" + tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" - tfconfig "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAcc_RowAccessPolicies(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() body := "case when current_role() in ('ANALYST') then true else false end" @@ -96,6 +100,9 @@ func TestAcc_RowAccessPolicies(t *testing.T) { } func TestAcc_RowAccessPolicies_Filtering(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := random.AlphaN(4) idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) From a87ee4ffe15421111a16b0a8fbf9b9117735e809 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 15:00:53 +0100 Subject: [PATCH 13/34] Generate schemas datasource model builder --- .../gen/datasource_schema_def.go | 4 + .../datasourcemodel/schemas_model_gen.go | 131 ++++++++++++++++++ pkg/datasources/schemas_acceptance_test.go | 4 + 3 files changed, 139 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_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 1dc3628e5ee..7943054b7e0 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -54,4 +54,8 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ name: "ResourceMonitors", schema: datasources.ResourceMonitors().Schema, }, + { + name: "Schemas", + schema: datasources.Schemas().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_gen.go new file mode 100644 index 00000000000..ec50a7e2c54 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_gen.go @@ -0,0 +1,131 @@ +// 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 SchemasModel struct { + In tfconfig.Variable `json:"in,omitempty"` + Like tfconfig.Variable `json:"like,omitempty"` + Limit tfconfig.Variable `json:"limit,omitempty"` + Schemas tfconfig.Variable `json:"schemas,omitempty"` + StartsWith tfconfig.Variable `json:"starts_with,omitempty"` + WithDescribe tfconfig.Variable `json:"with_describe,omitempty"` + WithParameters tfconfig.Variable `json:"with_parameters,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func Schemas( + datasourceName string, +) *SchemasModel { + s := &SchemasModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.Schemas)} + return s +} + +func SchemasWithDefaultMeta() *SchemasModel { + s := &SchemasModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.Schemas)} + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *SchemasModel) MarshalJSON() ([]byte, error) { + type Alias SchemasModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, + }) +} + +func (s *SchemasModel) WithDependsOn(values ...string) *SchemasModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +// in attribute type is not yet supported, so WithIn can't be generated + +func (s *SchemasModel) WithLike(like string) *SchemasModel { + s.Like = tfconfig.StringVariable(like) + return s +} + +// limit attribute type is not yet supported, so WithLimit can't be generated + +// schemas attribute type is not yet supported, so WithSchemas can't be generated + +func (s *SchemasModel) WithStartsWith(startsWith string) *SchemasModel { + s.StartsWith = tfconfig.StringVariable(startsWith) + return s +} + +func (s *SchemasModel) WithWithDescribe(withDescribe bool) *SchemasModel { + s.WithDescribe = tfconfig.BoolVariable(withDescribe) + return s +} + +func (s *SchemasModel) WithWithParameters(withParameters bool) *SchemasModel { + s.WithParameters = tfconfig.BoolVariable(withParameters) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *SchemasModel) WithInValue(value tfconfig.Variable) *SchemasModel { + s.In = value + return s +} + +func (s *SchemasModel) WithLikeValue(value tfconfig.Variable) *SchemasModel { + s.Like = value + return s +} + +func (s *SchemasModel) WithLimitValue(value tfconfig.Variable) *SchemasModel { + s.Limit = value + return s +} + +func (s *SchemasModel) WithSchemasValue(value tfconfig.Variable) *SchemasModel { + s.Schemas = value + return s +} + +func (s *SchemasModel) WithStartsWithValue(value tfconfig.Variable) *SchemasModel { + s.StartsWith = value + return s +} + +func (s *SchemasModel) WithWithDescribeValue(value tfconfig.Variable) *SchemasModel { + s.WithDescribe = value + return s +} + +func (s *SchemasModel) WithWithParametersValue(value tfconfig.Variable) *SchemasModel { + s.WithParameters = value + return s +} diff --git a/pkg/datasources/schemas_acceptance_test.go b/pkg/datasources/schemas_acceptance_test.go index cdcc14b3404..99def706a69 100644 --- a/pkg/datasources/schemas_acceptance_test.go +++ b/pkg/datasources/schemas_acceptance_test.go @@ -18,6 +18,8 @@ import ( func TestAcc_Schemas_Complete(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() databaseId := acc.TestClient().Ids.DatabaseId() @@ -101,6 +103,8 @@ func TestAcc_Schemas_Complete(t *testing.T) { func TestAcc_Schemas_Filtering(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := random.AlphaN(4) idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) From aef10b169983c94f743660c3d5365710e61d3c72 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 15:26:21 +0100 Subject: [PATCH 14/34] Improve schemas datasource acceptance test setup --- .../datasourcemodel/schemas_model_ext.go | 11 ++ pkg/datasources/schemas_acceptance_test.go | 138 ++++++++++-------- pkg/datasources/special_values.go | 6 + .../TestAcc_Schemas/optionals_set/test.tf | 27 ---- .../optionals_set/variables.tf | 11 -- .../TestAcc_Schemas/optionals_unset/test.tf | 18 --- .../optionals_unset/variables.tf | 11 -- 7 files changed, 96 insertions(+), 126 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go create mode 100644 pkg/datasources/special_values.go delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go new file mode 100644 index 00000000000..234d45fce6e --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go @@ -0,0 +1,11 @@ +package datasourcemodel + +import tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + +func (s *SchemasModel) WithLimit(rows int) *SchemasModel { + return s.WithLimitValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "rows": tfconfig.IntegerVariable(rows), + }), + ) +} diff --git a/pkg/datasources/schemas_acceptance_test.go b/pkg/datasources/schemas_acceptance_test.go index 99def706a69..f631d02c118 100644 --- a/pkg/datasources/schemas_acceptance_test.go +++ b/pkg/datasources/schemas_acceptance_test.go @@ -7,9 +7,13 @@ 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/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/datasources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -21,13 +25,31 @@ func TestAcc_Schemas_Complete(t *testing.T) { acc.TestAccPreCheck(t) id := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() - - configVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable("foo"), - "database": config.StringVariable(databaseId.Name()), - } + comment := random.Comment() + + viewId := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(id) + statement := "SELECT ROLE_NAME FROM INFORMATION_SCHEMA.APPLICABLE_ROLES" + columnNames := []string{"ROLE_NAME"} + + schemaModel := model.Schema("test", id.DatabaseName(), id.Name()). + WithComment(comment). + WithIsTransient(datasources.BooleanTrue). + WithWithManagedAccess(datasources.BooleanTrue) + viewModel := model.View("test", viewId.DatabaseName(), viewId.Name(), viewId.SchemaName(), statement). + WithColumnNames(columnNames...). + WithDependsOn(schemaModel.ResourceReference()) + schemasModel := datasourcemodel.Schemas("test"). + WithLike(id.Name()). + WithStartsWith(id.Name()). + WithLimit(1). + WithDependsOn(schemaModel.ResourceReference(), viewModel.ResourceReference()) + schemasModelWithoutAdditional := datasourcemodel.Schemas("test"). + WithLike(id.Name()). + WithStartsWith(id.Name()). + WithLimit(1). + WithWithDescribe(false). + WithWithParameters(false). + WithDependsOn(schemaModel.ResourceReference(), viewModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -38,63 +60,61 @@ func TestAcc_Schemas_Complete(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/optionals_set"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, schemaModel, viewModel, schemasModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.is_default", "false"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.is_current"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.owner"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.options", "TRANSIENT, MANAGED ACCESS"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.retention_time"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.owner_role_type"), - - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.parameters.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.data_retention_time_in_days.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.max_data_extension_time_in_days.0.value"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.parameters.0.external_volume.0.value", ""), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.parameters.0.catalog.0.value", ""), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.replace_invalid_characters.0.value"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.parameters.0.default_ddl_collation.0.value", ""), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.storage_serialization_policy.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.log_level.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.trace_level.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.suspend_task_after_num_failures.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.task_auto_retry_attempts.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.user_task_managed_initial_warehouse_size.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.user_task_minimum_trigger_interval_in_seconds.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.quoted_identifiers_ignore_case.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.enable_console_output.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.parameters.0.pipe_execution_paused.0.value"), - - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.describe_output.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.describe_output.0.created_on"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.describe_output.0.name"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.describe_output.0.kind", "TABLE"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.show_output.0.is_default", "false"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.show_output.0.is_current"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.show_output.0.owner"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.show_output.0.comment", comment), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.show_output.0.options", "TRANSIENT, MANAGED ACCESS"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.show_output.0.retention_time"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.show_output.0.owner_role_type"), + + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.parameters.#", "1"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.data_retention_time_in_days.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.max_data_extension_time_in_days.0.value"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.parameters.0.external_volume.0.value", ""), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.parameters.0.catalog.0.value", ""), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.replace_invalid_characters.0.value"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.parameters.0.default_ddl_collation.0.value", ""), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.storage_serialization_policy.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.log_level.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.trace_level.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.suspend_task_after_num_failures.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.task_auto_retry_attempts.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.user_task_managed_initial_warehouse_size.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.user_task_minimum_trigger_interval_in_seconds.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.quoted_identifiers_ignore_case.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.enable_console_output.0.value"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.parameters.0.pipe_execution_paused.0.value"), + + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.describe_output.#", "1"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.describe_output.0.created_on"), + resource.TestCheckResourceAttrSet(schemasModel.DatasourceReference(), "schemas.0.describe_output.0.name"), + resource.TestCheckResourceAttr(schemasModel.DatasourceReference(), "schemas.0.describe_output.0.kind", "VIEW"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/optionals_unset"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, schemaModel, viewModel, schemasModelWithoutAdditional), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "1"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.is_default", "false"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.is_current"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.database_name", databaseId.Name()), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.owner"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.show_output.0.options", "TRANSIENT, MANAGED ACCESS"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.retention_time"), - resource.TestCheckResourceAttrSet("data.snowflake_schemas.test", "schemas.0.show_output.0.owner_role_type"), - - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.describe_output.#", "0"), - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.0.parameters.#", "0"), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttrSet(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.is_default", "false"), + resource.TestCheckResourceAttrSet(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.is_current"), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.database_name", id.DatabaseName()), + resource.TestCheckResourceAttrSet(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.owner"), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.comment", comment), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.options", "TRANSIENT, MANAGED ACCESS"), + resource.TestCheckResourceAttrSet(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.retention_time"), + resource.TestCheckResourceAttrSet(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.show_output.0.owner_role_type"), + + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(schemasModelWithoutAdditional.DatasourceReference(), "schemas.0.parameters.#", "0"), ), }, }, diff --git a/pkg/datasources/special_values.go b/pkg/datasources/special_values.go new file mode 100644 index 00000000000..4da5fd8edb9 --- /dev/null +++ b/pkg/datasources/special_values.go @@ -0,0 +1,6 @@ +package datasources + +const ( + BooleanTrue = "true" + BooleanFalse = "false" +) diff --git a/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/test.tf deleted file mode 100644 index 0b457b12294..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/test.tf +++ /dev/null @@ -1,27 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - comment = var.comment - is_transient = true - with_managed_access = true -} - -resource "snowflake_table" "test" { - database = var.database - schema = snowflake_schema.test.name - name = "table" - - column { - name = "id" - type = "int" - } -} - -data "snowflake_schemas" "test" { - depends_on = [snowflake_table.test] - like = var.name - starts_with = var.name - limit { - rows = 1 - } -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/variables.tf deleted file mode 100644 index 0c8231993a7..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/optionals_set/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "comment" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/test.tf deleted file mode 100644 index d06825d7e6e..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/test.tf +++ /dev/null @@ -1,18 +0,0 @@ -resource "snowflake_schema" "test" { - name = var.name - database = var.database - comment = var.comment - is_transient = true - with_managed_access = true -} - -data "snowflake_schemas" "test" { - with_describe = false - with_parameters = false - depends_on = [snowflake_schema.test] - like = var.name - starts_with = var.name - limit { - rows = 1 - } -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/variables.tf deleted file mode 100644 index 0c8231993a7..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/optionals_unset/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "name" { - type = string -} - -variable "database" { - type = string -} - -variable "comment" { - type = string -} From 68bdc6a08071ed725a4b4ec113e1a82767d1b24c Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 15:49:05 +0100 Subject: [PATCH 15/34] Improve schemas datasource acceptance test setup part2 --- .../datasourcemodel/schemas_model_ext.go | 23 ++++- pkg/acceptance/helpers/database_client.go | 11 +++ pkg/datasources/schemas_acceptance_test.go | 99 ++++++++----------- .../testdata/TestAcc_Schemas/in/test.tf | 22 ----- .../testdata/TestAcc_Schemas/in/variables.tf | 27 ----- .../testdata/TestAcc_Schemas/like/test.tf | 19 ---- .../TestAcc_Schemas/like/variables.tf | 19 ---- .../testdata/TestAcc_Schemas/limit/test.tf | 22 ----- .../TestAcc_Schemas/limit/variables.tf | 23 ----- .../TestAcc_Schemas/starts_with/test.tf | 19 ---- .../TestAcc_Schemas/starts_with/variables.tf | 19 ---- 11 files changed, 74 insertions(+), 229 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/in/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/in/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/like/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/like/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/limit/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/limit/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/starts_with/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_Schemas/starts_with/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go index 234d45fce6e..9d531149b7b 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/schemas_model_ext.go @@ -1,6 +1,10 @@ package datasourcemodel -import tfconfig "github.com/hashicorp/terraform-plugin-testing/config" +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) func (s *SchemasModel) WithLimit(rows int) *SchemasModel { return s.WithLimitValue( @@ -9,3 +13,20 @@ func (s *SchemasModel) WithLimit(rows int) *SchemasModel { }), ) } + +func (s *SchemasModel) WithRowsAndFrom(rows int, from string) *SchemasModel { + return s.WithLimitValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "rows": tfconfig.IntegerVariable(rows), + "from": tfconfig.StringVariable(from), + }), + ) +} + +func (s *SchemasModel) WithIn(databaseId sdk.AccountObjectIdentifier) *SchemasModel { + return s.WithInValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "database": tfconfig.StringVariable(databaseId.Name()), + }), + ) +} diff --git a/pkg/acceptance/helpers/database_client.go b/pkg/acceptance/helpers/database_client.go index a0ea93ebabd..df47c09f568 100644 --- a/pkg/acceptance/helpers/database_client.go +++ b/pkg/acceptance/helpers/database_client.go @@ -30,6 +30,17 @@ func (c *DatabaseClient) CreateDatabase(t *testing.T) (*sdk.Database, func()) { return c.CreateDatabaseWithOptions(t, c.ids.RandomAccountObjectIdentifier(), &sdk.CreateDatabaseOptions{}) } +// DatabaseWithParametersSet should be used to create database which sets the parameters that can be altered on the account level in other tests; this way, the test is not affected by the changes. +func (c *DatabaseClient) DatabaseWithParametersSet(t *testing.T) (*sdk.Database, func()) { + t.Helper() + return c.CreateDatabaseWithOptions(t, c.ids.RandomAccountObjectIdentifier(), &sdk.CreateDatabaseOptions{ + DataRetentionTimeInDays: sdk.Int(1), + MaxDataExtensionTimeInDays: sdk.Int(1), + // according to the docs SNOWFLAKE is a valid value (https://docs.snowflake.com/en/sql-reference/parameters#catalog) + Catalog: sdk.Pointer(sdk.NewAccountObjectIdentifier("SNOWFLAKE")), + }) +} + func (c *DatabaseClient) CreateDatabaseWithIdentifier(t *testing.T, id sdk.AccountObjectIdentifier) (*sdk.Database, func()) { t.Helper() return c.CreateDatabaseWithOptions(t, id, &sdk.CreateDatabaseOptions{}) diff --git a/pkg/datasources/schemas_acceptance_test.go b/pkg/datasources/schemas_acceptance_test.go index f631d02c118..2c767cefa23 100644 --- a/pkg/datasources/schemas_acceptance_test.go +++ b/pkg/datasources/schemas_acceptance_test.go @@ -2,7 +2,6 @@ package datasources_test import ( "fmt" - "maps" "regexp" "testing" @@ -15,7 +14,6 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/datasources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" - "github.com/hashicorp/terraform-plugin-testing/config" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/tfversion" ) @@ -125,45 +123,31 @@ func TestAcc_Schemas_Filtering(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - prefix := random.AlphaN(4) - idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) - idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) - idThree := acc.TestClient().Ids.RandomAccountObjectIdentifier() - databaseId := acc.TestClient().Ids.DatabaseId() - - database2, database2Cleanup := acc.TestClient().Database.CreateDatabase(t) + database2, database2Cleanup := acc.TestClient().Database.DatabaseWithParametersSet(t) t.Cleanup(database2Cleanup) - commonVariables := config.Variables{ - "name_1": config.StringVariable(idOne.Name()), - "name_2": config.StringVariable(idTwo.Name()), - "name_3": config.StringVariable(idThree.Name()), - "database": config.StringVariable(databaseId.Name()), - } - - likeConfig := config.Variables{ - "like": config.StringVariable(idOne.Name()), - } - maps.Copy(likeConfig, commonVariables) - - startsWithConfig := config.Variables{ - "starts_with": config.StringVariable(prefix), - } - maps.Copy(startsWithConfig, commonVariables) - - limitConfig := config.Variables{ - "rows": config.IntegerVariable(1), - "from": config.StringVariable(prefix), - } - maps.Copy(limitConfig, commonVariables) - - inConfig := config.Variables{ - "in": config.StringVariable(acc.TestDatabaseName), - "database_1": config.StringVariable(databaseId.Name()), - "database_2": config.StringVariable(database2.ID().Name()), - "starts_with": config.StringVariable(prefix), - } - maps.Copy(inConfig, commonVariables) + prefix := random.AlphaN(4) + idOne := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix) + idTwo := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix) + idThree := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() + idFour := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(database2.ID()) + + schemaModel1 := model.Schema("test_1", idOne.DatabaseName(), idOne.Name()) + schemaModel2 := model.Schema("test_2", idTwo.DatabaseName(), idTwo.Name()) + schemaModel3 := model.Schema("test_3", idThree.DatabaseName(), idThree.Name()) + schemaModel4 := model.Schema("test_4", idFour.DatabaseName(), idFour.Name()) + schemasModelLike := datasourcemodel.Schemas("test"). + WithLike(idOne.Name()). + WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) + schemasModelStartsWith := datasourcemodel.Schemas("test"). + WithStartsWith(prefix). + WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) + schemasModelLimit := datasourcemodel.Schemas("test"). + WithRowsAndFrom(1, prefix). + WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) + schemasModelIn := datasourcemodel.Schemas("test"). + WithIn(database2.ID()). + WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -174,65 +158,64 @@ func TestAcc_Schemas_Filtering(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Schema), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/like"), - ConfigVariables: likeConfig, + Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelLike), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelLimit.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/starts_with"), - ConfigVariables: startsWithConfig, + Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelStartsWith), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "2"), + resource.TestCheckResourceAttr(schemasModelStartsWith.DatasourceReference(), "schemas.#", "2"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/limit"), - ConfigVariables: limitConfig, + Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelLimit), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelLimit.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelLimit.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/in"), - ConfigVariables: inConfig, + Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelIn), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_schemas.test", "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelIn.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelIn.DatasourceReference(), "schemas.0.show_output.0.name", idFour.Name()), ), }, }, }) } -func TestAcc_Schemas_BadCombination(t *testing.T) { +func TestAcc_Schemas_SchemaNotFound_WithPostConditions(t *testing.T) { resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ tfversion.RequireAbove(tfversion.Version1_5_0), }, - CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: schemasDatasourceConfigDbAndSchema(), - ExpectError: regexp.MustCompile("Invalid combination of arguments"), + ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/non_existing"), + ExpectError: regexp.MustCompile("there should be at least one schema"), }, }, }) } -func TestAcc_Schemas_SchemaNotFound_WithPostConditions(t *testing.T) { +func TestAcc_Schemas_BadCombination(t *testing.T) { resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, TerraformVersionChecks: []tfversion.TerraformVersionCheck{ tfversion.RequireAbove(tfversion.Version1_5_0), }, + CheckDestroy: nil, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_Schemas/non_existing"), - ExpectError: regexp.MustCompile("there should be at least one schema"), + Config: schemasDatasourceConfigDbAndSchema(), + ExpectError: regexp.MustCompile("Invalid combination of arguments"), }, }, }) diff --git a/pkg/datasources/testdata/TestAcc_Schemas/in/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/in/test.tf deleted file mode 100644 index cdced966d08..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/in/test.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_schema" "test_1" { - name = var.name_1 - database = var.database_1 -} - -resource "snowflake_schema" "test_2" { - name = var.name_2 - database = var.database_2 -} - -resource "snowflake_schema" "test_3" { - name = var.name_3 - database = var.database_2 -} - -data "snowflake_schemas" "test" { - depends_on = [snowflake_schema.test_1, snowflake_schema.test_2, snowflake_schema.test_3] - in { - database = var.in - } - starts_with = var.starts_with -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/in/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/in/variables.tf deleted file mode 100644 index c70e5783d66..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/in/variables.tf +++ /dev/null @@ -1,27 +0,0 @@ -variable "name_1" { - type = string -} - -variable "name_2" { - type = string -} - -variable "name_3" { - type = string -} - -variable "database_1" { - type = string -} - -variable "database_2" { - type = string -} - -variable "in" { - type = string -} - -variable "starts_with" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/like/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/like/test.tf deleted file mode 100644 index 957cfa5182e..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/like/test.tf +++ /dev/null @@ -1,19 +0,0 @@ -resource "snowflake_schema" "test_1" { - name = var.name_1 - database = var.database -} - -resource "snowflake_schema" "test_2" { - name = var.name_2 - database = var.database -} - -resource "snowflake_schema" "test_3" { - name = var.name_3 - database = var.database -} - -data "snowflake_schemas" "test" { - depends_on = [snowflake_schema.test_1, snowflake_schema.test_2, snowflake_schema.test_3] - like = var.like -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/like/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/like/variables.tf deleted file mode 100644 index 3e39c7b2320..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/like/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ -variable "name_1" { - type = string -} - -variable "name_2" { - type = string -} - -variable "name_3" { - type = string -} - -variable "database" { - type = string -} - -variable "like" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/limit/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/limit/test.tf deleted file mode 100644 index 2e65cba3640..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/limit/test.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_schema" "test_1" { - name = var.name_1 - database = var.database -} - -resource "snowflake_schema" "test_2" { - name = var.name_2 - database = var.database -} - -resource "snowflake_schema" "test_3" { - name = var.name_3 - database = var.database -} - -data "snowflake_schemas" "test" { - depends_on = [snowflake_schema.test_1, snowflake_schema.test_2, snowflake_schema.test_3] - limit { - rows = var.rows - from = var.from - } -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/limit/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/limit/variables.tf deleted file mode 100644 index 3139f4bcb8f..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/limit/variables.tf +++ /dev/null @@ -1,23 +0,0 @@ -variable "name_1" { - type = string -} - -variable "name_2" { - type = string -} - -variable "name_3" { - type = string -} - -variable "database" { - type = string -} - -variable "rows" { - type = number -} - -variable "from" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/starts_with/test.tf b/pkg/datasources/testdata/TestAcc_Schemas/starts_with/test.tf deleted file mode 100644 index 5ce46b2334b..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/starts_with/test.tf +++ /dev/null @@ -1,19 +0,0 @@ -resource "snowflake_schema" "test_1" { - name = var.name_1 - database = var.database -} - -resource "snowflake_schema" "test_2" { - name = var.name_2 - database = var.database -} - -resource "snowflake_schema" "test_3" { - name = var.name_3 - database = var.database -} - -data "snowflake_schemas" "test" { - depends_on = [snowflake_schema.test_1, snowflake_schema.test_2, snowflake_schema.test_3] - starts_with = var.starts_with -} diff --git a/pkg/datasources/testdata/TestAcc_Schemas/starts_with/variables.tf b/pkg/datasources/testdata/TestAcc_Schemas/starts_with/variables.tf deleted file mode 100644 index b729f25c6d7..00000000000 --- a/pkg/datasources/testdata/TestAcc_Schemas/starts_with/variables.tf +++ /dev/null @@ -1,19 +0,0 @@ -variable "name_1" { - type = string -} - -variable "name_2" { - type = string -} - -variable "name_3" { - type = string -} - -variable "database" { - type = string -} - -variable "starts_with" { - type = string -} From e30303083341d4e4eadcf8f32bbb7793e3bf4337 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 16:10:05 +0100 Subject: [PATCH 16/34] Improve schemas datasource acceptance test setup part3 --- pkg/datasources/schemas.go | 5 ++--- pkg/datasources/schemas_acceptance_test.go | 17 +++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/datasources/schemas.go b/pkg/datasources/schemas.go index aec6eac8cc4..474e9e9e5de 100644 --- a/pkg/datasources/schemas.go +++ b/pkg/datasources/schemas.go @@ -3,13 +3,12 @@ package datasources import ( "context" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/datasources" + resourceschemas "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/schemas" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/provider" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/datasources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/schemas" - resourceschemas "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/schemas" - "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" diff --git a/pkg/datasources/schemas_acceptance_test.go b/pkg/datasources/schemas_acceptance_test.go index 2c767cefa23..b026832eceb 100644 --- a/pkg/datasources/schemas_acceptance_test.go +++ b/pkg/datasources/schemas_acceptance_test.go @@ -127,8 +127,8 @@ func TestAcc_Schemas_Filtering(t *testing.T) { t.Cleanup(database2Cleanup) prefix := random.AlphaN(4) - idOne := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix) - idTwo := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix) + idOne := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix + "1") + idTwo := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix + "2") idThree := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() idFour := acc.TestClient().Ids.RandomDatabaseObjectIdentifierInDatabase(database2.ID()) @@ -136,17 +136,18 @@ func TestAcc_Schemas_Filtering(t *testing.T) { schemaModel2 := model.Schema("test_2", idTwo.DatabaseName(), idTwo.Name()) schemaModel3 := model.Schema("test_3", idThree.DatabaseName(), idThree.Name()) schemaModel4 := model.Schema("test_4", idFour.DatabaseName(), idFour.Name()) - schemasModelLike := datasourcemodel.Schemas("test"). + schemasModelLike := datasourcemodel.Schemas("test1"). WithLike(idOne.Name()). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) - schemasModelStartsWith := datasourcemodel.Schemas("test"). + schemasModelStartsWith := datasourcemodel.Schemas("test2"). WithStartsWith(prefix). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) - schemasModelLimit := datasourcemodel.Schemas("test"). + schemasModelLimit := datasourcemodel.Schemas("test3"). WithRowsAndFrom(1, prefix). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) - schemasModelIn := datasourcemodel.Schemas("test"). - WithIn(database2.ID()). + schemasModelIn := datasourcemodel.Schemas("test4"). + WithIn(idFour.DatabaseId()). + WithStartsWith(idFour.Name()). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) resource.Test(t, resource.TestCase{ @@ -161,7 +162,7 @@ func TestAcc_Schemas_Filtering(t *testing.T) { Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelLike), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.#", "1"), - resource.TestCheckResourceAttr(schemasModelLimit.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), + resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), ), }, { From 033d9144044586ea6a85ffe44ee50bed0d84b86b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 16:20:38 +0100 Subject: [PATCH 17/34] Improve schemas datasource acceptance test setup part4 --- pkg/datasources/schemas_acceptance_test.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pkg/datasources/schemas_acceptance_test.go b/pkg/datasources/schemas_acceptance_test.go index b026832eceb..2d42d1b8976 100644 --- a/pkg/datasources/schemas_acceptance_test.go +++ b/pkg/datasources/schemas_acceptance_test.go @@ -3,6 +3,7 @@ package datasources_test import ( "fmt" "regexp" + "strings" "testing" acc "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance" @@ -126,7 +127,7 @@ func TestAcc_Schemas_Filtering(t *testing.T) { database2, database2Cleanup := acc.TestClient().Database.DatabaseWithParametersSet(t) t.Cleanup(database2Cleanup) - prefix := random.AlphaN(4) + prefix := strings.ToUpper(random.AlphaN(4)) idOne := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix + "1") idTwo := acc.TestClient().Ids.RandomDatabaseObjectIdentifierWithPrefix(prefix + "2") idThree := acc.TestClient().Ids.RandomDatabaseObjectIdentifier() @@ -137,13 +138,16 @@ func TestAcc_Schemas_Filtering(t *testing.T) { schemaModel3 := model.Schema("test_3", idThree.DatabaseName(), idThree.Name()) schemaModel4 := model.Schema("test_4", idFour.DatabaseName(), idFour.Name()) schemasModelLike := datasourcemodel.Schemas("test1"). - WithLike(idOne.Name()). + WithLike(prefix+"%"). + WithIn(idOne.DatabaseId()). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) schemasModelStartsWith := datasourcemodel.Schemas("test2"). - WithStartsWith(prefix). + WithStartsWith(prefix+"1"). + WithIn(idOne.DatabaseId()). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) schemasModelLimit := datasourcemodel.Schemas("test3"). - WithRowsAndFrom(1, prefix). + WithRowsAndFrom(1, prefix+"1"). + WithIn(idOne.DatabaseId()). WithDependsOn(schemaModel1.ResourceReference(), schemaModel2.ResourceReference(), schemaModel3.ResourceReference(), schemaModel4.ResourceReference()) schemasModelIn := datasourcemodel.Schemas("test4"). WithIn(idFour.DatabaseId()). @@ -161,14 +165,14 @@ func TestAcc_Schemas_Filtering(t *testing.T) { { Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelLike), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.#", "1"), - resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), + resource.TestCheckResourceAttr(schemasModelLike.DatasourceReference(), "schemas.#", "2"), ), }, { Config: accconfig.FromModels(t, schemaModel1, schemaModel2, schemaModel3, schemaModel4, schemasModelStartsWith), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr(schemasModelStartsWith.DatasourceReference(), "schemas.#", "2"), + resource.TestCheckResourceAttr(schemasModelStartsWith.DatasourceReference(), "schemas.#", "1"), + resource.TestCheckResourceAttr(schemasModelStartsWith.DatasourceReference(), "schemas.0.show_output.0.name", idOne.Name()), ), }, { From 901e197e8cceaa5d0ce7c09fe83af94193360741 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 16:32:41 +0100 Subject: [PATCH 18/34] Add secrets datasource model builder --- .../gen/datasource_schema_def.go | 4 + .../datasourcemodel/secrets_model_gen.go | 101 ++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_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 7943054b7e0..fd391e1b79d 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -58,4 +58,8 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ name: "Schemas", schema: datasources.Schemas().Schema, }, + { + name: "Secrets", + schema: datasources.Secrets().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_gen.go new file mode 100644 index 00000000000..d5f9e868fb8 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_gen.go @@ -0,0 +1,101 @@ +// 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 SecretsModel struct { + In tfconfig.Variable `json:"in,omitempty"` + Like tfconfig.Variable `json:"like,omitempty"` + Secrets tfconfig.Variable `json:"secrets,omitempty"` + WithDescribe tfconfig.Variable `json:"with_describe,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func Secrets( + datasourceName string, +) *SecretsModel { + s := &SecretsModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.Secrets)} + return s +} + +func SecretsWithDefaultMeta() *SecretsModel { + s := &SecretsModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.Secrets)} + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *SecretsModel) MarshalJSON() ([]byte, error) { + type Alias SecretsModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, + }) +} + +func (s *SecretsModel) WithDependsOn(values ...string) *SecretsModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +// in attribute type is not yet supported, so WithIn can't be generated + +func (s *SecretsModel) WithLike(like string) *SecretsModel { + s.Like = tfconfig.StringVariable(like) + return s +} + +// secrets attribute type is not yet supported, so WithSecrets can't be generated + +func (s *SecretsModel) WithWithDescribe(withDescribe bool) *SecretsModel { + s.WithDescribe = tfconfig.BoolVariable(withDescribe) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *SecretsModel) WithInValue(value tfconfig.Variable) *SecretsModel { + s.In = value + return s +} + +func (s *SecretsModel) WithLikeValue(value tfconfig.Variable) *SecretsModel { + s.Like = value + return s +} + +func (s *SecretsModel) WithSecretsValue(value tfconfig.Variable) *SecretsModel { + s.Secrets = value + return s +} + +func (s *SecretsModel) WithWithDescribeValue(value tfconfig.Variable) *SecretsModel { + s.WithDescribe = value + return s +} From 440522091a8e02301f1f58504c54025975858cde Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:25:08 +0100 Subject: [PATCH 19/34] Improve setup for secrets datasource acceptance tests --- .../datasourcemodel/secrets_model_ext.go | 31 +++ pkg/datasources/secrets_acceptance_test.go | 242 ++++++++---------- 2 files changed, 142 insertions(+), 131 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_ext.go diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_ext.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_ext.go new file mode 100644 index 00000000000..e6578aed875 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/secrets_model_ext.go @@ -0,0 +1,31 @@ +package datasourcemodel + +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) + +func (s *SecretsModel) WithInDatabase(databaseId sdk.AccountObjectIdentifier) *SecretsModel { + return s.WithInValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "database": tfconfig.StringVariable(databaseId.Name()), + }), + ) +} + +func (s *SecretsModel) WithInSchema(schemaId sdk.DatabaseObjectIdentifier) *SecretsModel { + return s.WithInValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "schema": tfconfig.StringVariable(schemaId.FullyQualifiedName()), + }), + ) +} + +func (s *SecretsModel) WithInAccount() *SecretsModel { + return s.WithInValue( + tfconfig.ObjectVariable(map[string]tfconfig.Variable{ + "account": tfconfig.BoolVariable(true), + }), + ) +} diff --git a/pkg/datasources/secrets_acceptance_test.go b/pkg/datasources/secrets_acceptance_test.go index 3ce3b26e463..f54437b09ef 100644 --- a/pkg/datasources/secrets_acceptance_test.go +++ b/pkg/datasources/secrets_acceptance_test.go @@ -1,9 +1,7 @@ package datasources_test import ( - "fmt" "regexp" - "strings" "testing" "time" @@ -12,9 +10,11 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/assert/resourceshowoutputassert" + "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/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/collections" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" "github.com/hashicorp/terraform-plugin-testing/helper/resource" @@ -35,10 +35,10 @@ func TestAcc_Secrets_WithClientCredentials(t *testing.T) { t.Cleanup(apiIntegrationCleanup) secretModel := model.SecretWithClientCredentials("test", integrationId.Name(), id.DatabaseName(), id.SchemaName(), id.Name(), []string{"username", "test_scope"}) + secretsModel := datasourcemodel.Secrets("test"). + WithInDatabase(id.DatabaseId()). + WithDependsOn(secretModel.ResourceReference()) - dataSecretsClientCredentials := accconfig.FromModels(t, secretModel) + secretsData(secretModel, id) - - dsName := "data.snowflake_secrets.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -48,28 +48,28 @@ func TestAcc_Secrets_WithClientCredentials(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SecretWithClientCredentials), Steps: []resource.TestStep{ { - Config: dataSecretsClientCredentials, + Config: accconfig.FromModels(t, secretModel, secretsModel), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.#", "1")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.#", "1")), resourceshowoutputassert.SecretsDatasourceShowOutput(t, "snowflake_secrets.test"). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). HasComment(""). HasSecretType(string(sdk.SecretTypeOAuth2)), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.show_output.0.oauth_scopes.#", "2")), - assert.Check(resource.TestCheckTypeSetElemAttr(dsName, "secrets.0.show_output.0.oauth_scopes.*", "username")), - assert.Check(resource.TestCheckTypeSetElemAttr(dsName, "secrets.0.show_output.0.oauth_scopes.*", "test_scope")), - - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeOAuth2))), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.username", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.#", "2")), - assert.Check(resource.TestCheckTypeSetElemAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.*", "username")), - assert.Check(resource.TestCheckTypeSetElemAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.*", "test_scope")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.#", "2")), + assert.Check(resource.TestCheckTypeSetElemAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.*", "username")), + assert.Check(resource.TestCheckTypeSetElemAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.*", "test_scope")), + + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeOAuth2))), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.username", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.#", "2")), + assert.Check(resource.TestCheckTypeSetElemAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.*", "username")), + assert.Check(resource.TestCheckTypeSetElemAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.*", "test_scope")), ), }, }, @@ -90,10 +90,10 @@ func TestAcc_Secrets_WithAuthorizationCodeGrant(t *testing.T) { t.Cleanup(apiIntegrationCleanup) secretModel := model.SecretWithAuthorizationCodeGrant("test", integrationId.Name(), id.DatabaseName(), id.SchemaName(), id.Name(), "test_token", time.Now().Add(24*time.Hour).Format(time.DateTime)).WithComment("test_comment") + secretsModel := datasourcemodel.Secrets("test"). + WithInDatabase(id.DatabaseId()). + WithDependsOn(secretModel.ResourceReference()) - dataSecretsAuthorizationCode := accconfig.FromModels(t, secretModel) + secretsData(secretModel, id) - - dsName := "data.snowflake_secrets.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -103,25 +103,25 @@ func TestAcc_Secrets_WithAuthorizationCodeGrant(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SecretWithAuthorizationCodeGrant), Steps: []resource.TestStep{ { - Config: dataSecretsAuthorizationCode, + Config: accconfig.FromModels(t, secretModel, secretsModel), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.#", "1")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.#", "1")), resourceshowoutputassert.SecretsDatasourceShowOutput(t, "snowflake_secrets.test"). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). HasComment("test_comment"). HasSecretType(string(sdk.SecretTypeOAuth2)), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.show_output.0.oauth_scopes.#", "0")), - - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeOAuth2))), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.username", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.comment", "test_comment")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.#", "0")), - assert.Check(resource.TestCheckResourceAttrSet(dsName, "secrets.0.describe_output.0.oauth_refresh_token_expiry_time")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.#", "0")), + + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeOAuth2))), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.username", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.comment", "test_comment")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.#", "0")), + assert.Check(resource.TestCheckResourceAttrSet(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_refresh_token_expiry_time")), ), }, }, @@ -129,12 +129,16 @@ func TestAcc_Secrets_WithAuthorizationCodeGrant(t *testing.T) { } func TestAcc_Secrets_WithBasicAuthentication(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() secretModel := model.SecretWithBasicAuthentication("test", id.DatabaseName(), id.Name(), "test_passwd", id.SchemaName(), "test_username") - dataSecretsAuthorizationCode := accconfig.FromModels(t, secretModel) + secretsData(secretModel, id) + secretsModel := datasourcemodel.Secrets("test"). + WithInDatabase(id.DatabaseId()). + WithDependsOn(secretModel.ResourceReference()) - dsName := "data.snowflake_secrets.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -144,24 +148,24 @@ func TestAcc_Secrets_WithBasicAuthentication(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SecretWithBasicAuthentication), Steps: []resource.TestStep{ { - Config: dataSecretsAuthorizationCode, + Config: accconfig.FromModels(t, secretModel, secretsModel), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.#", "1")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.#", "1")), resourceshowoutputassert.SecretsDatasourceShowOutput(t, "snowflake_secrets.test"). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). HasComment(""). HasSecretType(string(sdk.SecretTypePassword)), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.show_output.0.oauth_scopes.#", "0")), - - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypePassword))), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.username", "test_username")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.#", "0")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.#", "0")), + + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypePassword))), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.username", "test_username")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.#", "0")), ), }, }, @@ -169,13 +173,16 @@ func TestAcc_Secrets_WithBasicAuthentication(t *testing.T) { } func TestAcc_Secrets_WithGenericString(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomSchemaObjectIdentifier() secretModel := model.SecretWithGenericString("test", id.DatabaseName(), id.Name(), id.SchemaName(), "test_secret_string") + secretsModel := datasourcemodel.Secrets("test"). + WithInDatabase(id.DatabaseId()). + WithDependsOn(secretModel.ResourceReference()) - dataSecretsAuthorizationCode := accconfig.FromModels(t, secretModel) + secretsData(secretModel, id) - - dsName := "data.snowflake_secrets.test" resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -185,51 +192,35 @@ func TestAcc_Secrets_WithGenericString(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.SecretWithGenericString), Steps: []resource.TestStep{ { - Config: dataSecretsAuthorizationCode, + Config: accconfig.FromModels(t, secretModel, secretsModel), Check: assertThat(t, - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.#", "1")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.#", "1")), resourceshowoutputassert.SecretsDatasourceShowOutput(t, "snowflake_secrets.test"). HasName(id.Name()). HasDatabaseName(id.DatabaseName()). HasSchemaName(id.SchemaName()). HasComment(""). HasSecretType(string(sdk.SecretTypeGenericString)), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.show_output.0.oauth_scopes.#", "0")), - - assert.Check(resource.TestCheckResourceAttrSet(dsName, "secrets.0.describe_output.0.created_on")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.name", id.Name())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.database_name", id.DatabaseName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.schema_name", id.SchemaName())), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeGenericString))), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.username", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.comment", "")), - assert.Check(resource.TestCheckResourceAttr(dsName, "secrets.0.describe_output.0.oauth_scopes.#", "0")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.show_output.0.oauth_scopes.#", "0")), + + assert.Check(resource.TestCheckResourceAttrSet(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.created_on")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.name", id.Name())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.database_name", id.DatabaseName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.schema_name", id.SchemaName())), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.secret_type", string(sdk.SecretTypeGenericString))), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.username", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.comment", "")), + assert.Check(resource.TestCheckResourceAttr(secretsModel.DatasourceReference(), "secrets.0.describe_output.0.oauth_scopes.#", "0")), ), }, }, }) } -func secretsData(secretModel accconfig.ResourceModel, secretId sdk.SchemaObjectIdentifier) string { - return fmt.Sprintf(` - data "snowflake_secrets" "test" { - depends_on = [%s.test] - in { - database = %s - } - }`, secretModel.Resource(), secretId.DatabaseId().FullyQualifiedName()) -} - func TestAcc_Secrets_Filtering(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - prefix := random.AlphaN(4) - idOne := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix) - idTwo := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix) - idThree := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix) - idFour := acc.TestClient().Ids.RandomSchemaObjectIdentifier() - integrationId := acc.TestClient().Ids.RandomAccountObjectIdentifier() _, apiIntegrationCleanup := acc.TestClient().SecurityIntegration.CreateApiAuthenticationClientCredentialsWithRequest(t, sdk.NewCreateApiAuthenticationWithClientCredentialsFlowSecurityIntegrationRequest(integrationId, true, "test_oauth_client_id", "test_oauth_client_secret"). @@ -237,22 +228,42 @@ func TestAcc_Secrets_Filtering(t *testing.T) { ) t.Cleanup(apiIntegrationCleanup) - schema, schemaCleanup := acc.TestClient().Schema.CreateSchemaInDatabase(t, acc.TestClient().Ids.DatabaseId()) + schema, schemaCleanup := acc.TestClient().Schema.CreateSchema(t) t.Cleanup(schemaCleanup) + prefix := random.AlphaN(4) + idOne := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix + "1") + idTwo := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix + "2") + idThree := acc.TestClient().Ids.RandomSchemaObjectIdentifierWithPrefix(prefix + "3") + idFour := acc.TestClient().Ids.RandomSchemaObjectIdentifier() idFive := acc.TestClient().Ids.RandomSchemaObjectIdentifierInSchema(schema.ID()) - secretModelBasicAuth := model.SecretWithBasicAuthentication("s", idOne.DatabaseName(), idOne.Name(), "test_passwd", idOne.SchemaName(), "test_username") - secretModelGenericString := model.SecretWithGenericString("s2", idTwo.DatabaseName(), idTwo.Name(), idTwo.SchemaName(), "foo") - secretModelClientCredentials := model.SecretWithClientCredentials("s3", integrationId.Name(), idThree.DatabaseName(), idThree.SchemaName(), idThree.Name(), []string{"first_scope", "second_scope"}) - secretModelAuthorizationCodeGrant := model.SecretWithAuthorizationCodeGrant("s4", integrationId.Name(), idFour.DatabaseName(), idFour.SchemaName(), idFour.Name(), "test_token", time.Now().Add(24*time.Hour).Format(time.DateTime)) - secretModelInDifferentSchema := model.SecretWithBasicAuthentication("s5", idFive.DatabaseName(), idFive.Name(), "test_passwd", idFive.SchemaName(), "test_username") + pass := random.Password() - multipleSecretModels := accconfig.FromModels(t, secretModelBasicAuth) + - accconfig.FromModels(t, secretModelGenericString) + - accconfig.FromModels(t, secretModelClientCredentials) + - accconfig.FromModels(t, secretModelAuthorizationCodeGrant) + - accconfig.FromModels(t, secretModelInDifferentSchema) + secretModelBasicAuth := model.SecretWithBasicAuthentication("s", idOne.DatabaseName(), idOne.Name(), pass, idOne.SchemaName(), "test_username") + secretModelGenericString := model.SecretWithGenericString("s2", idTwo.DatabaseName(), idTwo.Name(), idTwo.SchemaName(), pass) + secretModelClientCredentials := model.SecretWithClientCredentials("s3", integrationId.Name(), idThree.DatabaseName(), idThree.SchemaName(), idThree.Name(), []string{"first_scope", "second_scope"}) + secretModelAuthorizationCodeGrant := model.SecretWithAuthorizationCodeGrant("s4", integrationId.Name(), idFour.DatabaseName(), idFour.SchemaName(), idFour.Name(), pass, time.Now().Add(24*time.Hour).Format(time.DateTime)) + secretModelInDifferentSchema := model.SecretWithBasicAuthentication("s5", idFive.DatabaseName(), idFive.Name(), pass, idFive.SchemaName(), "test_username") + allSecretModels := []accconfig.ResourceModel{secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema} + allReferences := collections.Map(allSecretModels, func(resourceModel accconfig.ResourceModel) string { return resourceModel.ResourceReference() }) + + secretsModelWithLike := datasourcemodel.Secrets("test"). + WithLike(idOne.Name()). + WithDependsOn(allReferences...) + secretsModelWithLikePrefix := datasourcemodel.Secrets("test"). + WithLike(prefix + "%"). + WithDependsOn(allReferences...) + secretsModelInSchema := datasourcemodel.Secrets("test"). + WithInSchema(idFive.SchemaId()). + WithDependsOn(allReferences...) + secretsModelInDatabase := datasourcemodel.Secrets("test"). + WithInDatabase(idFive.DatabaseId()). + WithDependsOn(allReferences...) + secretsModelInAccount := datasourcemodel.Secrets("test"). + WithInAccount(). + WithLike(prefix + "%"). + WithDependsOn(allReferences...) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -269,37 +280,37 @@ func TestAcc_Secrets_Filtering(t *testing.T) { Steps: []resource.TestStep{ // like with one type { - Config: multipleSecretModels + datasourceWithLikeMultipleSecretTypes("snowflake_secret_with_basic_authentication.s.name"), + Config: accconfig.FromModels(t, secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema, secretsModelWithLike), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_secrets.test", "secrets.#", "1"), + resource.TestCheckResourceAttr(secretsModelWithLike.DatasourceReference(), "secrets.#", "1"), ), }, // like with prefix { - Config: multipleSecretModels + datasourceWithLikeMultipleSecretTypes("\""+prefix+"%"+"\""), + Config: accconfig.FromModels(t, secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema, secretsModelWithLikePrefix), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_secrets.test", "secrets.#", "3"), + resource.TestCheckResourceAttr(secretsModelWithLikePrefix.DatasourceReference(), "secrets.#", "3"), ), }, // In schema { - Config: multipleSecretModels + secretDatasourceWithIn("schema", idFive.SchemaId().FullyQualifiedName()), + Config: accconfig.FromModels(t, secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema, secretsModelInSchema), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_secrets.test", "secrets.#", "1"), + resource.TestCheckResourceAttr(secretsModelInSchema.DatasourceReference(), "secrets.#", "1"), ), }, // In Database { - Config: multipleSecretModels + secretDatasourceWithIn("database", idFive.DatabaseId().FullyQualifiedName()), + Config: accconfig.FromModels(t, secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema, secretsModelInDatabase), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_secrets.test", "secrets.#", "5"), + resource.TestCheckResourceAttr(secretsModelInDatabase.DatasourceReference(), "secrets.#", "5"), ), }, // In Account { - Config: multipleSecretModels + secretDatasourceInAccountWithLike(prefix+"%"), + Config: accconfig.FromModels(t, secretModelBasicAuth, secretModelGenericString, secretModelClientCredentials, secretModelAuthorizationCodeGrant, secretModelInDifferentSchema, secretsModelInAccount), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_secrets.test", "secrets.#", "3"), + resource.TestCheckResourceAttr(secretsModelInAccount.DatasourceReference(), "secrets.#", "3"), ), }, }, @@ -323,37 +334,6 @@ func TestAcc_Secrets_EmptyIn(t *testing.T) { }) } -func datasourceWithLikeMultipleSecretTypes(like string) string { - return fmt.Sprintf(` - data "snowflake_secrets" "test" { - depends_on = [snowflake_secret_with_basic_authentication.s, snowflake_secret_with_generic_string.s2, snowflake_secret_with_client_credentials.s3, snowflake_secret_with_authorization_code_grant.s4] - like = %s - } -`, like) -} - -func secretDatasourceWithIn(objectName, objectFullyQualifiedName string) string { - return fmt.Sprintf(` - data "snowflake_secrets" "test" { - in { - %s = "%s" - } - } -`, objectName, strings.ReplaceAll(objectFullyQualifiedName, `"`, "")) -} - -func secretDatasourceInAccountWithLike(prefix string) string { - return fmt.Sprintf(` - data "snowflake_secrets" "test" { - depends_on = [snowflake_secret_with_basic_authentication.s, snowflake_secret_with_generic_string.s2, snowflake_secret_with_client_credentials.s3, snowflake_secret_with_authorization_code_grant.s4] - in { - account = true - } - like = "%s" - } -`, prefix) -} - func secretDatasourceEmptyIn() string { return ` data "snowflake_secrets" "test" { From 711588ee67a6f4e7fc7c69b10ae05052728dd3e5 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:31:55 +0100 Subject: [PATCH 20/34] Add EnableAcceptance to all security integrations datasource tests --- .../security_integrations_acceptance_test.go | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 53c4dca7f88..070f8442f57 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -18,6 +18,9 @@ import ( ) func TestAcc_SecurityIntegrations_MultipleTypes(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := random.AlphaN(4) idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) @@ -84,6 +87,9 @@ func TestAcc_SecurityIntegrations_MultipleTypes(t *testing.T) { } func TestAcc_SecurityIntegrations_ApiAuthenticationWithAuthorizationCodeGrant(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() m := func() map[string]config.Variable { @@ -160,6 +166,9 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithAuthorizationCodeGrant(t } func TestAcc_SecurityIntegrations_ApiAuthenticationWithClientCredentials(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() m := func() map[string]config.Variable { @@ -234,6 +243,9 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithClientCredentials(t *test } func TestAcc_SecurityIntegrations_ExternalOauth(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role, roleCleanup := acc.TestClient().Role.CreateRole(t) issuer := random.String() @@ -421,6 +433,9 @@ func TestAcc_SecurityIntegrations_OauthForCustomClients(t *testing.T) { } func TestAcc_SecurityIntegrations_OauthForPartnerApplications(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() m := func() map[string]config.Variable { @@ -496,6 +511,9 @@ func TestAcc_SecurityIntegrations_OauthForPartnerApplications(t *testing.T) { } func TestAcc_SecurityIntegrations_Saml2(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() issuer := acc.TestClient().Ids.Alpha() cert := random.GenerateX509(t) @@ -592,6 +610,9 @@ func TestAcc_SecurityIntegrations_Saml2(t *testing.T) { } func TestAcc_SecurityIntegrations_Scim(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() networkPolicy, networkPolicyCleanup := acc.TestClient().NetworkPolicy.CreateNetworkPolicy(t) @@ -652,6 +673,9 @@ func TestAcc_SecurityIntegrations_Scim(t *testing.T) { } func TestAcc_SecurityIntegrations_Filtering(t *testing.T) { + _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) + acc.TestAccPreCheck(t) + prefix := random.AlphaN(4) idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) From 00dba7d576293707640bdf9565ad54bb9f93dcfd Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:35:49 +0100 Subject: [PATCH 21/34] Generate security integrations datasource model builder --- .../gen/datasource_schema_def.go | 4 + .../security_integrations_model_gen.go | 93 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/datasourcemodel/security_integrations_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 fd391e1b79d..3d295a14a90 100644 --- a/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/gen/datasource_schema_def.go @@ -62,4 +62,8 @@ var allDatasourcesSchemaDefs = []DatasourceSchemaDef{ name: "Secrets", schema: datasources.Secrets().Schema, }, + { + name: "SecurityIntegrations", + schema: datasources.SecurityIntegrations().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/datasourcemodel/security_integrations_model_gen.go b/pkg/acceptance/bettertestspoc/config/datasourcemodel/security_integrations_model_gen.go new file mode 100644 index 00000000000..3d146fdbecf --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/datasourcemodel/security_integrations_model_gen.go @@ -0,0 +1,93 @@ +// 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 SecurityIntegrationsModel struct { + Like tfconfig.Variable `json:"like,omitempty"` + SecurityIntegrations tfconfig.Variable `json:"security_integrations,omitempty"` + WithDescribe tfconfig.Variable `json:"with_describe,omitempty"` + + *config.DatasourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func SecurityIntegrations( + datasourceName string, +) *SecurityIntegrationsModel { + s := &SecurityIntegrationsModel{DatasourceModelMeta: config.DatasourceMeta(datasourceName, datasources.SecurityIntegrations)} + return s +} + +func SecurityIntegrationsWithDefaultMeta() *SecurityIntegrationsModel { + s := &SecurityIntegrationsModel{DatasourceModelMeta: config.DatasourceDefaultMeta(datasources.SecurityIntegrations)} + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *SecurityIntegrationsModel) MarshalJSON() ([]byte, error) { + type Alias SecurityIntegrationsModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + SingleAttributeWorkaround config.ReplacementPlaceholder `json:"single_attribute_workaround,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + SingleAttributeWorkaround: config.SnowflakeProviderConfigSingleAttributeWorkaround, + }) +} + +func (s *SecurityIntegrationsModel) WithDependsOn(values ...string) *SecurityIntegrationsModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (s *SecurityIntegrationsModel) WithLike(like string) *SecurityIntegrationsModel { + s.Like = tfconfig.StringVariable(like) + return s +} + +// security_integrations attribute type is not yet supported, so WithSecurityIntegrations can't be generated + +func (s *SecurityIntegrationsModel) WithWithDescribe(withDescribe bool) *SecurityIntegrationsModel { + s.WithDescribe = tfconfig.BoolVariable(withDescribe) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *SecurityIntegrationsModel) WithLikeValue(value tfconfig.Variable) *SecurityIntegrationsModel { + s.Like = value + return s +} + +func (s *SecurityIntegrationsModel) WithSecurityIntegrationsValue(value tfconfig.Variable) *SecurityIntegrationsModel { + s.SecurityIntegrations = value + return s +} + +func (s *SecurityIntegrationsModel) WithWithDescribeValue(value tfconfig.Variable) *SecurityIntegrationsModel { + s.WithDescribe = value + return s +} From b6823260fa26fd6ed996e8da2a04e34b55156931 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:40:22 +0100 Subject: [PATCH 22/34] Generate scim and saml2 resources model builders --- .../resourceassert/gen/resource_schema_def.go | 8 + .../saml2_security_integration_model_gen.go | 274 ++++++++++++++++++ .../scim_security_integration_model_gen.go | 166 +++++++++++ 3 files changed, 448 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go create mode 100644 pkg/acceptance/bettertestspoc/config/model/scim_security_integration_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go index 7491bfb74ed..d94334c4469 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -181,4 +181,12 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "NetworkPolicy", schema: resources.NetworkPolicy().Schema, }, + { + name: "ScimSecurityIntegration", + schema: resources.SCIMIntegration().Schema, + }, + { + name: "Saml2SecurityIntegration", + schema: resources.SAML2Integration().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go new file mode 100644 index 00000000000..8b6a89e9545 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go @@ -0,0 +1,274 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type Saml2SecurityIntegrationModel struct { + AllowedEmailPatterns tfconfig.Variable `json:"allowed_email_patterns,omitempty"` + AllowedUserDomains tfconfig.Variable `json:"allowed_user_domains,omitempty"` + Comment tfconfig.Variable `json:"comment,omitempty"` + Enabled tfconfig.Variable `json:"enabled,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + Saml2EnableSpInitiated tfconfig.Variable `json:"saml2_enable_sp_initiated,omitempty"` + Saml2ForceAuthn tfconfig.Variable `json:"saml2_force_authn,omitempty"` + Saml2Issuer tfconfig.Variable `json:"saml2_issuer,omitempty"` + Saml2PostLogoutRedirectUrl tfconfig.Variable `json:"saml2_post_logout_redirect_url,omitempty"` + Saml2Provider tfconfig.Variable `json:"saml2_provider,omitempty"` + Saml2RequestedNameidFormat tfconfig.Variable `json:"saml2_requested_nameid_format,omitempty"` + Saml2SignRequest tfconfig.Variable `json:"saml2_sign_request,omitempty"` + Saml2SnowflakeAcsUrl tfconfig.Variable `json:"saml2_snowflake_acs_url,omitempty"` + Saml2SnowflakeIssuerUrl tfconfig.Variable `json:"saml2_snowflake_issuer_url,omitempty"` + Saml2SpInitiatedLoginPageLabel tfconfig.Variable `json:"saml2_sp_initiated_login_page_label,omitempty"` + Saml2SsoUrl tfconfig.Variable `json:"saml2_sso_url,omitempty"` + Saml2X509Cert tfconfig.Variable `json:"saml2_x509_cert,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func Saml2SecurityIntegration( + resourceName string, + name string, + saml2Issuer string, + saml2Provider string, + saml2SsoUrl string, + saml2X509Cert string, +) *Saml2SecurityIntegrationModel { + s := &Saml2SecurityIntegrationModel{ResourceModelMeta: config.Meta(resourceName, resources.Saml2SecurityIntegration)} + s.WithName(name) + s.WithSaml2Issuer(saml2Issuer) + s.WithSaml2Provider(saml2Provider) + s.WithSaml2SsoUrl(saml2SsoUrl) + s.WithSaml2X509Cert(saml2X509Cert) + return s +} + +func Saml2SecurityIntegrationWithDefaultMeta( + name string, + saml2Issuer string, + saml2Provider string, + saml2SsoUrl string, + saml2X509Cert string, +) *Saml2SecurityIntegrationModel { + s := &Saml2SecurityIntegrationModel{ResourceModelMeta: config.DefaultMeta(resources.Saml2SecurityIntegration)} + s.WithName(name) + s.WithSaml2Issuer(saml2Issuer) + s.WithSaml2Provider(saml2Provider) + s.WithSaml2SsoUrl(saml2SsoUrl) + s.WithSaml2X509Cert(saml2X509Cert) + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *Saml2SecurityIntegrationModel) MarshalJSON() ([]byte, error) { + type Alias Saml2SecurityIntegrationModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + }) +} + +func (s *Saml2SecurityIntegrationModel) WithDependsOn(values ...string) *Saml2SecurityIntegrationModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +// allowed_email_patterns attribute type is not yet supported, so WithAllowedEmailPatterns can't be generated + +// allowed_user_domains attribute type is not yet supported, so WithAllowedUserDomains can't be generated + +func (s *Saml2SecurityIntegrationModel) WithComment(comment string) *Saml2SecurityIntegrationModel { + s.Comment = tfconfig.StringVariable(comment) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithEnabled(enabled string) *Saml2SecurityIntegrationModel { + s.Enabled = tfconfig.StringVariable(enabled) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithFullyQualifiedName(fullyQualifiedName string) *Saml2SecurityIntegrationModel { + s.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithName(name string) *Saml2SecurityIntegrationModel { + s.Name = tfconfig.StringVariable(name) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2EnableSpInitiated(saml2EnableSpInitiated string) *Saml2SecurityIntegrationModel { + s.Saml2EnableSpInitiated = tfconfig.StringVariable(saml2EnableSpInitiated) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2ForceAuthn(saml2ForceAuthn string) *Saml2SecurityIntegrationModel { + s.Saml2ForceAuthn = tfconfig.StringVariable(saml2ForceAuthn) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2Issuer(saml2Issuer string) *Saml2SecurityIntegrationModel { + s.Saml2Issuer = tfconfig.StringVariable(saml2Issuer) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2PostLogoutRedirectUrl(saml2PostLogoutRedirectUrl string) *Saml2SecurityIntegrationModel { + s.Saml2PostLogoutRedirectUrl = tfconfig.StringVariable(saml2PostLogoutRedirectUrl) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2Provider(saml2Provider string) *Saml2SecurityIntegrationModel { + s.Saml2Provider = tfconfig.StringVariable(saml2Provider) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2RequestedNameidFormat(saml2RequestedNameidFormat string) *Saml2SecurityIntegrationModel { + s.Saml2RequestedNameidFormat = tfconfig.StringVariable(saml2RequestedNameidFormat) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SignRequest(saml2SignRequest string) *Saml2SecurityIntegrationModel { + s.Saml2SignRequest = tfconfig.StringVariable(saml2SignRequest) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SnowflakeAcsUrl(saml2SnowflakeAcsUrl string) *Saml2SecurityIntegrationModel { + s.Saml2SnowflakeAcsUrl = tfconfig.StringVariable(saml2SnowflakeAcsUrl) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SnowflakeIssuerUrl(saml2SnowflakeIssuerUrl string) *Saml2SecurityIntegrationModel { + s.Saml2SnowflakeIssuerUrl = tfconfig.StringVariable(saml2SnowflakeIssuerUrl) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SpInitiatedLoginPageLabel(saml2SpInitiatedLoginPageLabel string) *Saml2SecurityIntegrationModel { + s.Saml2SpInitiatedLoginPageLabel = tfconfig.StringVariable(saml2SpInitiatedLoginPageLabel) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SsoUrl(saml2SsoUrl string) *Saml2SecurityIntegrationModel { + s.Saml2SsoUrl = tfconfig.StringVariable(saml2SsoUrl) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2X509Cert(saml2X509Cert string) *Saml2SecurityIntegrationModel { + s.Saml2X509Cert = tfconfig.StringVariable(saml2X509Cert) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *Saml2SecurityIntegrationModel) WithAllowedEmailPatternsValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.AllowedEmailPatterns = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithAllowedUserDomainsValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.AllowedUserDomains = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithCommentValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Comment = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithEnabledValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Enabled = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.FullyQualifiedName = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithNameValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Name = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2EnableSpInitiatedValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2EnableSpInitiated = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2ForceAuthnValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2ForceAuthn = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2IssuerValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2Issuer = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2PostLogoutRedirectUrlValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2PostLogoutRedirectUrl = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2ProviderValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2Provider = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2RequestedNameidFormatValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2RequestedNameidFormat = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SignRequestValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2SignRequest = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SnowflakeAcsUrlValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2SnowflakeAcsUrl = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SnowflakeIssuerUrlValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2SnowflakeIssuerUrl = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SpInitiatedLoginPageLabelValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2SpInitiatedLoginPageLabel = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2SsoUrlValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2SsoUrl = value + return s +} + +func (s *Saml2SecurityIntegrationModel) WithSaml2X509CertValue(value tfconfig.Variable) *Saml2SecurityIntegrationModel { + s.Saml2X509Cert = value + return s +} diff --git a/pkg/acceptance/bettertestspoc/config/model/scim_security_integration_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/scim_security_integration_model_gen.go new file mode 100644 index 00000000000..e41068f1721 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/scim_security_integration_model_gen.go @@ -0,0 +1,166 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type ScimSecurityIntegrationModel struct { + Comment tfconfig.Variable `json:"comment,omitempty"` + Enabled tfconfig.Variable `json:"enabled,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + NetworkPolicy tfconfig.Variable `json:"network_policy,omitempty"` + RunAsRole tfconfig.Variable `json:"run_as_role,omitempty"` + ScimClient tfconfig.Variable `json:"scim_client,omitempty"` + SyncPassword tfconfig.Variable `json:"sync_password,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func ScimSecurityIntegration( + resourceName string, + enabled bool, + name string, + runAsRole string, + scimClient string, +) *ScimSecurityIntegrationModel { + s := &ScimSecurityIntegrationModel{ResourceModelMeta: config.Meta(resourceName, resources.ScimSecurityIntegration)} + s.WithEnabled(enabled) + s.WithName(name) + s.WithRunAsRole(runAsRole) + s.WithScimClient(scimClient) + return s +} + +func ScimSecurityIntegrationWithDefaultMeta( + enabled bool, + name string, + runAsRole string, + scimClient string, +) *ScimSecurityIntegrationModel { + s := &ScimSecurityIntegrationModel{ResourceModelMeta: config.DefaultMeta(resources.ScimSecurityIntegration)} + s.WithEnabled(enabled) + s.WithName(name) + s.WithRunAsRole(runAsRole) + s.WithScimClient(scimClient) + return s +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (s *ScimSecurityIntegrationModel) MarshalJSON() ([]byte, error) { + type Alias ScimSecurityIntegrationModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(s), + DependsOn: s.DependsOn(), + }) +} + +func (s *ScimSecurityIntegrationModel) WithDependsOn(values ...string) *ScimSecurityIntegrationModel { + s.SetDependsOn(values...) + return s +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (s *ScimSecurityIntegrationModel) WithComment(comment string) *ScimSecurityIntegrationModel { + s.Comment = tfconfig.StringVariable(comment) + return s +} + +func (s *ScimSecurityIntegrationModel) WithEnabled(enabled bool) *ScimSecurityIntegrationModel { + s.Enabled = tfconfig.BoolVariable(enabled) + return s +} + +func (s *ScimSecurityIntegrationModel) WithFullyQualifiedName(fullyQualifiedName string) *ScimSecurityIntegrationModel { + s.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return s +} + +func (s *ScimSecurityIntegrationModel) WithName(name string) *ScimSecurityIntegrationModel { + s.Name = tfconfig.StringVariable(name) + return s +} + +func (s *ScimSecurityIntegrationModel) WithNetworkPolicy(networkPolicy string) *ScimSecurityIntegrationModel { + s.NetworkPolicy = tfconfig.StringVariable(networkPolicy) + return s +} + +func (s *ScimSecurityIntegrationModel) WithRunAsRole(runAsRole string) *ScimSecurityIntegrationModel { + s.RunAsRole = tfconfig.StringVariable(runAsRole) + return s +} + +func (s *ScimSecurityIntegrationModel) WithScimClient(scimClient string) *ScimSecurityIntegrationModel { + s.ScimClient = tfconfig.StringVariable(scimClient) + return s +} + +func (s *ScimSecurityIntegrationModel) WithSyncPassword(syncPassword string) *ScimSecurityIntegrationModel { + s.SyncPassword = tfconfig.StringVariable(syncPassword) + return s +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (s *ScimSecurityIntegrationModel) WithCommentValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.Comment = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithEnabledValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.Enabled = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.FullyQualifiedName = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithNameValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.Name = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithNetworkPolicyValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.NetworkPolicy = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithRunAsRoleValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.RunAsRole = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithScimClientValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.ScimClient = value + return s +} + +func (s *ScimSecurityIntegrationModel) WithSyncPasswordValue(value tfconfig.Variable) *ScimSecurityIntegrationModel { + s.SyncPassword = value + return s +} From ae89d9340347e1be9bf280302ef8be6911f4b881 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:52:52 +0100 Subject: [PATCH 23/34] Set up multiple security integrations datasource test using builders --- .../gen/multiline_attributes_overrides.go | 29 +++---- .../saml2_security_integration_model_gen.go | 2 +- .../security_integrations_acceptance_test.go | 80 +++++++++---------- .../multiple_types/test.tf | 20 ----- .../multiple_types/variables.tf | 34 -------- 5 files changed, 52 insertions(+), 113 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go b/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go index a3f188f6ee2..dcf459c4ef6 100644 --- a/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go +++ b/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go @@ -1,18 +1,19 @@ package gen var multilineAttributesOverrides = map[string][]string{ - "User": {"rsa_public_key", "rsa_public_key_2"}, - "ServiceUser": {"rsa_public_key", "rsa_public_key_2"}, - "LegacyServiceUser": {"rsa_public_key", "rsa_public_key_2"}, - "FunctionJava": {"function_definition"}, - "FunctionJavascript": {"function_definition"}, - "FunctionPython": {"function_definition"}, - "FunctionScala": {"function_definition"}, - "FunctionSql": {"function_definition"}, - "ProcedureJava": {"procedure_definition"}, - "ProcedureJavascript": {"procedure_definition"}, - "ProcedurePython": {"procedure_definition"}, - "ProcedureScala": {"procedure_definition"}, - "ProcedureSql": {"procedure_definition"}, - "Account": {"admin_rsa_public_key"}, + "User": {"rsa_public_key", "rsa_public_key_2"}, + "ServiceUser": {"rsa_public_key", "rsa_public_key_2"}, + "LegacyServiceUser": {"rsa_public_key", "rsa_public_key_2"}, + "FunctionJava": {"function_definition"}, + "FunctionJavascript": {"function_definition"}, + "FunctionPython": {"function_definition"}, + "FunctionScala": {"function_definition"}, + "FunctionSql": {"function_definition"}, + "ProcedureJava": {"procedure_definition"}, + "ProcedureJavascript": {"procedure_definition"}, + "ProcedurePython": {"procedure_definition"}, + "ProcedureScala": {"procedure_definition"}, + "ProcedureSql": {"procedure_definition"}, + "Account": {"admin_rsa_public_key"}, + "Saml2SecurityIntegration": {"saml2_x509_cert"}, } diff --git a/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go index 8b6a89e9545..c768f1acc93 100644 --- a/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_gen.go @@ -175,7 +175,7 @@ func (s *Saml2SecurityIntegrationModel) WithSaml2SsoUrl(saml2SsoUrl string) *Sam } func (s *Saml2SecurityIntegrationModel) WithSaml2X509Cert(saml2X509Cert string) *Saml2SecurityIntegrationModel { - s.Saml2X509Cert = tfconfig.StringVariable(saml2X509Cert) + s.Saml2X509Cert = config.MultilineWrapperVariable(saml2X509Cert) return s } diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 070f8442f57..b3588353202 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -6,7 +6,10 @@ 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/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" @@ -22,28 +25,18 @@ func TestAcc_SecurityIntegrations_MultipleTypes(t *testing.T) { acc.TestAccPreCheck(t) prefix := random.AlphaN(4) - idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) - idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) + idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix + "1") + idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix + "2") issuer := acc.TestClient().Ids.Alpha() cert := random.GenerateX509(t) - validUrl := "http://example.com" - + validUrl := "https://example.com" role := snowflakeroles.GenericScimProvisioner - configVariables := config.Variables{ - // saml2 - "name_1": config.StringVariable(idOne.Name()), - "saml2_issuer": config.StringVariable(issuer), - "saml2_provider": config.StringVariable(string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - "saml2_sso_url": config.StringVariable(validUrl), - "saml2_x509_cert": config.StringVariable(cert), - // scim - "name_2": config.StringVariable(idTwo.Name()), - "scim_client": config.StringVariable(string(sdk.ScimSecurityIntegrationScimClientGeneric)), - "run_as_role": config.StringVariable(role.Name()), - "enabled": config.BoolVariable(true), - "like": config.StringVariable(prefix + "%"), - } + saml2Model := model.Saml2SecurityIntegration("test", idOne.Name(), issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert) + scimModel := model.ScimSecurityIntegration("test", true, idTwo.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(prefix+"%"). + WithDependsOn(saml2Model.ResourceReference(), scimModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -53,33 +46,32 @@ func TestAcc_SecurityIntegrations_MultipleTypes(t *testing.T) { }, Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/multiple_types"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, scimModel, saml2Model, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "2"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", idOne.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.run_as_role.0.value", "GENERIC_SCIM_PROVISIONER"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.sync_password.0.value", "true"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.show_output.0.name", idTwo.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.show_output.0.category", sdk.SecurityIntegrationCategory), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.show_output.0.enabled", "false"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.1.show_output.0.created_on"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.describe_output.0.saml2_issuer.0.value", issuer), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.describe_output.0.saml2_provider.0.value", "CUSTOM"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.describe_output.0.saml2_sso_url.0.value", validUrl), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.1.describe_output.0.saml2_x509_cert.0.value", cert), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "2"), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", idTwo.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.run_as_role.0.value", "GENERIC_SCIM_PROVISIONER"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.sync_password.0.value", "true"), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.show_output.0.name", idOne.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.show_output.0.category", sdk.SecurityIntegrationCategory), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.show_output.0.enabled", "false"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.show_output.0.created_on"), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.describe_output.0.saml2_issuer.0.value", issuer), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.describe_output.0.saml2_provider.0.value", "CUSTOM"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.describe_output.0.saml2_sso_url.0.value", validUrl), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.1.describe_output.0.saml2_x509_cert.0.value", cert), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/test.tf deleted file mode 100644 index dfaf0ebbd7f..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/test.tf +++ /dev/null @@ -1,20 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name_1 - scim_client = var.scim_client - run_as_role = var.run_as_role - enabled = var.enabled -} - -resource "snowflake_saml2_integration" "test" { - name = var.name_2 - saml2_issuer = var.saml2_issuer - saml2_sso_url = var.saml2_sso_url - saml2_provider = var.saml2_provider - saml2_x509_cert = var.saml2_x509_cert -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_scim_integration.test, snowflake_saml2_integration.test] - - like = var.like -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/variables.tf deleted file mode 100644 index 960c2cf8477..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/multiple_types/variables.tf +++ /dev/null @@ -1,34 +0,0 @@ -# saml2 -variable "name_1" { - type = string -} -variable "saml2_issuer" { - type = string -} -variable "saml2_provider" { - type = string -} -variable "saml2_sso_url" { - type = string -} -variable "saml2_x509_cert" { - type = string -} - -# scim -variable "name_2" { - type = string -} -variable "scim_client" { - type = string -} -variable "run_as_role" { - type = string -} -variable "enabled" { - type = bool -} - -variable "like" { - type = string -} From 4292b0ae39a5e95f3d50d1a86884ef88ded53af7 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 17:56:56 +0100 Subject: [PATCH 24/34] Generate two api authentication integration model builders --- .../resourceassert/gen/resource_schema_def.go | 8 + ...with_authorization_code_grant_model_gen.go | 207 ++++++++++++++++++ ...ation_with_client_credentials_model_gen.go | 196 +++++++++++++++++ 3 files changed, 411 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_authorization_code_grant_model_gen.go create mode 100644 pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_client_credentials_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go index d94334c4469..d424edd1822 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -189,4 +189,12 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "Saml2SecurityIntegration", schema: resources.SAML2Integration().Schema, }, + { + name: "ApiAuthenticationIntegrationWithAuthorizationCodeGrant", + schema: resources.ApiAuthenticationIntegrationWithAuthorizationCodeGrant().Schema, + }, + { + name: "ApiAuthenticationIntegrationWithClientCredentials", + schema: resources.ApiAuthenticationIntegrationWithClientCredentials().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_authorization_code_grant_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_authorization_code_grant_model_gen.go new file mode 100644 index 00000000000..528f0d5eeb8 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_authorization_code_grant_model_gen.go @@ -0,0 +1,207 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel struct { + Comment tfconfig.Variable `json:"comment,omitempty"` + Enabled tfconfig.Variable `json:"enabled,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + OauthAccessTokenValidity tfconfig.Variable `json:"oauth_access_token_validity,omitempty"` + OauthAllowedScopes tfconfig.Variable `json:"oauth_allowed_scopes,omitempty"` + OauthAuthorizationEndpoint tfconfig.Variable `json:"oauth_authorization_endpoint,omitempty"` + OauthClientAuthMethod tfconfig.Variable `json:"oauth_client_auth_method,omitempty"` + OauthClientId tfconfig.Variable `json:"oauth_client_id,omitempty"` + OauthClientSecret tfconfig.Variable `json:"oauth_client_secret,omitempty"` + OauthRefreshTokenValidity tfconfig.Variable `json:"oauth_refresh_token_validity,omitempty"` + OauthTokenEndpoint tfconfig.Variable `json:"oauth_token_endpoint,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func ApiAuthenticationIntegrationWithAuthorizationCodeGrant( + resourceName string, + enabled bool, + name string, + oauthClientId string, + oauthClientSecret string, +) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a := &ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel{ResourceModelMeta: config.Meta(resourceName, resources.ApiAuthenticationIntegrationWithAuthorizationCodeGrant)} + a.WithEnabled(enabled) + a.WithName(name) + a.WithOauthClientId(oauthClientId) + a.WithOauthClientSecret(oauthClientSecret) + return a +} + +func ApiAuthenticationIntegrationWithAuthorizationCodeGrantWithDefaultMeta( + enabled bool, + name string, + oauthClientId string, + oauthClientSecret string, +) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a := &ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel{ResourceModelMeta: config.DefaultMeta(resources.ApiAuthenticationIntegrationWithAuthorizationCodeGrant)} + a.WithEnabled(enabled) + a.WithName(name) + a.WithOauthClientId(oauthClientId) + a.WithOauthClientSecret(oauthClientSecret) + return a +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) MarshalJSON() ([]byte, error) { + type Alias ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(a), + DependsOn: a.DependsOn(), + }) +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithDependsOn(values ...string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.SetDependsOn(values...) + return a +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithComment(comment string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Comment = tfconfig.StringVariable(comment) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithEnabled(enabled bool) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Enabled = tfconfig.BoolVariable(enabled) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithFullyQualifiedName(fullyQualifiedName string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithName(name string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Name = tfconfig.StringVariable(name) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthAccessTokenValidity(oauthAccessTokenValidity int) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthAccessTokenValidity = tfconfig.IntegerVariable(oauthAccessTokenValidity) + return a +} + +// oauth_allowed_scopes attribute type is not yet supported, so WithOauthAllowedScopes can't be generated + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthAuthorizationEndpoint(oauthAuthorizationEndpoint string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthAuthorizationEndpoint = tfconfig.StringVariable(oauthAuthorizationEndpoint) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientAuthMethod(oauthClientAuthMethod string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientAuthMethod = tfconfig.StringVariable(oauthClientAuthMethod) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientId(oauthClientId string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientId = tfconfig.StringVariable(oauthClientId) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientSecret(oauthClientSecret string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientSecret = tfconfig.StringVariable(oauthClientSecret) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthRefreshTokenValidity(oauthRefreshTokenValidity int) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthRefreshTokenValidity = tfconfig.IntegerVariable(oauthRefreshTokenValidity) + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthTokenEndpoint(oauthTokenEndpoint string) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthTokenEndpoint = tfconfig.StringVariable(oauthTokenEndpoint) + return a +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithCommentValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Comment = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithEnabledValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Enabled = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.FullyQualifiedName = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithNameValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.Name = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthAccessTokenValidityValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthAccessTokenValidity = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthAllowedScopesValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthAllowedScopes = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthAuthorizationEndpointValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthAuthorizationEndpoint = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientAuthMethodValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientAuthMethod = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientIdValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientId = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthClientSecretValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthClientSecret = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthRefreshTokenValidityValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthRefreshTokenValidity = value + return a +} + +func (a *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel) WithOauthTokenEndpointValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithAuthorizationCodeGrantModel { + a.OauthTokenEndpoint = value + return a +} diff --git a/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_client_credentials_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_client_credentials_model_gen.go new file mode 100644 index 00000000000..8aced921e7a --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/api_authentication_integration_with_client_credentials_model_gen.go @@ -0,0 +1,196 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type ApiAuthenticationIntegrationWithClientCredentialsModel struct { + Comment tfconfig.Variable `json:"comment,omitempty"` + Enabled tfconfig.Variable `json:"enabled,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + OauthAccessTokenValidity tfconfig.Variable `json:"oauth_access_token_validity,omitempty"` + OauthAllowedScopes tfconfig.Variable `json:"oauth_allowed_scopes,omitempty"` + OauthClientAuthMethod tfconfig.Variable `json:"oauth_client_auth_method,omitempty"` + OauthClientId tfconfig.Variable `json:"oauth_client_id,omitempty"` + OauthClientSecret tfconfig.Variable `json:"oauth_client_secret,omitempty"` + OauthRefreshTokenValidity tfconfig.Variable `json:"oauth_refresh_token_validity,omitempty"` + OauthTokenEndpoint tfconfig.Variable `json:"oauth_token_endpoint,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func ApiAuthenticationIntegrationWithClientCredentials( + resourceName string, + enabled bool, + name string, + oauthClientId string, + oauthClientSecret string, +) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a := &ApiAuthenticationIntegrationWithClientCredentialsModel{ResourceModelMeta: config.Meta(resourceName, resources.ApiAuthenticationIntegrationWithClientCredentials)} + a.WithEnabled(enabled) + a.WithName(name) + a.WithOauthClientId(oauthClientId) + a.WithOauthClientSecret(oauthClientSecret) + return a +} + +func ApiAuthenticationIntegrationWithClientCredentialsWithDefaultMeta( + enabled bool, + name string, + oauthClientId string, + oauthClientSecret string, +) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a := &ApiAuthenticationIntegrationWithClientCredentialsModel{ResourceModelMeta: config.DefaultMeta(resources.ApiAuthenticationIntegrationWithClientCredentials)} + a.WithEnabled(enabled) + a.WithName(name) + a.WithOauthClientId(oauthClientId) + a.WithOauthClientSecret(oauthClientSecret) + return a +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) MarshalJSON() ([]byte, error) { + type Alias ApiAuthenticationIntegrationWithClientCredentialsModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(a), + DependsOn: a.DependsOn(), + }) +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithDependsOn(values ...string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.SetDependsOn(values...) + return a +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithComment(comment string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Comment = tfconfig.StringVariable(comment) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithEnabled(enabled bool) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Enabled = tfconfig.BoolVariable(enabled) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithFullyQualifiedName(fullyQualifiedName string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithName(name string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Name = tfconfig.StringVariable(name) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthAccessTokenValidity(oauthAccessTokenValidity int) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthAccessTokenValidity = tfconfig.IntegerVariable(oauthAccessTokenValidity) + return a +} + +// oauth_allowed_scopes attribute type is not yet supported, so WithOauthAllowedScopes can't be generated + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientAuthMethod(oauthClientAuthMethod string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientAuthMethod = tfconfig.StringVariable(oauthClientAuthMethod) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientId(oauthClientId string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientId = tfconfig.StringVariable(oauthClientId) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientSecret(oauthClientSecret string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientSecret = tfconfig.StringVariable(oauthClientSecret) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthRefreshTokenValidity(oauthRefreshTokenValidity int) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthRefreshTokenValidity = tfconfig.IntegerVariable(oauthRefreshTokenValidity) + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthTokenEndpoint(oauthTokenEndpoint string) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthTokenEndpoint = tfconfig.StringVariable(oauthTokenEndpoint) + return a +} + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithCommentValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Comment = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithEnabledValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Enabled = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.FullyQualifiedName = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithNameValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.Name = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthAccessTokenValidityValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthAccessTokenValidity = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthAllowedScopesValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthAllowedScopes = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientAuthMethodValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientAuthMethod = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientIdValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientId = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthClientSecretValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthClientSecret = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthRefreshTokenValidityValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthRefreshTokenValidity = value + return a +} + +func (a *ApiAuthenticationIntegrationWithClientCredentialsModel) WithOauthTokenEndpointValue(value tfconfig.Variable) *ApiAuthenticationIntegrationWithClientCredentialsModel { + a.OauthTokenEndpoint = value + return a +} From f2689970e27d0126af3ae7c5ad0b6d23b9c037b0 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Fri, 14 Mar 2025 18:05:30 +0100 Subject: [PATCH 25/34] Set up test with code grant using builders --- .../security_integrations_acceptance_test.go | 98 +++++++++---------- .../optionals_set/test.tf | 19 ---- .../optionals_set/variables.tf | 33 ------- .../optionals_unset/test.tf | 20 ---- .../optionals_unset/variables.tf | 33 ------- 5 files changed, 49 insertions(+), 154 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/variables.tf diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index b3588353202..7915b43dd7d 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -83,22 +83,24 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithAuthorizationCodeGrant(t acc.TestAccPreCheck(t) id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + pass := random.Password() + comment := random.Comment() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "comment": config.StringVariable("foo"), - "enabled": config.BoolVariable(true), - "name": config.StringVariable(id.Name()), - "oauth_access_token_validity": config.IntegerVariable(42), - "oauth_authorization_endpoint": config.StringVariable("https://example.com"), - "oauth_client_auth_method": config.StringVariable(string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), - "oauth_client_id": config.StringVariable("foo"), - "oauth_client_secret": config.StringVariable("foo"), - "oauth_refresh_token_validity": config.IntegerVariable(12345), - "oauth_token_endpoint": config.StringVariable("https://example.com"), - "oauth_allowed_scopes": config.SetVariable(config.StringVariable("foo")), - } - } + resourceModel := model.ApiAuthenticationIntegrationWithAuthorizationCodeGrant("test", true, id.Name(), "foo", pass). + WithComment(comment). + WithOauthAccessTokenValidity(42). + WithOauthAuthorizationEndpoint("https://example.com"). + WithOauthClientAuthMethod(string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)). + WithOauthRefreshTokenValidity(12345). + WithOauthTokenEndpoint("https://example.com"). + WithOauthAllowedScopesValue(config.SetVariable(config.StringVariable("foo"))) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -109,48 +111,46 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithAuthorizationCodeGrant(t CheckDestroy: acc.CheckDestroy(t, resources.ApiAuthenticationIntegrationWithAuthorizationCodeGrant), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_access_token_validity.0.value", "42"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "12345"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_id.0.value", "foo"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_auth_method.0.value", string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value", "https://example.com"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value", "https://example.com"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_scopes.0.value", "[foo]"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_grant.0.value", sdk.ApiAuthenticationSecurityIntegrationOauthGrantAuthorizationCode), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.parent_integration.0.value", ""), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.auth_type.0.value", "OAUTH2"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", "foo")), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_access_token_validity.0.value", "42"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "12345"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_id.0.value", "foo"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_auth_method.0.value", string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value", "https://example.com"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value", "https://example.com"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_scopes.0.value", "[foo]"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_grant.0.value", sdk.ApiAuthenticationSecurityIntegrationOauthGrantAuthorizationCode), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.parent_integration.0.value", ""), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.auth_type.0.value", "OAUTH2"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment)), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/test.tf deleted file mode 100644 index 930dad11c28..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/test.tf +++ /dev/null @@ -1,19 +0,0 @@ -resource "snowflake_api_authentication_integration_with_authorization_code_grant" "test" { - comment = var.comment - enabled = var.enabled - name = var.name - oauth_access_token_validity = var.oauth_access_token_validity - oauth_authorization_endpoint = var.oauth_authorization_endpoint - oauth_client_auth_method = var.oauth_client_auth_method - oauth_client_id = var.oauth_client_id - oauth_client_secret = var.oauth_client_secret - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_token_endpoint = var.oauth_token_endpoint - oauth_allowed_scopes = var.oauth_allowed_scopes -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_api_authentication_integration_with_authorization_code_grant.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/variables.tf deleted file mode 100644 index 06e9998ff53..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_set/variables.tf +++ /dev/null @@ -1,33 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "oauth_access_token_validity" { - type = number -} -variable "oauth_authorization_endpoint" { - type = string -} -variable "oauth_client_auth_method" { - type = string -} -variable "oauth_client_id" { - type = string -} -variable "oauth_client_secret" { - type = string -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_token_endpoint" { - type = string -} -variable "oauth_allowed_scopes" { - type = set(string) -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/test.tf deleted file mode 100644 index c96b04b898e..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/test.tf +++ /dev/null @@ -1,20 +0,0 @@ -resource "snowflake_api_authentication_integration_with_authorization_code_grant" "test" { - comment = var.comment - enabled = var.enabled - name = var.name - oauth_access_token_validity = var.oauth_access_token_validity - oauth_authorization_endpoint = var.oauth_authorization_endpoint - oauth_client_auth_method = var.oauth_client_auth_method - oauth_client_id = var.oauth_client_id - oauth_client_secret = var.oauth_client_secret - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_token_endpoint = var.oauth_token_endpoint - oauth_allowed_scopes = var.oauth_allowed_scopes -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_api_authentication_integration_with_authorization_code_grant.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/variables.tf deleted file mode 100644 index 06e9998ff53..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_authorization_code_grant/optionals_unset/variables.tf +++ /dev/null @@ -1,33 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "oauth_access_token_validity" { - type = number -} -variable "oauth_authorization_endpoint" { - type = string -} -variable "oauth_client_auth_method" { - type = string -} -variable "oauth_client_id" { - type = string -} -variable "oauth_client_secret" { - type = string -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_token_endpoint" { - type = string -} -variable "oauth_allowed_scopes" { - type = set(string) -} From 320c531b70f3f5b8ec362de5d48cac58a4fe5b66 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Sun, 16 Mar 2025 23:22:44 +0100 Subject: [PATCH 26/34] Set up test with client credentials using builders --- .../security_integrations_acceptance_test.go | 95 ++++++++++--------- .../optionals_set/test.tf | 18 ---- .../optionals_set/variables.tf | 30 ------ .../optionals_unset/test.tf | 19 ---- .../optionals_unset/variables.tf | 30 ------ 5 files changed, 48 insertions(+), 144 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/variables.tf diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 7915b43dd7d..d65f83139ec 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -162,21 +162,24 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithClientCredentials(t *test acc.TestAccPreCheck(t) id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + pass1 := random.Password() + pass2 := random.Password() + comment := random.Comment() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "comment": config.StringVariable("foo"), - "enabled": config.BoolVariable(true), - "name": config.StringVariable(id.Name()), - "oauth_access_token_validity": config.IntegerVariable(42), - "oauth_client_auth_method": config.StringVariable(string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), - "oauth_client_id": config.StringVariable("foo"), - "oauth_client_secret": config.StringVariable("foo"), - "oauth_refresh_token_validity": config.IntegerVariable(12345), - "oauth_token_endpoint": config.StringVariable("https://example.com"), - "oauth_allowed_scopes": config.SetVariable(config.StringVariable("foo")), - } - } + resourceModel := model.ApiAuthenticationIntegrationWithClientCredentials("test", true, id.Name(), pass1, pass2). + WithComment(comment). + WithOauthAccessTokenValidity(42). + WithOauthClientAuthMethod(string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)). + WithOauthRefreshTokenValidity(12345). + WithOauthTokenEndpoint("https://example.com"). + WithOauthAllowedScopesValue(config.SetVariable(config.StringVariable("foo"))) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -187,47 +190,45 @@ func TestAcc_SecurityIntegrations_ApiAuthenticationWithClientCredentials(t *test CheckDestroy: acc.CheckDestroy(t, resources.ApiAuthenticationIntegrationWithClientCredentials), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_access_token_validity.0.value", "42"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "12345"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_id.0.value", "foo"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_auth_method.0.value", string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value", "https://example.com"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_scopes.0.value", "[foo]"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_grant.0.value", sdk.ApiAuthenticationSecurityIntegrationOauthGrantClientCredentials), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.parent_integration.0.value", ""), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.auth_type.0.value", "OAUTH2"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", "foo")), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_access_token_validity.0.value", "42"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "12345"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_id.0.value", pass1), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_auth_method.0.value", string(sdk.ApiAuthenticationSecurityIntegrationOauthClientAuthMethodClientSecretPost)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value", "https://example.com"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_scopes.0.value", "[foo]"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_grant.0.value", sdk.ApiAuthenticationSecurityIntegrationOauthGrantClientCredentials), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.parent_integration.0.value", ""), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.auth_type.0.value", "OAUTH2"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment)), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "API_AUTHENTICATION"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/test.tf deleted file mode 100644 index bf8e125fe00..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/test.tf +++ /dev/null @@ -1,18 +0,0 @@ -resource "snowflake_api_authentication_integration_with_client_credentials" "test" { - comment = var.comment - enabled = var.enabled - name = var.name - oauth_access_token_validity = var.oauth_access_token_validity - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_client_auth_method = var.oauth_client_auth_method - oauth_client_id = var.oauth_client_id - oauth_client_secret = var.oauth_client_secret - oauth_token_endpoint = var.oauth_token_endpoint - oauth_allowed_scopes = var.oauth_allowed_scopes -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_api_authentication_integration_with_client_credentials.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/variables.tf deleted file mode 100644 index 4ccccac436a..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_set/variables.tf +++ /dev/null @@ -1,30 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "oauth_access_token_validity" { - type = number -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_client_auth_method" { - type = string -} -variable "oauth_client_id" { - type = string -} -variable "oauth_client_secret" { - type = string -} -variable "oauth_token_endpoint" { - type = string -} -variable "oauth_allowed_scopes" { - type = set(string) -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/test.tf deleted file mode 100644 index 487a75acc7b..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/test.tf +++ /dev/null @@ -1,19 +0,0 @@ -resource "snowflake_api_authentication_integration_with_client_credentials" "test" { - comment = var.comment - enabled = var.enabled - name = var.name - oauth_access_token_validity = var.oauth_access_token_validity - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_client_auth_method = var.oauth_client_auth_method - oauth_client_id = var.oauth_client_id - oauth_client_secret = var.oauth_client_secret - oauth_token_endpoint = var.oauth_token_endpoint - oauth_allowed_scopes = var.oauth_allowed_scopes -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_api_authentication_integration_with_client_credentials.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/variables.tf deleted file mode 100644 index 4ccccac436a..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/api_authentication_with_client_credentials/optionals_unset/variables.tf +++ /dev/null @@ -1,30 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "oauth_access_token_validity" { - type = number -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_client_auth_method" { - type = string -} -variable "oauth_client_id" { - type = string -} -variable "oauth_client_secret" { - type = string -} -variable "oauth_token_endpoint" { - type = string -} -variable "oauth_allowed_scopes" { - type = set(string) -} From 330937c3c5a761bb15f0bdc5bdd36c53efaa8912 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Sun, 16 Mar 2025 23:31:24 +0100 Subject: [PATCH 27/34] Generate external oauth security integration model builders --- .../resourceassert/gen/resource_schema_def.go | 4 + ...al_oauth_security_integration_model_ext.go | 10 + ...al_oauth_security_integration_model_gen.go | 266 ++++++++++++++++++ 3 files changed, 280 insertions(+) create mode 100644 pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go create mode 100644 pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_gen.go diff --git a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go index d424edd1822..f7b1fa200f2 100644 --- a/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go +++ b/pkg/acceptance/bettertestspoc/assert/resourceassert/gen/resource_schema_def.go @@ -197,4 +197,8 @@ var allResourceSchemaDefs = []ResourceSchemaDef{ name: "ApiAuthenticationIntegrationWithClientCredentials", schema: resources.ApiAuthenticationIntegrationWithClientCredentials().Schema, }, + { + name: "ExternalOauthSecurityIntegration", + schema: resources.ExternalOauthIntegration().Schema, + }, } diff --git a/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go new file mode 100644 index 00000000000..3af41a21b45 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go @@ -0,0 +1,10 @@ +package model + +import tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + +// WithExternalOauthTokenUserMappingClaim was added to satisfy the default builders. The method itself is not generated because its type is not yet supported. +// This method will conflict the generated one when the type is supported. +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthTokenUserMappingClaim(externalOauthTokenUserMappingClaim string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthTokenUserMappingClaim = tfconfig.StringVariable(externalOauthTokenUserMappingClaim) + return e +} diff --git a/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_gen.go new file mode 100644 index 00000000000..b4987e16f83 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_gen.go @@ -0,0 +1,266 @@ +// Code generated by config model builder generator; DO NOT EDIT. + +package model + +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/resources" +) + +type ExternalOauthSecurityIntegrationModel struct { + Comment tfconfig.Variable `json:"comment,omitempty"` + Enabled tfconfig.Variable `json:"enabled,omitempty"` + ExternalOauthAllowedRolesList tfconfig.Variable `json:"external_oauth_allowed_roles_list,omitempty"` + ExternalOauthAnyRoleMode tfconfig.Variable `json:"external_oauth_any_role_mode,omitempty"` + ExternalOauthAudienceList tfconfig.Variable `json:"external_oauth_audience_list,omitempty"` + ExternalOauthBlockedRolesList tfconfig.Variable `json:"external_oauth_blocked_roles_list,omitempty"` + ExternalOauthIssuer tfconfig.Variable `json:"external_oauth_issuer,omitempty"` + ExternalOauthJwsKeysUrl tfconfig.Variable `json:"external_oauth_jws_keys_url,omitempty"` + ExternalOauthRsaPublicKey tfconfig.Variable `json:"external_oauth_rsa_public_key,omitempty"` + ExternalOauthRsaPublicKey2 tfconfig.Variable `json:"external_oauth_rsa_public_key_2,omitempty"` + ExternalOauthScopeDelimiter tfconfig.Variable `json:"external_oauth_scope_delimiter,omitempty"` + ExternalOauthScopeMappingAttribute tfconfig.Variable `json:"external_oauth_scope_mapping_attribute,omitempty"` + ExternalOauthSnowflakeUserMappingAttribute tfconfig.Variable `json:"external_oauth_snowflake_user_mapping_attribute,omitempty"` + ExternalOauthTokenUserMappingClaim tfconfig.Variable `json:"external_oauth_token_user_mapping_claim,omitempty"` + ExternalOauthType tfconfig.Variable `json:"external_oauth_type,omitempty"` + FullyQualifiedName tfconfig.Variable `json:"fully_qualified_name,omitempty"` + Name tfconfig.Variable `json:"name,omitempty"` + RelatedParameters tfconfig.Variable `json:"related_parameters,omitempty"` + + *config.ResourceModelMeta +} + +///////////////////////////////////////////////// +// Basic builders (resource name and required) // +///////////////////////////////////////////////// + +func ExternalOauthSecurityIntegration( + resourceName string, + enabled bool, + externalOauthIssuer string, + externalOauthSnowflakeUserMappingAttribute string, + externalOauthTokenUserMappingClaim, + externalOauthType string, + name string, +) *ExternalOauthSecurityIntegrationModel { + e := &ExternalOauthSecurityIntegrationModel{ResourceModelMeta: config.Meta(resourceName, resources.ExternalOauthSecurityIntegration)} + e.WithEnabled(enabled) + e.WithExternalOauthIssuer(externalOauthIssuer) + e.WithExternalOauthSnowflakeUserMappingAttribute(externalOauthSnowflakeUserMappingAttribute) + e.WithExternalOauthTokenUserMappingClaim(externalOauthTokenUserMappingClaim) + e.WithExternalOauthType(externalOauthType) + e.WithName(name) + return e +} + +func ExternalOauthSecurityIntegrationWithDefaultMeta( + enabled bool, + externalOauthIssuer string, + externalOauthSnowflakeUserMappingAttribute string, + externalOauthTokenUserMappingClaim, + externalOauthType string, + name string, +) *ExternalOauthSecurityIntegrationModel { + e := &ExternalOauthSecurityIntegrationModel{ResourceModelMeta: config.DefaultMeta(resources.ExternalOauthSecurityIntegration)} + e.WithEnabled(enabled) + e.WithExternalOauthIssuer(externalOauthIssuer) + e.WithExternalOauthSnowflakeUserMappingAttribute(externalOauthSnowflakeUserMappingAttribute) + e.WithExternalOauthTokenUserMappingClaim(externalOauthTokenUserMappingClaim) + e.WithExternalOauthType(externalOauthType) + e.WithName(name) + return e +} + +/////////////////////////////////////////////////////// +// set proper json marshalling and handle depends on // +/////////////////////////////////////////////////////// + +func (e *ExternalOauthSecurityIntegrationModel) MarshalJSON() ([]byte, error) { + type Alias ExternalOauthSecurityIntegrationModel + return json.Marshal(&struct { + *Alias + DependsOn []string `json:"depends_on,omitempty"` + }{ + Alias: (*Alias)(e), + DependsOn: e.DependsOn(), + }) +} + +func (e *ExternalOauthSecurityIntegrationModel) WithDependsOn(values ...string) *ExternalOauthSecurityIntegrationModel { + e.SetDependsOn(values...) + return e +} + +///////////////////////////////// +// below all the proper values // +///////////////////////////////// + +func (e *ExternalOauthSecurityIntegrationModel) WithComment(comment string) *ExternalOauthSecurityIntegrationModel { + e.Comment = tfconfig.StringVariable(comment) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithEnabled(enabled bool) *ExternalOauthSecurityIntegrationModel { + e.Enabled = tfconfig.BoolVariable(enabled) + return e +} + +// external_oauth_allowed_roles_list attribute type is not yet supported, so WithExternalOauthAllowedRolesList can't be generated + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAnyRoleMode(externalOauthAnyRoleMode string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAnyRoleMode = tfconfig.StringVariable(externalOauthAnyRoleMode) + return e +} + +// external_oauth_audience_list attribute type is not yet supported, so WithExternalOauthAudienceList can't be generated + +// external_oauth_blocked_roles_list attribute type is not yet supported, so WithExternalOauthBlockedRolesList can't be generated + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthIssuer(externalOauthIssuer string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthIssuer = tfconfig.StringVariable(externalOauthIssuer) + return e +} + +// external_oauth_jws_keys_url attribute type is not yet supported, so WithExternalOauthJwsKeysUrl can't be generated + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthRsaPublicKey(externalOauthRsaPublicKey string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthRsaPublicKey = tfconfig.StringVariable(externalOauthRsaPublicKey) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthRsaPublicKey2(externalOauthRsaPublicKey2 string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthRsaPublicKey2 = tfconfig.StringVariable(externalOauthRsaPublicKey2) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthScopeDelimiter(externalOauthScopeDelimiter string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthScopeDelimiter = tfconfig.StringVariable(externalOauthScopeDelimiter) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthScopeMappingAttribute(externalOauthScopeMappingAttribute string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthScopeMappingAttribute = tfconfig.StringVariable(externalOauthScopeMappingAttribute) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthSnowflakeUserMappingAttribute(externalOauthSnowflakeUserMappingAttribute string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthSnowflakeUserMappingAttribute = tfconfig.StringVariable(externalOauthSnowflakeUserMappingAttribute) + return e +} + +// external_oauth_token_user_mapping_claim attribute type is not yet supported, so WithExternalOauthTokenUserMappingClaim can't be generated + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthType(externalOauthType string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthType = tfconfig.StringVariable(externalOauthType) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithFullyQualifiedName(fullyQualifiedName string) *ExternalOauthSecurityIntegrationModel { + e.FullyQualifiedName = tfconfig.StringVariable(fullyQualifiedName) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithName(name string) *ExternalOauthSecurityIntegrationModel { + e.Name = tfconfig.StringVariable(name) + return e +} + +// related_parameters attribute type is not yet supported, so WithRelatedParameters can't be generated + +////////////////////////////////////////// +// below it's possible to set any value // +////////////////////////////////////////// + +func (e *ExternalOauthSecurityIntegrationModel) WithCommentValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.Comment = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithEnabledValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.Enabled = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAllowedRolesListValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAllowedRolesList = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAnyRoleModeValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAnyRoleMode = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAudienceListValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAudienceList = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthBlockedRolesListValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthBlockedRolesList = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthIssuerValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthIssuer = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthJwsKeysUrlValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthJwsKeysUrl = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthRsaPublicKeyValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthRsaPublicKey = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthRsaPublicKey2Value(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthRsaPublicKey2 = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthScopeDelimiterValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthScopeDelimiter = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthScopeMappingAttributeValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthScopeMappingAttribute = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthSnowflakeUserMappingAttributeValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthSnowflakeUserMappingAttribute = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthTokenUserMappingClaimValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthTokenUserMappingClaim = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthTypeValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthType = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithFullyQualifiedNameValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.FullyQualifiedName = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithNameValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.Name = value + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithRelatedParametersValue(value tfconfig.Variable) *ExternalOauthSecurityIntegrationModel { + e.RelatedParameters = value + return e +} From ef3621e3a4a709b7d70e116e6670c7286c9f553b Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Sun, 16 Mar 2025 23:50:27 +0100 Subject: [PATCH 28/34] Set up external oauth security integration datasource acceptance test using builders --- ...al_oauth_security_integration_model_ext.go | 36 +++++- .../security_integrations_acceptance_test.go | 104 +++++++++--------- .../external_oauth/optionals_set/test.tf | 21 ---- .../external_oauth/optionals_set/variables.tf | 39 ------- .../external_oauth/optionals_unset/test.tf | 22 ---- .../optionals_unset/variables.tf | 39 ------- pkg/provider/resources/resources.go | 2 +- 7 files changed, 88 insertions(+), 175 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go index 3af41a21b45..67a5ff88a97 100644 --- a/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/model/external_oauth_security_integration_model_ext.go @@ -1,10 +1,42 @@ package model -import tfconfig "github.com/hashicorp/terraform-plugin-testing/config" +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/collections" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" +) // WithExternalOauthTokenUserMappingClaim was added to satisfy the default builders. The method itself is not generated because its type is not yet supported. // This method will conflict the generated one when the type is supported. func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthTokenUserMappingClaim(externalOauthTokenUserMappingClaim string) *ExternalOauthSecurityIntegrationModel { - e.ExternalOauthTokenUserMappingClaim = tfconfig.StringVariable(externalOauthTokenUserMappingClaim) + e.ExternalOauthTokenUserMappingClaim = tfconfig.SetVariable(tfconfig.StringVariable(externalOauthTokenUserMappingClaim)) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAllowedRoles(roles ...sdk.AccountObjectIdentifier) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAllowedRolesList = tfconfig.SetVariable( + collections.Map(roles, func(role sdk.AccountObjectIdentifier) tfconfig.Variable { + return tfconfig.StringVariable(role.Name()) + })..., + ) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthAudiences(values ...string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthAudienceList = tfconfig.SetVariable( + collections.Map(values, func(value string) tfconfig.Variable { + return tfconfig.StringVariable(value) + })..., + ) + return e +} + +func (e *ExternalOauthSecurityIntegrationModel) WithExternalOauthJwsKeysUrls(urls ...string) *ExternalOauthSecurityIntegrationModel { + e.ExternalOauthJwsKeysUrl = tfconfig.SetVariable( + collections.Map(urls, func(url string) tfconfig.Variable { + return tfconfig.StringVariable(url) + })..., + ) return e } diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index d65f83139ec..993b57ade6f 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -1,6 +1,7 @@ package datasources_test import ( + "fmt" "maps" "regexp" "testing" @@ -239,28 +240,31 @@ func TestAcc_SecurityIntegrations_ExternalOauth(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() role, roleCleanup := acc.TestClient().Role.CreateRole(t) - issuer := random.String() t.Cleanup(roleCleanup) - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "comment": config.StringVariable("foo"), - "enabled": config.BoolVariable(true), - "external_oauth_allowed_roles_list": config.SetVariable(config.StringVariable(role.ID().Name())), - "external_oauth_any_role_mode": config.StringVariable(string(sdk.ExternalOauthSecurityIntegrationAnyRoleModeDisable)), - "external_oauth_audience_list": config.SetVariable(config.StringVariable("foo")), - "external_oauth_issuer": config.StringVariable(issuer), - "external_oauth_jws_keys_url": config.SetVariable(config.StringVariable("https://example.com")), - "external_oauth_scope_delimiter": config.StringVariable("."), - "external_oauth_scope_mapping_attribute": config.StringVariable("foo"), - "external_oauth_snowflake_user_mapping_attribute": config.StringVariable(string(sdk.ExternalOauthSecurityIntegrationSnowflakeUserMappingAttributeEmailAddress)), - "external_oauth_token_user_mapping_claim": config.SetVariable(config.StringVariable("foo")), - "name": config.StringVariable(id.Name()), - "external_oauth_type": config.StringVariable(string(sdk.ExternalOauthSecurityIntegrationTypeCustom)), - } - } + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + issuer := random.String() + comment := random.Comment() + claim := random.AlphaN(6) + mappingAttribute := random.AlphaN(6) + audience := random.AlphaN(6) + + resourceModel := model.ExternalOauthSecurityIntegration("test", true, issuer, string(sdk.ExternalOauthSecurityIntegrationSnowflakeUserMappingAttributeEmailAddress), claim, string(sdk.ExternalOauthSecurityIntegrationTypeCustom), id.Name()). + WithComment(comment). + WithExternalOauthAllowedRoles(role.ID()). + WithExternalOauthAnyRoleMode(string(sdk.ExternalOauthSecurityIntegrationAnyRoleModeDisable)). + WithExternalOauthAudiences(audience). + WithExternalOauthJwsKeysUrls("https://example.com"). + WithExternalOauthScopeDelimiter("."). + WithExternalOauthScopeMappingAttribute(mappingAttribute) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -271,47 +275,45 @@ func TestAcc_SecurityIntegrations_ExternalOauth(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.ExternalOauthSecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/external_oauth/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "EXTERNAL_OAUTH - CUSTOM"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "EXTERNAL_OAUTH - CUSTOM"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_issuer.0.value", issuer), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_jws_keys_url.0.value", "https://example.com"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_any_role_mode.0.value", string(sdk.ExternalOauthSecurityIntegrationAnyRoleModeDisable)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_allowed_roles_list.0.value", role.ID().Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_audience_list.0.value", "foo"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_token_user_mapping_claim.0.value", "['foo']"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_snowflake_user_mapping_attribute.0.value", string(sdk.ExternalOauthSecurityIntegrationSnowflakeUserMappingAttributeEmailAddress)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.external_oauth_scope_delimiter.0.value", "."), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", "foo"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_issuer.0.value", issuer), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_jws_keys_url.0.value", "https://example.com"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_any_role_mode.0.value", string(sdk.ExternalOauthSecurityIntegrationAnyRoleModeDisable)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_allowed_roles_list.0.value", role.ID().Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_audience_list.0.value", audience), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_token_user_mapping_claim.0.value", fmt.Sprintf("['%s']", claim)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_snowflake_user_mapping_attribute.0.value", string(sdk.ExternalOauthSecurityIntegrationSnowflakeUserMappingAttributeEmailAddress)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.external_oauth_scope_delimiter.0.value", "."), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/external_oauth/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "EXTERNAL_OAUTH - CUSTOM"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "EXTERNAL_OAUTH - CUSTOM"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/test.tf deleted file mode 100644 index 2eeca56bed1..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/test.tf +++ /dev/null @@ -1,21 +0,0 @@ -resource "snowflake_external_oauth_integration" "test" { - comment = var.comment - enabled = var.enabled - external_oauth_allowed_roles_list = var.external_oauth_allowed_roles_list - external_oauth_any_role_mode = var.external_oauth_any_role_mode - external_oauth_audience_list = var.external_oauth_audience_list - external_oauth_issuer = var.external_oauth_issuer - external_oauth_jws_keys_url = var.external_oauth_jws_keys_url - external_oauth_scope_delimiter = var.external_oauth_scope_delimiter - external_oauth_scope_mapping_attribute = var.external_oauth_scope_mapping_attribute - external_oauth_snowflake_user_mapping_attribute = var.external_oauth_snowflake_user_mapping_attribute - external_oauth_token_user_mapping_claim = var.external_oauth_token_user_mapping_claim - name = var.name - external_oauth_type = var.external_oauth_type -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_external_oauth_integration.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/variables.tf deleted file mode 100644 index ac964d6100b..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_set/variables.tf +++ /dev/null @@ -1,39 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "external_oauth_allowed_roles_list" { - type = set(string) -} -variable "external_oauth_any_role_mode" { - type = string -} -variable "external_oauth_audience_list" { - type = set(string) -} -variable "external_oauth_issuer" { - type = string -} -variable "external_oauth_jws_keys_url" { - type = set(string) -} -variable "external_oauth_scope_delimiter" { - type = string -} -variable "external_oauth_scope_mapping_attribute" { - type = string -} -variable "external_oauth_snowflake_user_mapping_attribute" { - type = string -} -variable "external_oauth_token_user_mapping_claim" { - type = set(string) -} -variable "name" { - type = string -} -variable "external_oauth_type" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/test.tf deleted file mode 100644 index f432e7031a1..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/test.tf +++ /dev/null @@ -1,22 +0,0 @@ -resource "snowflake_external_oauth_integration" "test" { - comment = var.comment - enabled = var.enabled - external_oauth_allowed_roles_list = var.external_oauth_allowed_roles_list - external_oauth_any_role_mode = var.external_oauth_any_role_mode - external_oauth_audience_list = var.external_oauth_audience_list - external_oauth_issuer = var.external_oauth_issuer - external_oauth_jws_keys_url = var.external_oauth_jws_keys_url - external_oauth_scope_delimiter = var.external_oauth_scope_delimiter - external_oauth_scope_mapping_attribute = var.external_oauth_scope_mapping_attribute - external_oauth_snowflake_user_mapping_attribute = var.external_oauth_snowflake_user_mapping_attribute - external_oauth_token_user_mapping_claim = var.external_oauth_token_user_mapping_claim - name = var.name - external_oauth_type = var.external_oauth_type -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_external_oauth_integration.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/variables.tf deleted file mode 100644 index ac964d6100b..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/external_oauth/optionals_unset/variables.tf +++ /dev/null @@ -1,39 +0,0 @@ -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "external_oauth_allowed_roles_list" { - type = set(string) -} -variable "external_oauth_any_role_mode" { - type = string -} -variable "external_oauth_audience_list" { - type = set(string) -} -variable "external_oauth_issuer" { - type = string -} -variable "external_oauth_jws_keys_url" { - type = set(string) -} -variable "external_oauth_scope_delimiter" { - type = string -} -variable "external_oauth_scope_mapping_attribute" { - type = string -} -variable "external_oauth_snowflake_user_mapping_attribute" { - type = string -} -variable "external_oauth_token_user_mapping_claim" { - type = set(string) -} -variable "name" { - type = string -} -variable "external_oauth_type" { - type = string -} diff --git a/pkg/provider/resources/resources.go b/pkg/provider/resources/resources.go index b6739b9604a..a6199a67818 100644 --- a/pkg/provider/resources/resources.go +++ b/pkg/provider/resources/resources.go @@ -22,7 +22,7 @@ const ( Execute resource = "snowflake_execute" ExternalFunction resource = "snowflake_external_function" ExternalTable resource = "snowflake_external_table" - ExternalOauthSecurityIntegration resource = "snowflake_external_oauth_security_integration" + ExternalOauthSecurityIntegration resource = "snowflake_external_oauth_integration" ExternalVolume resource = "snowflake_external_volume" FailoverGroup resource = "snowflake_failover_group" FileFormat resource = "snowflake_file_format" From 2e37a072c0819bae41d41240d5caa50e721e1f60 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 11:50:27 +0100 Subject: [PATCH 29/34] Set up oauth for custom clients datasource acceptance test using builders --- .../gen/multiline_attributes_overrides.go | 31 ++--- ...ntegration_for_custom_clients_model_ext.go | 12 ++ ...ntegration_for_custom_clients_model_gen.go | 4 +- .../security_integrations_acceptance_test.go | 125 +++++++++--------- .../optionals_set/test.tf | 24 ---- .../optionals_set/variables.tf | 46 ------- .../optionals_unset/test.tf | 25 ---- .../optionals_unset/variables.tf | 46 ------- 8 files changed, 91 insertions(+), 222 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go b/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go index dcf459c4ef6..bc93bbc9a8d 100644 --- a/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go +++ b/pkg/acceptance/bettertestspoc/config/model/gen/multiline_attributes_overrides.go @@ -1,19 +1,20 @@ package gen var multilineAttributesOverrides = map[string][]string{ - "User": {"rsa_public_key", "rsa_public_key_2"}, - "ServiceUser": {"rsa_public_key", "rsa_public_key_2"}, - "LegacyServiceUser": {"rsa_public_key", "rsa_public_key_2"}, - "FunctionJava": {"function_definition"}, - "FunctionJavascript": {"function_definition"}, - "FunctionPython": {"function_definition"}, - "FunctionScala": {"function_definition"}, - "FunctionSql": {"function_definition"}, - "ProcedureJava": {"procedure_definition"}, - "ProcedureJavascript": {"procedure_definition"}, - "ProcedurePython": {"procedure_definition"}, - "ProcedureScala": {"procedure_definition"}, - "ProcedureSql": {"procedure_definition"}, - "Account": {"admin_rsa_public_key"}, - "Saml2SecurityIntegration": {"saml2_x509_cert"}, + "User": {"rsa_public_key", "rsa_public_key_2"}, + "ServiceUser": {"rsa_public_key", "rsa_public_key_2"}, + "LegacyServiceUser": {"rsa_public_key", "rsa_public_key_2"}, + "FunctionJava": {"function_definition"}, + "FunctionJavascript": {"function_definition"}, + "FunctionPython": {"function_definition"}, + "FunctionScala": {"function_definition"}, + "FunctionSql": {"function_definition"}, + "ProcedureJava": {"procedure_definition"}, + "ProcedureJavascript": {"procedure_definition"}, + "ProcedurePython": {"procedure_definition"}, + "ProcedureScala": {"procedure_definition"}, + "ProcedureSql": {"procedure_definition"}, + "Account": {"admin_rsa_public_key"}, + "Saml2SecurityIntegration": {"saml2_x509_cert"}, + "OauthIntegrationForCustomClients": {"oauth_client_rsa_public_key", "oauth_client_rsa_public_key_2"}, } diff --git a/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_ext.go index 3d3605ca78d..8a29b4ce3ae 100644 --- a/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_ext.go +++ b/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_ext.go @@ -2,6 +2,9 @@ package model import ( tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/collections" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" ) func (t *OauthIntegrationForCustomClientsModel) WithBlockedRolesList(blockedRoles ...string) *OauthIntegrationForCustomClientsModel { @@ -13,3 +16,12 @@ func (t *OauthIntegrationForCustomClientsModel) WithBlockedRolesList(blockedRole t.BlockedRolesList = tfconfig.SetVariable(blockedRolesListStringVariables...) return t } + +func (t *OauthIntegrationForCustomClientsModel) WithPreAuthorizedRoles(roles ...sdk.AccountObjectIdentifier) *OauthIntegrationForCustomClientsModel { + t.PreAuthorizedRolesList = tfconfig.SetVariable( + collections.Map(roles, func(role sdk.AccountObjectIdentifier) tfconfig.Variable { + return tfconfig.StringVariable(role.Name()) + })..., + ) + return t +} diff --git a/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_gen.go b/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_gen.go index dac97016856..62752e5b064 100644 --- a/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_gen.go +++ b/pkg/acceptance/bettertestspoc/config/model/oauth_integration_for_custom_clients_model_gen.go @@ -119,12 +119,12 @@ func (o *OauthIntegrationForCustomClientsModel) WithOauthAllowNonTlsRedirectUri( } func (o *OauthIntegrationForCustomClientsModel) WithOauthClientRsaPublicKey(oauthClientRsaPublicKey string) *OauthIntegrationForCustomClientsModel { - o.OauthClientRsaPublicKey = tfconfig.StringVariable(oauthClientRsaPublicKey) + o.OauthClientRsaPublicKey = config.MultilineWrapperVariable(oauthClientRsaPublicKey) return o } func (o *OauthIntegrationForCustomClientsModel) WithOauthClientRsaPublicKey2(oauthClientRsaPublicKey2 string) *OauthIntegrationForCustomClientsModel { - o.OauthClientRsaPublicKey2 = tfconfig.StringVariable(oauthClientRsaPublicKey2) + o.OauthClientRsaPublicKey2 = config.MultilineWrapperVariable(oauthClientRsaPublicKey2) return o } diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 993b57ade6f..809af3666eb 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -13,6 +13,7 @@ import ( "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/bettertestspoc/config/model" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/helpers/random" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/acceptance/testenvs" + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/datasources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/snowflakeroles" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/provider/resources" "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk" @@ -333,33 +334,31 @@ func TestAcc_SecurityIntegrations_OauthForCustomClients(t *testing.T) { blockedRole, blockedRoleCleanup := acc.TestClient().Role.CreateRole(t) t.Cleanup(blockedRoleCleanup) - validUrl := "https://example.com" id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + validUrl := "https://example.com" key, _ := random.GenerateRSAPublicKey(t) comment := random.Comment() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "oauth_client_type": config.StringVariable(string(sdk.OauthSecurityIntegrationClientTypeConfidential)), - "oauth_redirect_uri": config.StringVariable(validUrl), - "blocked_roles_list": config.SetVariable(config.StringVariable("ACCOUNTADMIN"), config.StringVariable("SECURITYADMIN"), config.StringVariable(blockedRole.ID().Name())), - "comment": config.StringVariable(comment), - "enabled": config.BoolVariable(true), - "network_policy": config.StringVariable(networkPolicy.ID().Name()), - "oauth_allow_non_tls_redirect_uri": config.BoolVariable(true), - "oauth_allowed_authorization_endpoints": config.SetVariable(config.StringVariable("http://allowed.com")), - "oauth_allowed_token_endpoints": config.SetVariable(config.StringVariable("http://allowed.com")), - "oauth_authorization_endpoint": config.StringVariable("http://auth.com"), - "oauth_client_rsa_public_key": config.StringVariable(key), - "oauth_client_rsa_public_key_2": config.StringVariable(key), - "oauth_enforce_pkce": config.BoolVariable(true), - "oauth_issue_refresh_tokens": config.BoolVariable(true), - "oauth_refresh_token_validity": config.IntegerVariable(86400), - "oauth_token_endpoint": config.StringVariable("http://auth.com"), - "oauth_use_secondary_roles": config.StringVariable(string(sdk.OauthSecurityIntegrationUseSecondaryRolesNone)), - "pre_authorized_roles_list": config.SetVariable(config.StringVariable(preAuthorizedRole.ID().Name())), - } - } + + resourceModel := model.OauthIntegrationForCustomClients("test", id.Name(), string(sdk.OauthSecurityIntegrationClientTypeConfidential), validUrl). + WithComment(comment). + WithEnabled(datasources.BooleanTrue). + WithBlockedRolesList("ACCOUNTADMIN", "SECURITYADMIN", blockedRole.ID().Name()). + WithNetworkPolicy(networkPolicy.ID().Name()). + WithOauthAllowNonTlsRedirectUri(datasources.BooleanTrue). + WithOauthClientRsaPublicKey(key). + WithOauthClientRsaPublicKey2(key). + WithOauthEnforcePkce(datasources.BooleanTrue). + WithOauthIssueRefreshTokens(datasources.BooleanTrue). + WithOauthRefreshTokenValidity(86400). + WithOauthUseSecondaryRoles(string(sdk.OauthSecurityIntegrationUseSecondaryRolesNone)). + WithPreAuthorizedRoles(preAuthorizedRole.ID()) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -370,57 +369,55 @@ func TestAcc_SecurityIntegrations_OauthForCustomClients(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.OauthIntegrationForCustomClients), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_type.0.value", string(sdk.OauthSecurityIntegrationClientTypeConfidential)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_redirect_uri.0.value", validUrl), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allow_non_tls_redirect_uri.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_enforce_pkce.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_use_secondary_roles.0.value", string(sdk.OauthSecurityIntegrationUseSecondaryRolesNone)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.pre_authorized_roles_list.0.value", preAuthorizedRole.ID().Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_type.0.value", string(sdk.OauthSecurityIntegrationClientTypeConfidential)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_redirect_uri.0.value", validUrl), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allow_non_tls_redirect_uri.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_enforce_pkce.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_use_secondary_roles.0.value", string(sdk.OauthSecurityIntegrationUseSecondaryRolesNone)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.pre_authorized_roles_list.0.value", preAuthorizedRole.ID().Name()), // Not asserted, because it also contains other default roles // resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.blocked_roles_list.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_issue_refresh_tokens.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "86400"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_rsa_public_key_fp.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_rsa_public_key_2_fp.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_id.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_authorization_endpoints.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_token_endpoints.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_issue_refresh_tokens.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "86400"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_rsa_public_key_fp.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_rsa_public_key_2_fp.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_id.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_authorization_endpoints.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_token_endpoints.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "OAUTH - CUSTOM"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "OAUTH - CUSTOM"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "OAUTH - CUSTOM"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "OAUTH - CUSTOM"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/test.tf deleted file mode 100644 index b1faba13250..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/test.tf +++ /dev/null @@ -1,24 +0,0 @@ -resource "snowflake_oauth_integration_for_custom_clients" "test" { - blocked_roles_list = var.blocked_roles_list - comment = var.comment - enabled = var.enabled - name = var.name - network_policy = var.network_policy - oauth_allow_non_tls_redirect_uri = var.oauth_allow_non_tls_redirect_uri - oauth_client_rsa_public_key = var.oauth_client_rsa_public_key - oauth_client_rsa_public_key_2 = var.oauth_client_rsa_public_key_2 - oauth_client_type = var.oauth_client_type - oauth_enforce_pkce = var.oauth_enforce_pkce - oauth_issue_refresh_tokens = var.oauth_issue_refresh_tokens - oauth_redirect_uri = var.oauth_redirect_uri - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_use_secondary_roles = var.oauth_use_secondary_roles - pre_authorized_roles_list = var.pre_authorized_roles_list -} - - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_oauth_integration_for_custom_clients.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/variables.tf deleted file mode 100644 index 9d98ea92c84..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_set/variables.tf +++ /dev/null @@ -1,46 +0,0 @@ - -variable "blocked_roles_list" { - type = set(string) -} -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "network_policy" { - type = string -} -variable "oauth_allow_non_tls_redirect_uri" { - type = bool -} -variable "oauth_client_rsa_public_key" { - type = string -} -variable "oauth_client_rsa_public_key_2" { - type = string -} -variable "oauth_client_type" { - type = string -} -variable "oauth_enforce_pkce" { - type = bool -} -variable "oauth_issue_refresh_tokens" { - type = bool -} -variable "oauth_redirect_uri" { - type = string -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_use_secondary_roles" { - type = string -} -variable "pre_authorized_roles_list" { - type = set(string) -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/test.tf deleted file mode 100644 index e780bf0c134..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/test.tf +++ /dev/null @@ -1,25 +0,0 @@ -resource "snowflake_oauth_integration_for_custom_clients" "test" { - blocked_roles_list = var.blocked_roles_list - comment = var.comment - enabled = var.enabled - name = var.name - network_policy = var.network_policy - oauth_allow_non_tls_redirect_uri = var.oauth_allow_non_tls_redirect_uri - oauth_client_rsa_public_key = var.oauth_client_rsa_public_key - oauth_client_rsa_public_key_2 = var.oauth_client_rsa_public_key_2 - oauth_client_type = var.oauth_client_type - oauth_enforce_pkce = var.oauth_enforce_pkce - oauth_issue_refresh_tokens = var.oauth_issue_refresh_tokens - oauth_redirect_uri = var.oauth_redirect_uri - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_use_secondary_roles = var.oauth_use_secondary_roles - pre_authorized_roles_list = var.pre_authorized_roles_list -} - - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_oauth_integration_for_custom_clients.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/variables.tf deleted file mode 100644 index 9d98ea92c84..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_custom_clients/optionals_unset/variables.tf +++ /dev/null @@ -1,46 +0,0 @@ - -variable "blocked_roles_list" { - type = set(string) -} -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "network_policy" { - type = string -} -variable "oauth_allow_non_tls_redirect_uri" { - type = bool -} -variable "oauth_client_rsa_public_key" { - type = string -} -variable "oauth_client_rsa_public_key_2" { - type = string -} -variable "oauth_client_type" { - type = string -} -variable "oauth_enforce_pkce" { - type = bool -} -variable "oauth_issue_refresh_tokens" { - type = bool -} -variable "oauth_redirect_uri" { - type = string -} -variable "oauth_refresh_token_validity" { - type = number -} -variable "oauth_use_secondary_roles" { - type = string -} -variable "pre_authorized_roles_list" { - type = set(string) -} From e379c67071df9df038440d8c9fd5a976b5b83064 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 11:56:01 +0100 Subject: [PATCH 30/34] Set up oauth for partner applications datasource acceptance test using builders --- .../security_integrations_acceptance_test.go | 95 ++++++++++--------- .../optionals_set/test.tf | 16 ---- .../optionals_set/variables.tf | 24 ----- .../optionals_unset/test.tf | 17 ---- .../optionals_unset/variables.tf | 24 ----- 5 files changed, 48 insertions(+), 128 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/variables.tf diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 809af3666eb..e871ad597a4 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -430,18 +430,21 @@ func TestAcc_SecurityIntegrations_OauthForPartnerApplications(t *testing.T) { id := acc.TestClient().Ids.RandomAccountObjectIdentifier() comment := random.Comment() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "name": config.StringVariable(id.Name()), - "oauth_client": config.StringVariable(string(sdk.OauthSecurityIntegrationClientTableauServer)), - "blocked_roles_list": config.SetVariable(config.StringVariable("ACCOUNTADMIN"), config.StringVariable("SECURITYADMIN")), - "enabled": config.BoolVariable(true), - "oauth_issue_refresh_tokens": config.BoolVariable(false), - "oauth_refresh_token_validity": config.IntegerVariable(86400), - "oauth_use_secondary_roles": config.StringVariable(string(sdk.OauthSecurityIntegrationUseSecondaryRolesImplicit)), - "comment": config.StringVariable(comment), - } - } + + resourceModel := model.OauthIntegrationForPartnerApplications("test", id.Name(), string(sdk.OauthSecurityIntegrationClientTableauServer)). + WithComment(comment). + WithEnabled(datasources.BooleanTrue). + WithBlockedRolesList("ACCOUNTADMIN", "SECURITYADMIN"). + WithOauthIssueRefreshTokens(datasources.BooleanFalse). + WithOauthRefreshTokenValidity(86400). + WithOauthUseSecondaryRoles(string(sdk.OauthSecurityIntegrationUseSecondaryRolesImplicit)) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -452,50 +455,48 @@ func TestAcc_SecurityIntegrations_OauthForPartnerApplications(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.OauthIntegrationForPartnerApplications), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_type.0.value", string(sdk.OauthSecurityIntegrationClientTypePublic)), - resource.TestCheckNoResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_redirect_uri.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_use_secondary_roles.0.value", string(sdk.OauthSecurityIntegrationUseSecondaryRolesImplicit)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.blocked_roles_list.0.value", "ACCOUNTADMIN,SECURITYADMIN"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_issue_refresh_tokens.0.value", "false"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "86400"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", comment), - resource.TestCheckNoResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_client_id.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_authorization_endpoints.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.oauth_allowed_token_endpoints.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_type.0.value", string(sdk.OauthSecurityIntegrationClientTypePublic)), + resource.TestCheckNoResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_redirect_uri.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_use_secondary_roles.0.value", string(sdk.OauthSecurityIntegrationUseSecondaryRolesImplicit)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.blocked_roles_list.0.value", "ACCOUNTADMIN,SECURITYADMIN"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_issue_refresh_tokens.0.value", "false"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_refresh_token_validity.0.value", "86400"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment), + resource.TestCheckNoResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_client_id.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_authorization_endpoint.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_token_endpoint.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_authorization_endpoints.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.oauth_allowed_token_endpoints.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "OAUTH - TABLEAU_SERVER"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "OAUTH - TABLEAU_SERVER"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "OAUTH - TABLEAU_SERVER"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "OAUTH - TABLEAU_SERVER"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/test.tf deleted file mode 100644 index 77382c91773..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/test.tf +++ /dev/null @@ -1,16 +0,0 @@ -resource "snowflake_oauth_integration_for_partner_applications" "test" { - name = var.name - oauth_client = var.oauth_client - blocked_roles_list = var.blocked_roles_list - enabled = var.enabled - oauth_issue_refresh_tokens = var.oauth_issue_refresh_tokens - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_use_secondary_roles = var.oauth_use_secondary_roles - comment = var.comment -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_oauth_integration_for_partner_applications.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/variables.tf deleted file mode 100644 index 0c6ad5489e6..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_set/variables.tf +++ /dev/null @@ -1,24 +0,0 @@ -variable "name" { - type = string -} -variable "oauth_client" { - type = string -} -variable "blocked_roles_list" { - type = set(string) -} -variable "enabled" { - type = string -} -variable "oauth_issue_refresh_tokens" { - type = string -} -variable "oauth_refresh_token_validity" { - type = string -} -variable "oauth_use_secondary_roles" { - type = string -} -variable "comment" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/test.tf deleted file mode 100644 index 5d0b5c0ba6a..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/test.tf +++ /dev/null @@ -1,17 +0,0 @@ -resource "snowflake_oauth_integration_for_partner_applications" "test" { - name = var.name - oauth_client = var.oauth_client - blocked_roles_list = var.blocked_roles_list - enabled = var.enabled - oauth_issue_refresh_tokens = var.oauth_issue_refresh_tokens - oauth_refresh_token_validity = var.oauth_refresh_token_validity - oauth_use_secondary_roles = var.oauth_use_secondary_roles - comment = var.comment -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_oauth_integration_for_partner_applications.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/variables.tf deleted file mode 100644 index 0c6ad5489e6..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/oauth_for_partner_applications/optionals_unset/variables.tf +++ /dev/null @@ -1,24 +0,0 @@ -variable "name" { - type = string -} -variable "oauth_client" { - type = string -} -variable "blocked_roles_list" { - type = set(string) -} -variable "enabled" { - type = string -} -variable "oauth_issue_refresh_tokens" { - type = string -} -variable "oauth_refresh_token_validity" { - type = string -} -variable "oauth_use_secondary_roles" { - type = string -} -variable "comment" { - type = string -} From cf6e0f537d63727bcdbe4610818e18689270d496 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 12:05:54 +0100 Subject: [PATCH 31/34] Set up saml2 datasource acceptance test using builders --- .../saml2_security_integration_model_ext.go | 25 ++++ .../security_integrations_acceptance_test.go | 128 +++++++++--------- .../saml2/optionals_set/test.tf | 25 ---- .../saml2/optionals_set/variables.tf | 52 ------- .../saml2/optionals_unset/test.tf | 26 ---- .../saml2/optionals_unset/variables.tf | 52 ------- 6 files changed, 88 insertions(+), 220 deletions(-) create mode 100644 pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_ext.go delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/variables.tf diff --git a/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_ext.go b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_ext.go new file mode 100644 index 00000000000..8de42dee241 --- /dev/null +++ b/pkg/acceptance/bettertestspoc/config/model/saml2_security_integration_model_ext.go @@ -0,0 +1,25 @@ +package model + +import ( + tfconfig "github.com/hashicorp/terraform-plugin-testing/config" + + "github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/internal/collections" +) + +func (s *Saml2SecurityIntegrationModel) WithAllowedEmailPatterns(values ...string) *Saml2SecurityIntegrationModel { + s.AllowedEmailPatterns = tfconfig.SetVariable( + collections.Map(values, func(value string) tfconfig.Variable { + return tfconfig.StringVariable(value) + })..., + ) + return s +} + +func (s *Saml2SecurityIntegrationModel) WithAllowedUserDomains(values ...string) *Saml2SecurityIntegrationModel { + s.AllowedUserDomains = tfconfig.SetVariable( + collections.Map(values, func(value string) tfconfig.Variable { + return tfconfig.StringVariable(value) + })..., + ) + return s +} diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index e871ad597a4..9a230fb1dfa 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -510,32 +510,32 @@ func TestAcc_SecurityIntegrations_Saml2(t *testing.T) { id := acc.TestClient().Ids.RandomAccountObjectIdentifier() issuer := acc.TestClient().Ids.Alpha() cert := random.GenerateX509(t) - validUrl := "http://example.com" + validUrl := "https://example.com" acsURL := acc.TestClient().Context.ACSURL(t) issuerURL := acc.TestClient().Context.IssuerURL(t) + comment := random.Comment() - m := func() map[string]config.Variable { - return map[string]config.Variable{ - "allowed_email_patterns": config.ListVariable(config.StringVariable("^(.+dev)@example.com$")), - "allowed_user_domains": config.ListVariable(config.StringVariable("example.com")), - "comment": config.StringVariable("foo"), - "enabled": config.BoolVariable(true), - "name": config.StringVariable(id.Name()), - "saml2_enable_sp_initiated": config.BoolVariable(true), - "saml2_force_authn": config.BoolVariable(true), - "saml2_issuer": config.StringVariable(issuer), - "saml2_post_logout_redirect_url": config.StringVariable(validUrl), - "saml2_provider": config.StringVariable(string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - "saml2_requested_nameid_format": config.StringVariable(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - "saml2_sign_request": config.BoolVariable(true), - "saml2_snowflake_acs_url": config.StringVariable(acsURL), - "saml2_snowflake_issuer_url": config.StringVariable(issuerURL), - "saml2_sp_initiated_login_page_label": config.StringVariable("foo"), - "saml2_sso_url": config.StringVariable(validUrl), - "saml2_x509_cert": config.StringVariable(cert), - // TODO(SNOW-1479617): set saml2_snowflake_x509_cert - } - } + // TODO(SNOW-1479617): set saml2_snowflake_x509_cert + resourceModel := model.Saml2SecurityIntegration("test", id.Name(), issuer, string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom), validUrl, cert). + WithComment(comment). + WithEnabled(datasources.BooleanTrue). + WithAllowedEmailPatterns("^(.+dev)@example.com$"). + WithAllowedUserDomains("example.com"). + WithSaml2EnableSpInitiated(datasources.BooleanTrue). + WithSaml2ForceAuthn(datasources.BooleanTrue). + WithSaml2PostLogoutRedirectUrl(validUrl). + WithSaml2RequestedNameidFormat(string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)). + WithSaml2SignRequest(datasources.BooleanTrue). + WithSaml2SnowflakeAcsUrl(acsURL). + WithSaml2SnowflakeIssuerUrl(issuerURL). + WithSaml2SpInitiatedLoginPageLabel("foo") + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -546,56 +546,54 @@ func TestAcc_SecurityIntegrations_Saml2(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.Saml2SecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/saml2/optionals_set"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_issuer.0.value", issuer), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_sso_url.0.value", validUrl), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_x509_cert.0.value", cert), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_enable_sp_initiated.0.value", "true"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_snowflake_x509_cert.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_sign_request.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_post_logout_redirect_url.0.value", "http://example.com"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_force_authn.0.value", "true"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_snowflake_issuer_url.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_snowflake_acs_url.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_snowflake_metadata.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_digest_methods_used.0.value"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.saml2_signature_methods_used.0.value"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.allowed_user_domains.0.value", "[example.com]"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", "foo"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_issuer.0.value", issuer), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_sso_url.0.value", validUrl), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_provider.0.value", string(sdk.Saml2SecurityIntegrationSaml2ProviderCustom)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_x509_cert.0.value", cert), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_sp_initiated_login_page_label.0.value", "foo"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_enable_sp_initiated.0.value", "true"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_snowflake_x509_cert.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_sign_request.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_requested_nameid_format.0.value", string(sdk.Saml2SecurityIntegrationSaml2RequestedNameidFormatUnspecified)), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_post_logout_redirect_url.0.value", "https://example.com"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_force_authn.0.value", "true"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_snowflake_issuer_url.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_snowflake_acs_url.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_snowflake_metadata.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_digest_methods_used.0.value"), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.saml2_signature_methods_used.0.value"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.allowed_user_domains.0.value", "[example.com]"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.allowed_email_patterns.0.value", "[^(.+dev)@example.com$]"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/saml2/optionals_unset"), - ConfigVariables: m(), + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "SAML2"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", "SECURITY"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", "foo"), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "SAML2"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", "SECURITY"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/test.tf deleted file mode 100644 index eb657211109..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/test.tf +++ /dev/null @@ -1,25 +0,0 @@ -resource "snowflake_saml2_integration" "test" { - allowed_email_patterns = var.allowed_email_patterns - allowed_user_domains = var.allowed_user_domains - comment = var.comment - enabled = var.enabled - name = var.name - saml2_enable_sp_initiated = var.saml2_enable_sp_initiated - saml2_force_authn = var.saml2_force_authn - saml2_issuer = var.saml2_issuer - saml2_post_logout_redirect_url = var.saml2_post_logout_redirect_url - saml2_provider = var.saml2_provider - saml2_requested_nameid_format = var.saml2_requested_nameid_format - saml2_sign_request = var.saml2_sign_request - saml2_snowflake_acs_url = var.saml2_snowflake_acs_url - saml2_snowflake_issuer_url = var.saml2_snowflake_issuer_url - saml2_sp_initiated_login_page_label = var.saml2_sp_initiated_login_page_label - saml2_sso_url = var.saml2_sso_url - saml2_x509_cert = var.saml2_x509_cert -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_saml2_integration.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/variables.tf deleted file mode 100644 index a2fe9260eef..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_set/variables.tf +++ /dev/null @@ -1,52 +0,0 @@ - -variable "allowed_email_patterns" { - type = list(string) -} -variable "allowed_user_domains" { - type = list(string) -} -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "saml2_enable_sp_initiated" { - type = bool -} -variable "saml2_force_authn" { - type = bool -} -variable "saml2_issuer" { - type = string -} -variable "saml2_post_logout_redirect_url" { - type = string -} -variable "saml2_provider" { - type = string -} -variable "saml2_requested_nameid_format" { - type = string -} -variable "saml2_sign_request" { - type = bool -} -variable "saml2_snowflake_acs_url" { - type = string -} -variable "saml2_snowflake_issuer_url" { - type = string -} -variable "saml2_sp_initiated_login_page_label" { - type = string -} -variable "saml2_sso_url" { - type = string -} -variable "saml2_x509_cert" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/test.tf deleted file mode 100644 index a691106eee0..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/test.tf +++ /dev/null @@ -1,26 +0,0 @@ -resource "snowflake_saml2_integration" "test" { - allowed_email_patterns = var.allowed_email_patterns - allowed_user_domains = var.allowed_user_domains - comment = var.comment - enabled = var.enabled - name = var.name - saml2_enable_sp_initiated = var.saml2_enable_sp_initiated - saml2_force_authn = var.saml2_force_authn - saml2_issuer = var.saml2_issuer - saml2_post_logout_redirect_url = var.saml2_post_logout_redirect_url - saml2_provider = var.saml2_provider - saml2_requested_nameid_format = var.saml2_requested_nameid_format - saml2_sign_request = var.saml2_sign_request - saml2_snowflake_acs_url = var.saml2_snowflake_acs_url - saml2_snowflake_issuer_url = var.saml2_snowflake_issuer_url - saml2_sp_initiated_login_page_label = var.saml2_sp_initiated_login_page_label - saml2_sso_url = var.saml2_sso_url - saml2_x509_cert = var.saml2_x509_cert -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_saml2_integration.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/variables.tf deleted file mode 100644 index a2fe9260eef..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/saml2/optionals_unset/variables.tf +++ /dev/null @@ -1,52 +0,0 @@ - -variable "allowed_email_patterns" { - type = list(string) -} -variable "allowed_user_domains" { - type = list(string) -} -variable "comment" { - type = string -} -variable "enabled" { - type = bool -} -variable "name" { - type = string -} -variable "saml2_enable_sp_initiated" { - type = bool -} -variable "saml2_force_authn" { - type = bool -} -variable "saml2_issuer" { - type = string -} -variable "saml2_post_logout_redirect_url" { - type = string -} -variable "saml2_provider" { - type = string -} -variable "saml2_requested_nameid_format" { - type = string -} -variable "saml2_sign_request" { - type = bool -} -variable "saml2_snowflake_acs_url" { - type = string -} -variable "saml2_snowflake_issuer_url" { - type = string -} -variable "saml2_sp_initiated_login_page_label" { - type = string -} -variable "saml2_sso_url" { - type = string -} -variable "saml2_x509_cert" { - type = string -} From 9bff25e0f0eb23b340dab3ad47b0cbc9e587b729 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 12:12:34 +0100 Subject: [PATCH 32/34] Set up scim datasource acceptance test using builders --- .../security_integrations_acceptance_test.go | 72 ++++++++++--------- .../optionals_set/test.tf | 14 ---- .../optionals_set/variables.tf | 10 --- .../optionals_unset/test.tf | 15 ---- .../optionals_unset/variables.tf | 10 --- 5 files changed, 39 insertions(+), 82 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/variables.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/variables.tf diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index 9a230fb1dfa..bc12fff2832 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -604,15 +604,23 @@ func TestAcc_SecurityIntegrations_Scim(t *testing.T) { _ = testenvs.GetOrSkipTest(t, testenvs.EnableAcceptance) acc.TestAccPreCheck(t) - id := acc.TestClient().Ids.RandomAccountObjectIdentifier() - comment := random.Comment() networkPolicy, networkPolicyCleanup := acc.TestClient().NetworkPolicy.CreateNetworkPolicy(t) t.Cleanup(networkPolicyCleanup) - configVariables := config.Variables{ - "name": config.StringVariable(id.Name()), - "comment": config.StringVariable(comment), - "network_policy": config.StringVariable(networkPolicy.ID().Name()), - } + + id := acc.TestClient().Ids.RandomAccountObjectIdentifier() + role := snowflakeroles.GenericScimProvisioner + comment := random.Comment() + + resourceModel := model.ScimSecurityIntegration("test", false, id.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)). + WithComment(comment). + WithNetworkPolicy(networkPolicy.ID().Name()) + securityIntegrationsModel := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithDependsOn(resourceModel.ResourceReference()) + securityIntegrationsModelWithoutDescribe := datasourcemodel.SecurityIntegrations("test"). + WithLike(id.Name()). + WithWithDescribe(false). + WithDependsOn(resourceModel.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -623,40 +631,38 @@ func TestAcc_SecurityIntegrations_Scim(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.ScimSecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/optionals_set"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModel), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "false"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), - - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.enabled.0.value", "false"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.run_as_role.0.value", "GENERIC_SCIM_PROVISIONER"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.sync_password.0.value", "true"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.0.comment.0.value", comment), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "false"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), + + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.enabled.0.value", "false"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.network_policy.0.value", networkPolicy.ID().Name()), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.run_as_role.0.value", "GENERIC_SCIM_PROVISIONER"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.sync_password.0.value", "true"), + resource.TestCheckResourceAttr(securityIntegrationsModel.DatasourceReference(), "security_integrations.0.describe_output.0.comment.0.value", comment), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/optionals_unset"), - ConfigVariables: configVariables, + Config: accconfig.FromModels(t, resourceModel, securityIntegrationsModelWithoutDescribe), Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.#", "1"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.name", id.Name()), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.enabled", "false"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.comment", comment), - resource.TestCheckResourceAttrSet("data.snowflake_security_integrations.test", "security_integrations.0.show_output.0.created_on"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.name", id.Name()), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.integration_type", "SCIM - GENERIC"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.category", sdk.SecurityIntegrationCategory), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.enabled", "false"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.comment", comment), + resource.TestCheckResourceAttrSet(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.show_output.0.created_on"), - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.0.describe_output.#", "0"), + resource.TestCheckResourceAttr(securityIntegrationsModelWithoutDescribe.DatasourceReference(), "security_integrations.0.describe_output.#", "0"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/test.tf deleted file mode 100644 index d5e5f705aac..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/test.tf +++ /dev/null @@ -1,14 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name - enabled = false - scim_client = "GENERIC" - run_as_role = "GENERIC_SCIM_PROVISIONER" - network_policy = var.network_policy - comment = var.comment -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_scim_integration.test] - - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/variables.tf deleted file mode 100644 index d77b1d5405f..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_set/variables.tf +++ /dev/null @@ -1,10 +0,0 @@ -variable "name" { - type = string -} - -variable "comment" { - type = string -} -variable "network_policy" { - type = string -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/test.tf deleted file mode 100644 index c30f18b62f7..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/test.tf +++ /dev/null @@ -1,15 +0,0 @@ -resource "snowflake_scim_integration" "test" { - name = var.name - enabled = false - scim_client = "GENERIC" - run_as_role = "GENERIC_SCIM_PROVISIONER" - network_policy = var.network_policy - comment = var.comment -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_scim_integration.test] - - with_describe = false - like = var.name -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/variables.tf deleted file mode 100644 index d77b1d5405f..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/optionals_unset/variables.tf +++ /dev/null @@ -1,10 +0,0 @@ -variable "name" { - type = string -} - -variable "comment" { - type = string -} -variable "network_policy" { - type = string -} From cacedec50a9be4ce34fd18ca0db3fb62a1f1bf1d Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 12:19:38 +0100 Subject: [PATCH 33/34] Set up security integrations filtering datasource acceptance test using builders --- .../security_integrations_acceptance_test.go | 36 ++++++++----------- .../TestAcc_SecurityIntegrations/like/test.tf | 26 -------------- .../like/variables.tf | 15 -------- 3 files changed, 14 insertions(+), 63 deletions(-) delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/test.tf delete mode 100644 pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/variables.tf diff --git a/pkg/datasources/security_integrations_acceptance_test.go b/pkg/datasources/security_integrations_acceptance_test.go index bc12fff2832..2db534a5de3 100644 --- a/pkg/datasources/security_integrations_acceptance_test.go +++ b/pkg/datasources/security_integrations_acceptance_test.go @@ -2,7 +2,6 @@ package datasources_test import ( "fmt" - "maps" "regexp" "testing" @@ -677,22 +676,17 @@ func TestAcc_SecurityIntegrations_Filtering(t *testing.T) { idOne := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idTwo := acc.TestClient().Ids.RandomAccountObjectIdentifierWithPrefix(prefix) idThree := acc.TestClient().Ids.RandomAccountObjectIdentifier() + role := snowflakeroles.GenericScimProvisioner - commonVariables := config.Variables{ - "name_1": config.StringVariable(idOne.Name()), - "name_2": config.StringVariable(idTwo.Name()), - "name_3": config.StringVariable(idThree.Name()), - } - - likeConfig := config.Variables{ - "like": config.StringVariable(idOne.Name()), - } - maps.Copy(likeConfig, commonVariables) - - likeConfig2 := config.Variables{ - "like": config.StringVariable(prefix + "%"), - } - maps.Copy(likeConfig2, commonVariables) + scimModel1 := model.ScimSecurityIntegration("test1", false, idOne.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + scimModel2 := model.ScimSecurityIntegration("test2", false, idTwo.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + scimModel3 := model.ScimSecurityIntegration("test3", false, idThree.Name(), role.Name(), string(sdk.ScimSecurityIntegrationScimClientGeneric)) + securityIntegrationsModelLikeFirst := datasourcemodel.SecurityIntegrations("test"). + WithLike(idOne.Name()). + WithDependsOn(scimModel1.ResourceReference(), scimModel2.ResourceReference(), scimModel3.ResourceReference()) + securityIntegrationsModelLikePrefix := datasourcemodel.SecurityIntegrations("test"). + WithLike(prefix+"%"). + WithDependsOn(scimModel1.ResourceReference(), scimModel2.ResourceReference(), scimModel3.ResourceReference()) resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: acc.TestAccProtoV6ProviderFactories, @@ -703,17 +697,15 @@ func TestAcc_SecurityIntegrations_Filtering(t *testing.T) { CheckDestroy: acc.CheckDestroy(t, resources.ScimSecurityIntegration), Steps: []resource.TestStep{ { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/like"), - ConfigVariables: likeConfig, + Config: accconfig.FromModels(t, scimModel1, scimModel2, scimModel3, securityIntegrationsModelLikeFirst), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "1"), + resource.TestCheckResourceAttr(securityIntegrationsModelLikeFirst.DatasourceReference(), "security_integrations.#", "1"), ), }, { - ConfigDirectory: acc.ConfigurationDirectory("TestAcc_SecurityIntegrations/like"), - ConfigVariables: likeConfig2, + Config: accconfig.FromModels(t, scimModel1, scimModel2, scimModel3, securityIntegrationsModelLikePrefix), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.snowflake_security_integrations.test", "security_integrations.#", "2"), + resource.TestCheckResourceAttr(securityIntegrationsModelLikePrefix.DatasourceReference(), "security_integrations.#", "2"), ), }, }, diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/test.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/test.tf deleted file mode 100644 index fa33c87d060..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/test.tf +++ /dev/null @@ -1,26 +0,0 @@ -resource "snowflake_scim_integration" "test_1" { - name = var.name_1 - enabled = false - scim_client = "GENERIC" - run_as_role = "GENERIC_SCIM_PROVISIONER" -} - -resource "snowflake_scim_integration" "test_2" { - name = var.name_2 - enabled = false - scim_client = "GENERIC" - run_as_role = "GENERIC_SCIM_PROVISIONER" -} - -resource "snowflake_scim_integration" "test_3" { - name = var.name_3 - enabled = false - scim_client = "GENERIC" - run_as_role = "GENERIC_SCIM_PROVISIONER" -} - -data "snowflake_security_integrations" "test" { - depends_on = [snowflake_scim_integration.test_1, snowflake_scim_integration.test_2, snowflake_scim_integration.test_3] - - like = var.like -} diff --git a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/variables.tf b/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/variables.tf deleted file mode 100644 index 6bd02780806..00000000000 --- a/pkg/datasources/testdata/TestAcc_SecurityIntegrations/like/variables.tf +++ /dev/null @@ -1,15 +0,0 @@ -variable "name_1" { - type = string -} - -variable "name_2" { - type = string -} - -variable "name_3" { - type = string -} - -variable "like" { - type = string -} From e75e4a9792c396a285ca1cfcc956c11148a1b849 Mon Sep 17 00:00:00 2001 From: Artur Sawicki Date: Mon, 17 Mar 2025 12:28:09 +0100 Subject: [PATCH 34/34] Apply remarks from the previous part review --- pkg/datasources/file_formats_acceptance_test.go | 8 ++++---- .../FutureIn/Schema/snowflake_grants_future_in_schema.tf | 8 ++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/datasources/file_formats_acceptance_test.go b/pkg/datasources/file_formats_acceptance_test.go index eca32a01d2f..8309dac0481 100644 --- a/pkg/datasources/file_formats_acceptance_test.go +++ b/pkg/datasources/file_formats_acceptance_test.go @@ -27,7 +27,7 @@ func TestAcc_FileFormats(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: fileFormats(fileFormatId), + Config: fileFormatsInSchema(fileFormatId), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", fileFormatId.DatabaseName()), resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", fileFormatId.SchemaName()), @@ -53,7 +53,7 @@ func TestAcc_FileFormatsEmpty(t *testing.T) { CheckDestroy: nil, Steps: []resource.TestStep{ { - Config: zeroFileFormats(), + Config: fileFormatsInSchemaWithoutCreation(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "database", acc.TestDatabaseName), resource.TestCheckResourceAttr("data.snowflake_file_formats.t", "schema", acc.TestSchemaName), @@ -65,7 +65,7 @@ func TestAcc_FileFormatsEmpty(t *testing.T) { }) } -func fileFormats(fileFormatId sdk.SchemaObjectIdentifier) string { +func fileFormatsInSchema(fileFormatId sdk.SchemaObjectIdentifier) string { return fmt.Sprintf(` resource snowflake_file_format "t"{ name = "%[3]s" @@ -103,7 +103,7 @@ func fileFormats(fileFormatId sdk.SchemaObjectIdentifier) string { `, fileFormatId.DatabaseName(), fileFormatId.SchemaName(), fileFormatId.Name()) } -func zeroFileFormats() string { +func fileFormatsInSchemaWithoutCreation() string { return fmt.Sprintf(` data snowflake_file_formats "t" { database = "%[1]s" 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 747219ace6c..dc2398b7904 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,5 +1,9 @@ data "snowflake_current_role" "test" {} +locals { + schema_identifier = "\"${var.database}\".\"${var.schema}\"" +} + resource "snowflake_grant_privileges_to_account_role" "test" { account_role_name = data.snowflake_current_role.test.name privileges = ["INSERT"] @@ -7,7 +11,7 @@ resource "snowflake_grant_privileges_to_account_role" "test" { on_schema_object { future { object_type_plural = "TABLES" - in_schema = "\"${var.database}\".\"${var.schema}\"" + in_schema = local.schema_identifier } } } @@ -16,6 +20,6 @@ data "snowflake_grants" "test" { depends_on = [snowflake_grant_privileges_to_account_role.test] future_grants_in { - schema = "\"${var.database}\".\"${var.schema}\"" + schema = local.schema_identifier } }