From 267b3e878d727f5dd97020c1dcdcfa6213c464be Mon Sep 17 00:00:00 2001 From: Edward Feng <67326663+edwardfeng-db@users.noreply.github.com> Date: Thu, 8 Aug 2024 14:15:59 +0200 Subject: [PATCH 1/4] Remove AddNewField and RemoveField for customizable_schema_plugin_framework (#3868) ## Changes - Removing these two methods as they will cause the schema and the struct to be inconsistent ## Tests - [x] `make test` run locally - [x] relevant change in `docs/` folder - [x] covered with integration tests in `internal/acceptance` - [x] relevant acceptance tests are passing - [x] using Go SDK --- .../customizable_schema_plugin_framework.go | 74 ------------------- ...stomizable_schema_plugin_framework_test.go | 9 --- 2 files changed, 83 deletions(-) diff --git a/common/customizable_schema_plugin_framework.go b/common/customizable_schema_plugin_framework.go index 94b5090f9a..a486dc971d 100644 --- a/common/customizable_schema_plugin_framework.go +++ b/common/customizable_schema_plugin_framework.go @@ -37,80 +37,6 @@ func attributeToMap(attr *schema.Attribute) map[string]schema.Attribute { return m } -func (s *CustomizableSchemaPluginFramework) AddNewField(key string, newField schema.Attribute, path ...string) *CustomizableSchemaPluginFramework { - cb := func(a schema.Attribute) schema.Attribute { - switch attr := a.(type) { - case schema.SingleNestedAttribute: - _, exists := attr.Attributes[key] - if exists { - panic("Cannot add new field, " + key + " already exists in the schema") - } - attr.Attributes[key] = newField - return attr - case schema.ListNestedAttribute: - _, exists := attr.NestedObject.Attributes[key] - if exists { - panic("Cannot add new field, " + key + " already exists in the schema") - } - attr.NestedObject.Attributes[key] = newField - return attr - case schema.MapNestedAttribute: - _, exists := attr.NestedObject.Attributes[key] - if exists { - panic("Cannot add new field, " + key + " already exists in the schema") - } - attr.NestedObject.Attributes[key] = newField - return attr - default: - panic("attribute is not nested, cannot add field") - } - } - - if len(path) == 0 { - s.attr = cb(s.attr) - } else { - navigateSchemaWithCallback(&s.attr, cb, path...) - } - return s -} - -func (s *CustomizableSchemaPluginFramework) RemoveField(key string, path ...string) *CustomizableSchemaPluginFramework { - cb := func(a schema.Attribute) schema.Attribute { - switch attr := a.(type) { - case schema.SingleNestedAttribute: - _, exists := attr.Attributes[key] - if !exists { - panic("Cannot remove field, " + key + " does not exist in the schema") - } - delete(attr.Attributes, key) - return attr - case schema.ListNestedAttribute: - _, exists := attr.NestedObject.Attributes[key] - if !exists { - panic("Cannot remove field, " + key + " does not exist in the schema") - } - delete(attr.NestedObject.Attributes, key) - return attr - case schema.MapNestedAttribute: - _, exists := attr.NestedObject.Attributes[key] - if !exists { - panic("Cannot remove field, " + key + " does not exist in the schema") - } - delete(attr.NestedObject.Attributes, key) - return attr - default: - panic("attribute is not nested, cannot add field") - } - } - - if len(path) == 0 { - s.attr = cb(s.attr) - } else { - navigateSchemaWithCallback(&s.attr, cb, path...) - } - return s -} - func (s *CustomizableSchemaPluginFramework) AddValidator(v any, path ...string) *CustomizableSchemaPluginFramework { cb := func(attr schema.Attribute) schema.Attribute { val := reflect.ValueOf(attr) diff --git a/common/customizable_schema_plugin_framework_test.go b/common/customizable_schema_plugin_framework_test.go index 036bc3bd7f..7ca921b71d 100644 --- a/common/customizable_schema_plugin_framework_test.go +++ b/common/customizable_schema_plugin_framework_test.go @@ -47,10 +47,6 @@ func (v stringLengthBetweenValidator) ValidateString(ctx context.Context, req va func TestCustomizeSchema(t *testing.T) { scm := PluginFrameworkResourceStructToSchema(DummyTfSdk{}, func(c CustomizableSchemaPluginFramework) CustomizableSchemaPluginFramework { - c.AddNewField("new_field", schema.StringAttribute{Required: true}) - c.AddNewField("new_field", schema.StringAttribute{Required: true}, "nested") - c.AddNewField("to_be_removed", schema.StringAttribute{Required: true}, "nested") - c.RemoveField("to_be_removed", "nested") c.SetRequired("nested", "enabled") c.SetOptional("description") c.SetSensitive("nested", "name") @@ -59,8 +55,6 @@ func TestCustomizeSchema(t *testing.T) { c.AddValidator(stringLengthBetweenValidator{}, "description") return c }) - assert.True(t, scm.Attributes["new_field"].IsRequired()) - assert.True(t, MustSchemaAttributePath(scm.Attributes, "nested", "new_field").IsRequired()) assert.True(t, MustSchemaAttributePath(scm.Attributes, "nested", "enabled").IsRequired()) assert.True(t, MustSchemaAttributePath(scm.Attributes, "nested", "name").IsSensitive()) assert.True(t, MustSchemaAttributePath(scm.Attributes, "map").GetDeprecationMessage() == "deprecated") @@ -68,8 +62,5 @@ func TestCustomizeSchema(t *testing.T) { assert.True(t, !scm.Attributes["map"].IsOptional()) assert.True(t, !scm.Attributes["map"].IsRequired()) assert.True(t, scm.Attributes["map"].IsComputed()) - attr := MustSchemaAttributePath(scm.Attributes, "nested").(schema.SingleNestedAttribute).Attributes - _, ok := attr["to_be_removed"] assert.True(t, len(MustSchemaAttributePath(scm.Attributes, "description").(schema.StringAttribute).Validators) == 1) - assert.True(t, !ok) } From 4ad0fbb99ef72636b5d52d82ff13550dc5cde4ef Mon Sep 17 00:00:00 2001 From: Edward Feng <67326663+edwardfeng-db@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:51:56 +0200 Subject: [PATCH 2/4] Update init test and migrate imports for plugin framework (#3867) ## Changes - Part of https://github.com/databricks/terraform-provider-databricks/pull/3841 - Migrated imports following the documentation [here](https://developer.hashicorp.com/terraform/plugin/testing/migrating) - image - Made `run` in `init_test` able to take both plugin framework resources as well as sdkv2 resources ## Tests - [x] `make test` run locally - [x] relevant change in `docs/` folder - [x] covered with integration tests in `internal/acceptance` - [x] relevant acceptance tests are passing - [x] using Go SDK --- aws/resource_instance_profile.go | 2 +- clusters/clusters_api.go | 2 +- commands/commands.go | 2 +- go.mod | 1 + go.sum | 2 + internal/acceptance/account_rule_set_test.go | 2 +- internal/acceptance/dashboard_test.go | 2 +- .../data_aws_crossaccount_policy_test.go | 2 +- internal/acceptance/data_catalog_test.go | 2 +- .../acceptance/data_current_config_test.go | 2 +- .../acceptance/data_current_metastore_test.go | 2 +- .../data_external_locations_test.go | 2 +- internal/acceptance/data_group_test.go | 2 +- internal/acceptance/data_metastore_test.go | 2 +- internal/acceptance/data_metastores_test.go | 2 +- .../acceptance/data_mlflow_experiment_test.go | 2 +- internal/acceptance/data_mlflow_model_test.go | 2 +- .../acceptance/data_mws_credentials_test.go | 2 +- .../acceptance/data_mws_workspaces_test.go | 2 +- internal/acceptance/data_pipelines_test.go | 2 +- internal/acceptance/data_schema_test.go | 2 +- internal/acceptance/data_schemas_test.go | 2 +- internal/acceptance/data_shares_test.go | 2 +- .../data_storage_credential_test.go | 2 +- .../data_storage_credentials_test.go | 2 +- internal/acceptance/data_table_test.go | 2 +- internal/acceptance/data_tables_test.go | 2 +- internal/acceptance/data_user_test.go | 2 +- internal/acceptance/data_volume_test.go | 2 +- internal/acceptance/data_volumes_test.go | 2 +- internal/acceptance/default_namespace_test.go | 2 +- internal/acceptance/entitlements_test.go | 2 +- internal/acceptance/group_test.go | 2 +- internal/acceptance/init_test.go | 58 ++++++++++++++----- internal/acceptance/model_serving_test.go | 2 +- internal/acceptance/mounts_test.go | 2 +- internal/acceptance/mws_workspaces_test.go | 2 +- internal/acceptance/permissions_test.go | 6 +- .../restrict_workspace_admins_test.go | 2 +- internal/acceptance/secret_acl_test.go | 2 +- internal/acceptance/secret_scope_test.go | 2 +- internal/acceptance/service_principal_test.go | 2 +- internal/acceptance/sql_endpoint_test.go | 2 +- internal/acceptance/sql_global_config_test.go | 2 +- internal/acceptance/tf_provider_test.go | 2 +- internal/acceptance/user_test.go | 4 +- internal/acceptance/vector_search_test.go | 2 +- internal/acceptance/workspace_conf_test.go | 2 +- jobs/resource_job.go | 2 +- libraries/libraries_api_sdk.go | 2 +- main.go | 27 +-------- mws/resource_mws_networks.go | 2 +- mws/resource_mws_vpc_endpoint.go | 2 +- mws/resource_mws_workspaces.go | 2 +- pipelines/resource_pipeline.go | 2 +- provider/provider_factory.go | 40 +++++++++++++ qa/testing.go | 2 +- 57 files changed, 145 insertions(+), 93 deletions(-) create mode 100644 provider/provider_factory.go diff --git a/aws/resource_instance_profile.go b/aws/resource_instance_profile.go index 04ba23b0a5..1c2cb21dbb 100644 --- a/aws/resource_instance_profile.go +++ b/aws/resource_instance_profile.go @@ -12,8 +12,8 @@ import ( "github.com/hashicorp/go-cty/cty" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // InstanceProfileInfo contains the ARN for aws instance profiles diff --git a/clusters/clusters_api.go b/clusters/clusters_api.go index 3434d3fdae..0e309dcba0 100644 --- a/clusters/clusters_api.go +++ b/clusters/clusters_api.go @@ -13,8 +13,8 @@ import ( "github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // AutoScale is a struct the describes auto scaling for clusters diff --git a/commands/commands.go b/commands/commands.go index 4c14518211..62c248751f 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -9,7 +9,7 @@ import ( "github.com/databricks/terraform-provider-databricks/clusters" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // Command is the struct that contains what the 1.2 api returns for the commands api diff --git a/go.mod b/go.mod index 6109323a2c..0e9d450129 100644 --- a/go.mod +++ b/go.mod @@ -53,6 +53,7 @@ require ( github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-exec v0.21.0 // indirect github.com/hashicorp/terraform-json v0.22.1 // indirect + github.com/hashicorp/terraform-plugin-testing v1.9.0 // indirect github.com/hashicorp/terraform-registry-address v0.2.3 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect diff --git a/go.sum b/go.sum index 854793ac66..e76c325f13 100644 --- a/go.sum +++ b/go.sum @@ -142,6 +142,8 @@ github.com/hashicorp/terraform-plugin-mux v0.16.0 h1:RCzXHGDYwUwwqfYYWJKBFaS3fQs github.com/hashicorp/terraform-plugin-mux v0.16.0/go.mod h1:PF79mAsPc8CpusXPfEVa4X8PtkB+ngWoiUClMrNZlYo= github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 h1:kJiWGx2kiQVo97Y5IOGR4EMcZ8DtMswHhUuFibsCQQE= github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0/go.mod h1:sl/UoabMc37HA6ICVMmGO+/0wofkVIRxf+BMb/dnoIg= +github.com/hashicorp/terraform-plugin-testing v1.9.0 h1:xOsQRqqlHKXpFq6etTxih3ubdK3HVDtfE1IY7Rpd37o= +github.com/hashicorp/terraform-plugin-testing v1.9.0/go.mod h1:fhhVx/8+XNJZTD5o3b4stfZ6+q7z9+lIWigIYdT6/44= github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI= github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= diff --git a/internal/acceptance/account_rule_set_test.go b/internal/acceptance/account_rule_set_test.go index a8ee45c536..c95e70d139 100644 --- a/internal/acceptance/account_rule_set_test.go +++ b/internal/acceptance/account_rule_set_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/databricks/databricks-sdk-go/service/iam" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/databricks/terraform-provider-databricks/common" diff --git a/internal/acceptance/dashboard_test.go b/internal/acceptance/dashboard_test.go index bf67339315..bb56147cdd 100644 --- a/internal/acceptance/dashboard_test.go +++ b/internal/acceptance/dashboard_test.go @@ -10,7 +10,7 @@ import ( "github.com/databricks/databricks-sdk-go/service/dashboards" "github.com/databricks/terraform-provider-databricks/common" "github.com/databricks/terraform-provider-databricks/qa" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_aws_crossaccount_policy_test.go b/internal/acceptance/data_aws_crossaccount_policy_test.go index 233d5d0e3b..76e263ff7f 100644 --- a/internal/acceptance/data_aws_crossaccount_policy_test.go +++ b/internal/acceptance/data_aws_crossaccount_policy_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestMwsAccDataSourceAwsCrossaccountPolicy(t *testing.T) { diff --git a/internal/acceptance/data_catalog_test.go b/internal/acceptance/data_catalog_test.go index e2e3d00bea..591eacc162 100644 --- a/internal/acceptance/data_catalog_test.go +++ b/internal/acceptance/data_catalog_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_current_config_test.go b/internal/acceptance/data_current_config_test.go index 1d4296d7da..84a1f0fe98 100644 --- a/internal/acceptance/data_current_config_test.go +++ b/internal/acceptance/data_current_config_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_current_metastore_test.go b/internal/acceptance/data_current_metastore_test.go index c8885b03a7..363154b1d3 100644 --- a/internal/acceptance/data_current_metastore_test.go +++ b/internal/acceptance/data_current_metastore_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestUcAccDataSourceCurrentMetastore(t *testing.T) { diff --git a/internal/acceptance/data_external_locations_test.go b/internal/acceptance/data_external_locations_test.go index 21a9c807c2..eb42a96af2 100644 --- a/internal/acceptance/data_external_locations_test.go +++ b/internal/acceptance/data_external_locations_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestUcAccDataSourceExternalLocations(t *testing.T) { diff --git a/internal/acceptance/data_group_test.go b/internal/acceptance/data_group_test.go index 154ed2bb42..8713f82fd9 100644 --- a/internal/acceptance/data_group_test.go +++ b/internal/acceptance/data_group_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_metastore_test.go b/internal/acceptance/data_metastore_test.go index 247fd54b02..b823890ae5 100644 --- a/internal/acceptance/data_metastore_test.go +++ b/internal/acceptance/data_metastore_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestUcAccDataSourceMetastore(t *testing.T) { diff --git a/internal/acceptance/data_metastores_test.go b/internal/acceptance/data_metastores_test.go index af6c30ff17..436a9f687c 100644 --- a/internal/acceptance/data_metastores_test.go +++ b/internal/acceptance/data_metastores_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestUcAccDataSourceMetastores(t *testing.T) { diff --git a/internal/acceptance/data_mlflow_experiment_test.go b/internal/acceptance/data_mlflow_experiment_test.go index bceff60b77..c2d0571877 100644 --- a/internal/acceptance/data_mlflow_experiment_test.go +++ b/internal/acceptance/data_mlflow_experiment_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestAccDataSourceMlflowExperiment(t *testing.T) { diff --git a/internal/acceptance/data_mlflow_model_test.go b/internal/acceptance/data_mlflow_model_test.go index ebf9cb6834..8e5d3aa9b2 100644 --- a/internal/acceptance/data_mlflow_model_test.go +++ b/internal/acceptance/data_mlflow_model_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestAccDataMlflowModel(t *testing.T) { diff --git a/internal/acceptance/data_mws_credentials_test.go b/internal/acceptance/data_mws_credentials_test.go index 29da69dd07..882a889566 100755 --- a/internal/acceptance/data_mws_credentials_test.go +++ b/internal/acceptance/data_mws_credentials_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestAccDataSourceMwsCredentials(t *testing.T) { diff --git a/internal/acceptance/data_mws_workspaces_test.go b/internal/acceptance/data_mws_workspaces_test.go index 75d9c12184..d3a39b7e6b 100755 --- a/internal/acceptance/data_mws_workspaces_test.go +++ b/internal/acceptance/data_mws_workspaces_test.go @@ -3,7 +3,7 @@ package acceptance import ( "fmt" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "testing" ) diff --git a/internal/acceptance/data_pipelines_test.go b/internal/acceptance/data_pipelines_test.go index 3fb946ac60..fc194dc0d5 100755 --- a/internal/acceptance/data_pipelines_test.go +++ b/internal/acceptance/data_pipelines_test.go @@ -3,7 +3,7 @@ package acceptance import ( "fmt" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "testing" ) diff --git a/internal/acceptance/data_schema_test.go b/internal/acceptance/data_schema_test.go index f72919a85f..4024d6c40e 100644 --- a/internal/acceptance/data_schema_test.go +++ b/internal/acceptance/data_schema_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_schemas_test.go b/internal/acceptance/data_schemas_test.go index 04cec2a4df..6258d0a07e 100755 --- a/internal/acceptance/data_schemas_test.go +++ b/internal/acceptance/data_schemas_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_shares_test.go b/internal/acceptance/data_shares_test.go index d749314422..9f7d940132 100644 --- a/internal/acceptance/data_shares_test.go +++ b/internal/acceptance/data_shares_test.go @@ -4,7 +4,7 @@ import ( "strconv" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_storage_credential_test.go b/internal/acceptance/data_storage_credential_test.go index 3c77462d9c..a6f39d8d53 100755 --- a/internal/acceptance/data_storage_credential_test.go +++ b/internal/acceptance/data_storage_credential_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_storage_credentials_test.go b/internal/acceptance/data_storage_credentials_test.go index 43a5d3781d..e29f388acf 100644 --- a/internal/acceptance/data_storage_credentials_test.go +++ b/internal/acceptance/data_storage_credentials_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func TestUcAccDataSourceStorageCredentials(t *testing.T) { diff --git a/internal/acceptance/data_table_test.go b/internal/acceptance/data_table_test.go index 377edbd24f..2167c7ac7e 100644 --- a/internal/acceptance/data_table_test.go +++ b/internal/acceptance/data_table_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_tables_test.go b/internal/acceptance/data_tables_test.go index 3e8069b961..4057828af7 100644 --- a/internal/acceptance/data_tables_test.go +++ b/internal/acceptance/data_tables_test.go @@ -4,7 +4,7 @@ import ( "strconv" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_user_test.go b/internal/acceptance/data_user_test.go index 66a3deab2e..fc46bf1ad3 100644 --- a/internal/acceptance/data_user_test.go +++ b/internal/acceptance/data_user_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_volume_test.go b/internal/acceptance/data_volume_test.go index f9d1ae7033..8f65c44f2e 100644 --- a/internal/acceptance/data_volume_test.go +++ b/internal/acceptance/data_volume_test.go @@ -3,7 +3,7 @@ package acceptance import ( "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/data_volumes_test.go b/internal/acceptance/data_volumes_test.go index 1aafe87862..af15dad148 100644 --- a/internal/acceptance/data_volumes_test.go +++ b/internal/acceptance/data_volumes_test.go @@ -4,7 +4,7 @@ import ( "strconv" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/default_namespace_test.go b/internal/acceptance/default_namespace_test.go index d8de427f3c..83476fbecd 100644 --- a/internal/acceptance/default_namespace_test.go +++ b/internal/acceptance/default_namespace_test.go @@ -8,7 +8,7 @@ import ( "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/service/settings" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/entitlements_test.go b/internal/acceptance/entitlements_test.go index 7ab2414b23..49d5c2a88a 100644 --- a/internal/acceptance/entitlements_test.go +++ b/internal/acceptance/entitlements_test.go @@ -8,7 +8,7 @@ import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/logger" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" ) diff --git a/internal/acceptance/group_test.go b/internal/acceptance/group_test.go index f1e6abeb53..95ead635cf 100644 --- a/internal/acceptance/group_test.go +++ b/internal/acceptance/group_test.go @@ -9,7 +9,7 @@ import ( "github.com/databricks/terraform-provider-databricks/qa" "github.com/databricks/terraform-provider-databricks/scim" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" "testing" ) diff --git a/internal/acceptance/init_test.go b/internal/acceptance/init_test.go index 46d4fbe758..bc0374081e 100644 --- a/internal/acceptance/init_test.go +++ b/internal/acceptance/init_test.go @@ -24,9 +24,11 @@ import ( dbproviderlogger "github.com/databricks/terraform-provider-databricks/logger" "github.com/databricks/terraform-provider-databricks/provider" "github.com/databricks/terraform-provider-databricks/qa" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-go/tfprotov6" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + terraform_sdk_v2 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) func init() { @@ -138,7 +140,22 @@ func run(t *testing.T, steps []step) { t.Skip("Acceptance tests skipped unless env 'CLOUD_ENV' is set") } t.Parallel() - provider := provider.DatabricksProvider() + sdkPluginProvider := provider.DatabricksProvider() + + protoV6ProviderFactories := map[string]func() (tfprotov6.ProviderServer, error){ + "databricks": func() (tfprotov6.ProviderServer, error) { + ctx := context.Background() + + providerServer, err := provider.GetProviderServer(ctx) + + if err != nil { + return nil, err + } + + return providerServer, nil + }, + } + cwd, err := os.Getwd() if err != nil { t.Skip(err.Error()) @@ -164,13 +181,11 @@ func run(t *testing.T, steps []step) { thisStep := s stepCheck := thisStep.Check stepPreConfig := s.PreConfig - providerFactories := map[string]func() (*schema.Provider, error){ - "databricks": func() (*schema.Provider, error) { - return provider, nil - }, - } + var providerFactories map[string]func() (*schema.Provider, error) if thisStep.ProviderFactories != nil { providerFactories = thisStep.ProviderFactories + // If there's step override, then unset the protoV6 factories. + protoV6ProviderFactories = nil } ts = append(ts, resource.TestStep{ PreConfig: func() { @@ -195,9 +210,10 @@ func run(t *testing.T, steps []step) { ImportStateVerify: s.ImportStateVerify, ExpectError: s.ExpectError, ProviderFactories: providerFactories, + ProtoV6ProviderFactories: protoV6ProviderFactories, Check: func(state *terraform.State) error { // get configured client from provider - client := provider.Meta().(*common.DatabricksClient) + client := sdkPluginProvider.Meta().(*common.DatabricksClient) // Default check for all runs. Asserts that the read operation succeeds. for n, is := range state.RootModule().Resources { @@ -207,10 +223,16 @@ func run(t *testing.T, steps []step) { if p[0] == "data" { continue } - r := provider.ResourcesMap[p[0]] - dia := r.ReadContext(ctx, r.Data(is.Primary), client) - if dia != nil { - return fmt.Errorf("%v", dia) + + // Convert InstanceState from terraform-plugin-framework to terraform-plugin-sdk v2 + sdkInstanceState := convertToSDKInstanceState(is.Primary) + + if r, ok := sdkPluginProvider.ResourcesMap[p[0]]; ok { + // Only checking for sdkv2 resources. + dia := r.ReadContext(ctx, r.Data(sdkInstanceState), client) + if dia != nil { + return fmt.Errorf("%v", dia) + } } } if stepCheck != nil { @@ -230,6 +252,16 @@ func run(t *testing.T, steps []step) { }) } +// Function to convert from terraform-plugin-framework InstanceState to terraform-plugin-sdk v2 InstanceState +func convertToSDKInstanceState(is *terraform.InstanceState) *terraform_sdk_v2.InstanceState { + return &terraform_sdk_v2.InstanceState{ + ID: is.ID, + Attributes: is.Attributes, + Meta: is.Meta, + Tainted: is.Tainted, + } +} + // resourceCheck calls back a function with client and resource id func resourceCheck(name string, cb func(ctx context.Context, client *common.DatabricksClient, id string) error) resource.TestCheckFunc { diff --git a/internal/acceptance/model_serving_test.go b/internal/acceptance/model_serving_test.go index 59ff216ffe..70f9ab2988 100644 --- a/internal/acceptance/model_serving_test.go +++ b/internal/acceptance/model_serving_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" ) func TestAccModelServing(t *testing.T) { diff --git a/internal/acceptance/mounts_test.go b/internal/acceptance/mounts_test.go index f872a0af77..0a7270563c 100644 --- a/internal/acceptance/mounts_test.go +++ b/internal/acceptance/mounts_test.go @@ -8,7 +8,7 @@ import ( "golang.org/x/exp/maps" "github.com/databricks/databricks-sdk-go" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/mws_workspaces_test.go b/internal/acceptance/mws_workspaces_test.go index b289dca063..f24518e75a 100644 --- a/internal/acceptance/mws_workspaces_test.go +++ b/internal/acceptance/mws_workspaces_test.go @@ -15,7 +15,7 @@ import ( "github.com/databricks/terraform-provider-databricks/tokens" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" ) diff --git a/internal/acceptance/permissions_test.go b/internal/acceptance/permissions_test.go index e3f7cd46f9..788340d606 100644 --- a/internal/acceptance/permissions_test.go +++ b/internal/acceptance/permissions_test.go @@ -10,9 +10,9 @@ import ( "github.com/databricks/terraform-provider-databricks/common" "github.com/databricks/terraform-provider-databricks/permissions" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/restrict_workspace_admins_test.go b/internal/acceptance/restrict_workspace_admins_test.go index b6c4efb9ae..3f6f7b4edd 100644 --- a/internal/acceptance/restrict_workspace_admins_test.go +++ b/internal/acceptance/restrict_workspace_admins_test.go @@ -8,7 +8,7 @@ import ( "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/service/settings" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/secret_acl_test.go b/internal/acceptance/secret_acl_test.go index 789e6e47aa..cec49c6c95 100644 --- a/internal/acceptance/secret_acl_test.go +++ b/internal/acceptance/secret_acl_test.go @@ -7,7 +7,7 @@ import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/secret_scope_test.go b/internal/acceptance/secret_scope_test.go index f05161c71e..f743317822 100644 --- a/internal/acceptance/secret_scope_test.go +++ b/internal/acceptance/secret_scope_test.go @@ -11,7 +11,7 @@ import ( "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/service_principal_test.go b/internal/acceptance/service_principal_test.go index 6b07276c83..b1acad6b95 100644 --- a/internal/acceptance/service_principal_test.go +++ b/internal/acceptance/service_principal_test.go @@ -8,7 +8,7 @@ import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/apierr" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) const azureSpn = `resource "databricks_service_principal" "this" { diff --git a/internal/acceptance/sql_endpoint_test.go b/internal/acceptance/sql_endpoint_test.go index 66bdbea5cb..2fa9dce646 100644 --- a/internal/acceptance/sql_endpoint_test.go +++ b/internal/acceptance/sql_endpoint_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/databricks/databricks-sdk-go" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/sql_global_config_test.go b/internal/acceptance/sql_global_config_test.go index 00b7674c00..6bea052860 100644 --- a/internal/acceptance/sql_global_config_test.go +++ b/internal/acceptance/sql_global_config_test.go @@ -9,7 +9,7 @@ import ( "github.com/databricks/databricks-sdk-go/qa/lock" "github.com/databricks/databricks-sdk-go/qa/lock/core" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/internal/acceptance/tf_provider_test.go b/internal/acceptance/tf_provider_test.go index d2f83ebbb8..fce80f28a6 100644 --- a/internal/acceptance/tf_provider_test.go +++ b/internal/acceptance/tf_provider_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/databricks/terraform-provider-databricks/provider" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) func noOpProvider() *schema.Provider { diff --git a/internal/acceptance/user_test.go b/internal/acceptance/user_test.go index 2e59a5fa3e..9368bb88bf 100644 --- a/internal/acceptance/user_test.go +++ b/internal/acceptance/user_test.go @@ -13,8 +13,8 @@ import ( "github.com/databricks/databricks-sdk-go/service/iam" "github.com/databricks/terraform-provider-databricks/qa" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" ) // https://github.com/databricks/terraform-provider-databricks/issues/1097 diff --git a/internal/acceptance/vector_search_test.go b/internal/acceptance/vector_search_test.go index 83ca521efc..084891c5d0 100644 --- a/internal/acceptance/vector_search_test.go +++ b/internal/acceptance/vector_search_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" ) func TestUcAccVectorSearchEndpoint(t *testing.T) { diff --git a/internal/acceptance/workspace_conf_test.go b/internal/acceptance/workspace_conf_test.go index 200baf2e2e..79bac61d9a 100644 --- a/internal/acceptance/workspace_conf_test.go +++ b/internal/acceptance/workspace_conf_test.go @@ -7,7 +7,7 @@ import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/service/settings" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/jobs/resource_job.go b/jobs/resource_job.go index 770a42afa5..1ef8d2b918 100644 --- a/jobs/resource_job.go +++ b/jobs/resource_job.go @@ -14,9 +14,9 @@ import ( "github.com/databricks/databricks-sdk-go/service/compute" "github.com/databricks/databricks-sdk-go/service/jobs" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/terraform-provider-databricks/clusters" diff --git a/libraries/libraries_api_sdk.go b/libraries/libraries_api_sdk.go index 09a8531d03..8d2af22af1 100644 --- a/libraries/libraries_api_sdk.go +++ b/libraries/libraries_api_sdk.go @@ -11,7 +11,7 @@ import ( "github.com/databricks/databricks-sdk-go" "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/service/compute" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // Given a compute.Wait struct, returns library statuses based on the input parameter. diff --git a/main.go b/main.go index 57fb72d6ad..109947d011 100644 --- a/main.go +++ b/main.go @@ -9,11 +9,8 @@ import ( "github.com/databricks/terraform-provider-databricks/common" "github.com/databricks/terraform-provider-databricks/exporter" "github.com/databricks/terraform-provider-databricks/provider" - "github.com/hashicorp/terraform-plugin-framework/providerserver" "github.com/hashicorp/terraform-plugin-go/tfprotov6" "github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server" - "github.com/hashicorp/terraform-plugin-mux/tf5to6server" - "github.com/hashicorp/terraform-plugin-mux/tf6muxserver" ) const startMessageFormat = `Databricks Terraform Provider @@ -40,28 +37,8 @@ func main() { log.Printf(startMessageFormat, common.Version()) - sdkPluginProvider := provider.DatabricksProvider() - - upgradedSdkPluginProvider, err := tf5to6server.UpgradeServer( - context.Background(), - sdkPluginProvider.GRPCProvider, - ) - if err != nil { - log.Fatal(err) - } - - pluginFrameworkProvider := provider.GetDatabricksProviderPluginFramework() - - providers := []func() tfprotov6.ProviderServer{ - func() tfprotov6.ProviderServer { - return upgradedSdkPluginProvider - }, - providerserver.NewProtocol6(pluginFrameworkProvider), - } - ctx := context.Background() - muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...) - + providerServer, err := provider.GetProviderServer(ctx) if err != nil { log.Fatal(err) } @@ -73,7 +50,7 @@ func main() { err = tf6server.Serve( "registry.terraform.io/databricks/databricks", - muxServer.ProviderServer, + func() tfprotov6.ProviderServer { return providerServer }, serveOpts..., ) diff --git a/mws/resource_mws_networks.go b/mws/resource_mws_networks.go index 56cb98bb98..757f132ef4 100644 --- a/mws/resource_mws_networks.go +++ b/mws/resource_mws_networks.go @@ -9,9 +9,9 @@ import ( "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // NewNetworksAPI creates MWSNetworksAPI instance from provider meta diff --git a/mws/resource_mws_vpc_endpoint.go b/mws/resource_mws_vpc_endpoint.go index fd10d8cfaf..5160b540c7 100644 --- a/mws/resource_mws_vpc_endpoint.go +++ b/mws/resource_mws_vpc_endpoint.go @@ -8,8 +8,8 @@ import ( "github.com/databricks/terraform-provider-databricks/common" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // NewVPCEndpointAPI creates VPCEndpointAPI instance from provider meta diff --git a/mws/resource_mws_workspaces.go b/mws/resource_mws_workspaces.go index 73c5d40aa4..1d59b2950d 100644 --- a/mws/resource_mws_workspaces.go +++ b/mws/resource_mws_workspaces.go @@ -19,8 +19,8 @@ import ( "github.com/hashicorp/go-cty/cty" "github.com/hashicorp/terraform-plugin-log/tflog" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) // DefaultProvisionTimeout is the amount of minutes terraform will wait diff --git a/pipelines/resource_pipeline.go b/pipelines/resource_pipeline.go index 457bf95744..cfa9322750 100644 --- a/pipelines/resource_pipeline.go +++ b/pipelines/resource_pipeline.go @@ -7,9 +7,9 @@ import ( "regexp" "time" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/databricks/databricks-sdk-go/apierr" "github.com/databricks/databricks-sdk-go/marshal" diff --git a/provider/provider_factory.go b/provider/provider_factory.go new file mode 100644 index 0000000000..d19542c74e --- /dev/null +++ b/provider/provider_factory.go @@ -0,0 +1,40 @@ +package provider + +import ( + "context" + "log" + + "github.com/hashicorp/terraform-plugin-framework/providerserver" + "github.com/hashicorp/terraform-plugin-go/tfprotov6" + "github.com/hashicorp/terraform-plugin-mux/tf5to6server" + "github.com/hashicorp/terraform-plugin-mux/tf6muxserver" +) + +func GetProviderServer(ctx context.Context) (tfprotov6.ProviderServer, error) { + sdkPluginProvider := DatabricksProvider() + + upgradedSdkPluginProvider, err := tf5to6server.UpgradeServer( + context.Background(), + sdkPluginProvider.GRPCProvider, + ) + if err != nil { + log.Fatal(err) + } + + pluginFrameworkProvider := GetDatabricksProviderPluginFramework() + + providers := []func() tfprotov6.ProviderServer{ + func() tfprotov6.ProviderServer { + return upgradedSdkPluginProvider + }, + providerserver.NewProtocol6(pluginFrameworkProvider), + } + + muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...) + + if err != nil { + return nil, err + } + + return muxServer.ProviderServer(), nil +} diff --git a/qa/testing.go b/qa/testing.go index 663b09ef69..00d8c05597 100644 --- a/qa/testing.go +++ b/qa/testing.go @@ -26,9 +26,9 @@ import ( "github.com/hashicorp/go-cty/cty" "github.com/hashicorp/hcl" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" From 6ff85a84e1c3b45a5e5d27223233d4f195da234e Mon Sep 17 00:00:00 2001 From: Edward Feng <67326663+edwardfeng-db@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:12:38 +0200 Subject: [PATCH 3/4] Add quality monitor acceptance test for plugin framework (#3876) ## Changes - Add two more test cases replicating existing test case for quality monitor resource, but for the plugin framework - Manually executed the tests to make sure they are passing - Taking out the manual read check at the end of each test step as suggested [here](https://github.com/databricks/terraform-provider-databricks/pull/3867#discussion_r1709278870) because the type casting for clients is causing issue for plugin framework tests ## Tests - [x] `make test` run locally - [x] relevant change in `docs/` folder - [x] covered with integration tests in `internal/acceptance` - [x] relevant acceptance tests are passing - [x] using Go SDK --- internal/acceptance/init_test.go | 35 ------- internal/acceptance/quality_monitor_test.go | 104 ++++++++++++++++++++ 2 files changed, 104 insertions(+), 35 deletions(-) diff --git a/internal/acceptance/init_test.go b/internal/acceptance/init_test.go index bc0374081e..c22781f46b 100644 --- a/internal/acceptance/init_test.go +++ b/internal/acceptance/init_test.go @@ -26,7 +26,6 @@ import ( "github.com/databricks/terraform-provider-databricks/qa" "github.com/hashicorp/terraform-plugin-go/tfprotov6" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - terraform_sdk_v2 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" ) @@ -140,7 +139,6 @@ func run(t *testing.T, steps []step) { t.Skip("Acceptance tests skipped unless env 'CLOUD_ENV' is set") } t.Parallel() - sdkPluginProvider := provider.DatabricksProvider() protoV6ProviderFactories := map[string]func() (tfprotov6.ProviderServer, error){ "databricks": func() (tfprotov6.ProviderServer, error) { @@ -212,29 +210,6 @@ func run(t *testing.T, steps []step) { ProviderFactories: providerFactories, ProtoV6ProviderFactories: protoV6ProviderFactories, Check: func(state *terraform.State) error { - // get configured client from provider - client := sdkPluginProvider.Meta().(*common.DatabricksClient) - - // Default check for all runs. Asserts that the read operation succeeds. - for n, is := range state.RootModule().Resources { - p := strings.Split(n, ".") - - // Skip data resources. - if p[0] == "data" { - continue - } - - // Convert InstanceState from terraform-plugin-framework to terraform-plugin-sdk v2 - sdkInstanceState := convertToSDKInstanceState(is.Primary) - - if r, ok := sdkPluginProvider.ResourcesMap[p[0]]; ok { - // Only checking for sdkv2 resources. - dia := r.ReadContext(ctx, r.Data(sdkInstanceState), client) - if dia != nil { - return fmt.Errorf("%v", dia) - } - } - } if stepCheck != nil { return stepCheck(state) } @@ -252,16 +227,6 @@ func run(t *testing.T, steps []step) { }) } -// Function to convert from terraform-plugin-framework InstanceState to terraform-plugin-sdk v2 InstanceState -func convertToSDKInstanceState(is *terraform.InstanceState) *terraform_sdk_v2.InstanceState { - return &terraform_sdk_v2.InstanceState{ - ID: is.ID, - Attributes: is.Attributes, - Meta: is.Meta, - Tainted: is.Tainted, - } -} - // resourceCheck calls back a function with client and resource id func resourceCheck(name string, cb func(ctx context.Context, client *common.DatabricksClient, id string) error) resource.TestCheckFunc { diff --git a/internal/acceptance/quality_monitor_test.go b/internal/acceptance/quality_monitor_test.go index 9b9da2c91c..107921c584 100644 --- a/internal/acceptance/quality_monitor_test.go +++ b/internal/acceptance/quality_monitor_test.go @@ -149,3 +149,107 @@ func TestUcAccUpdateQualityMonitor(t *testing.T) { `, }) } + +func TestUcAccQualityMonitorPluginFramework(t *testing.T) { + if os.Getenv("GOOGLE_CREDENTIALS") != "" { + t.Skipf("databricks_quality_monitor resource is not available on GCP") + } + unityWorkspaceLevel(t, step{ + Template: commonPartQualityMonitoring + ` + + resource "databricks_lakehouse_monitor_pluginframework" "testMonitorInference" { + table_name = databricks_sql_table.myInferenceTable.id + assets_dir = "/Shared/provider-test/databricks_quality_monitoring/${databricks_sql_table.myInferenceTable.name}" + output_schema_name = databricks_schema.things.id + inference_log = { + granularities = ["1 day"] + timestamp_col = "timestamp" + prediction_col = "prediction" + model_id_col = "model_id" + problem_type = "PROBLEM_TYPE_REGRESSION" + } + } + + resource "databricks_sql_table" "myTimeseries" { + catalog_name = databricks_catalog.sandbox.id + schema_name = databricks_schema.things.name + name = "bar{var.STICKY_RANDOM}_timeseries" + table_type = "MANAGED" + data_source_format = "DELTA" + + column { + name = "timestamp" + type = "int" + } + } + + resource "databricks_lakehouse_monitor_pluginframework" "testMonitorTimeseries" { + table_name = databricks_sql_table.myTimeseries.id + assets_dir = "/Shared/provider-test/databricks_quality_monitoring/${databricks_sql_table.myTimeseries.name}" + output_schema_name = databricks_schema.things.id + time_series = { + granularities = ["1 day"] + timestamp_col = "timestamp" + } + } + + resource "databricks_sql_table" "mySnapshot" { + catalog_name = databricks_catalog.sandbox.id + schema_name = databricks_schema.things.name + name = "bar{var.STICKY_RANDOM}_snapshot" + table_type = "MANAGED" + data_source_format = "DELTA" + + column { + name = "timestamp" + type = "int" + } + } + + resource "databricks_lakehouse_monitor_pluginframework" "testMonitorSnapshot" { + table_name = databricks_sql_table.mySnapshot.id + assets_dir = "/Shared/provider-test/databricks_quality_monitoring/${databricks_sql_table.myTimeseries.name}" + output_schema_name = databricks_schema.things.id + snapshot = { + } + } + `, + }) +} + +func TestUcAccUpdateQualityMonitorPluginFramework(t *testing.T) { + if os.Getenv("GOOGLE_CREDENTIALS") != "" { + t.Skipf("databricks_quality_monitor resource is not available on GCP") + } + unityWorkspaceLevel(t, step{ + Template: commonPartQualityMonitoring + ` + resource "databricks_lakehouse_monitor_pluginframework" "testMonitorInference" { + table_name = databricks_sql_table.myInferenceTable.id + assets_dir = "/Shared/provider-test/databricks_quality_monitoring/${databricks_sql_table.myInferenceTable.name}" + output_schema_name = databricks_schema.things.id + inference_log = { + granularities = ["1 day"] + timestamp_col = "timestamp" + prediction_col = "prediction" + model_id_col = "model_id" + problem_type = "PROBLEM_TYPE_REGRESSION" + } + } + `, + }, step{ + Template: commonPartQualityMonitoring + ` + resource "databricks_lakehouse_monitor_pluginframework" "testMonitorInference" { + table_name = databricks_sql_table.myInferenceTable.id + assets_dir = "/Shared/provider-test/databricks_quality_monitoring/${databricks_sql_table.myInferenceTable.name}" + output_schema_name = databricks_schema.things.id + inference_log = { + granularities = ["1 hour"] + timestamp_col = "timestamp" + prediction_col = "prediction" + model_id_col = "model_id" + problem_type = "PROBLEM_TYPE_REGRESSION" + } + } + `, + }) +} From 79121d6efd9e27ea76c0a13b87ece8a8e325d05a Mon Sep 17 00:00:00 2001 From: Edward Feng <67326663+edwardfeng-db@users.noreply.github.com> Date: Fri, 9 Aug 2024 16:33:32 +0200 Subject: [PATCH 4/4] Add acceptance test for volumes data source (#3879) ## Changes - Make `ids` computed - Add test case for `data_volumes_pluginframework` ## Tests - [ ] `make test` run locally - [ ] relevant change in `docs/` folder - [ ] covered with integration tests in `internal/acceptance` - [ ] relevant acceptance tests are passing - [ ] using Go SDK --- internal/acceptance/data_volumes_test.go | 48 ++++++++++++++++++++++++ pluginframework/data_volumes.go | 1 + 2 files changed, 49 insertions(+) diff --git a/internal/acceptance/data_volumes_test.go b/internal/acceptance/data_volumes_test.go index af15dad148..968ab4a29c 100644 --- a/internal/acceptance/data_volumes_test.go +++ b/internal/acceptance/data_volumes_test.go @@ -58,3 +58,51 @@ func TestUcAccDataSourceVolumes(t *testing.T) { Check: checkDataSourceVolumesPopulated(t), }) } + +func checkDataSourceVolumesPluginFrameworkPopulated(t *testing.T) func(s *terraform.State) error { + return func(s *terraform.State) error { + _, ok := s.Modules[0].Resources["data.databricks_volumes_pluginframework.this"] + require.True(t, ok, "data.databricks_volumes_pluginframework.this has to be there") + num_volumes, _ := strconv.Atoi(s.Modules[0].Outputs["volumes"].Value.(string)) + assert.GreaterOrEqual(t, num_volumes, 1) + return nil + } +} + +func TestUcAccDataSourceVolumesPluginFramework(t *testing.T) { + unityWorkspaceLevel(t, step{ + Template: ` + resource "databricks_catalog" "sandbox" { + name = "sandbox{var.RANDOM}" + comment = "this catalog is managed by terraform" + properties = { + purpose = "testing" + } + } + + resource "databricks_schema" "things" { + catalog_name = databricks_catalog.sandbox.id + name = "things{var.RANDOM}" + comment = "this database is managed by terraform" + properties = { + kind = "various" + } + } + resource "databricks_volume" "this" { + name = "volume_data_source_test" + catalog_name = databricks_catalog.sandbox.name + schema_name = databricks_schema.things.name + volume_type = "MANAGED" + } + data "databricks_volumes_pluginframework" "this" { + catalog_name = databricks_catalog.sandbox.name + schema_name = databricks_schema.things.name + depends_on = [ databricks_volume.this ] + } + output "volumes" { + value = length(data.databricks_volumes_pluginframework.this.ids) + } + `, + Check: checkDataSourceVolumesPluginFrameworkPopulated(t), + }) +} diff --git a/pluginframework/data_volumes.go b/pluginframework/data_volumes.go index e3ba7a82c9..bbbb579ebd 100644 --- a/pluginframework/data_volumes.go +++ b/pluginframework/data_volumes.go @@ -46,6 +46,7 @@ func (d *VolumesDataSource) Schema(ctx context.Context, req datasource.SchemaReq "ids": schema.ListAttribute{ ElementType: types.StringType, Optional: true, + Computed: true, }, }, }