From e7cb88110c516b48fb172e20964f5f546803d2c1 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Thu, 1 Dec 2022 13:54:26 -0500 Subject: [PATCH] fix(fw): assert WithGetSchema interface extension --- internal/acctest/framework.go | 14 +++++++++++--- internal/provider/fwprovider/provider.go | 22 ++++++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/internal/acctest/framework.go b/internal/acctest/framework.go index 80c82f35d061..f79f55549c3b 100644 --- a/internal/acctest/framework.go +++ b/internal/acctest/framework.go @@ -2,10 +2,12 @@ package acctest import ( "context" + "errors" "fmt" "log" "strings" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" fwresource "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/tfsdk" @@ -29,10 +31,16 @@ func DeleteFrameworkResource(factory func(context.Context) (fwresource.ResourceW resource.Configure(ctx, fwresource.ConfigureRequest{ProviderData: meta}, &fwresource.ConfigureResponse{}) - schema, diags := resource.GetSchema(ctx) + var schema tfsdk.Schema + var diags diag.Diagnostics + if v, ok := resource.(fwresource.ResourceWithGetSchema); ok { + schema, diags = v.GetSchema(ctx) - if diags.HasError() { - return fwdiag.DiagnosticsError(diags) + if diags.HasError() { + return fwdiag.DiagnosticsError(diags) + } + } else { + return errors.New("resource does not implement GetSchema method") } // Construct a simple Framework State that contains just top-level attributes. diff --git a/internal/provider/fwprovider/provider.go b/internal/provider/fwprovider/provider.go index 329abd15c65b..33c39fc160aa 100644 --- a/internal/provider/fwprovider/provider.go +++ b/internal/provider/fwprovider/provider.go @@ -404,7 +404,16 @@ func (w *wrappedDataSource) Metadata(ctx context.Context, request datasource.Met } func (w *wrappedDataSource) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) { - return w.inner.GetSchema(ctx) + if v, ok := w.inner.(datasource.DataSourceWithGetSchema); ok { + return v.GetSchema(ctx) + } + + var diags diag.Diagnostics + diags.AddError( + "DataSource GetSchema Not Implemented", + "This data source does not support get schema. Please contact the provider developer for additional information.", + ) + return tfsdk.Schema{}, diags } func (w *wrappedDataSource) Read(ctx context.Context, request datasource.ReadRequest, response *datasource.ReadResponse) { @@ -434,7 +443,16 @@ func (w *wrappedResource) Metadata(ctx context.Context, request resource.Metadat } func (w *wrappedResource) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) { - return w.inner.GetSchema(ctx) + if v, ok := w.inner.(resource.ResourceWithGetSchema); ok { + return v.GetSchema(ctx) + } + + var diags diag.Diagnostics + diags.AddError( + "Resource GetSchema Not Implemented", + "This resource does not support get schema. Please contact the provider developer for additional information.", + ) + return tfsdk.Schema{}, diags } func (w *wrappedResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) {