Skip to content

Commit f95a7fd

Browse files
authored
tfprotov5/tf5server: Ensure server options are passed through on startup (#153)
Reference: #152 Currently this functionality cannot implement unit testing without a larger refactoring effort as there is no way to retrieve the generated `ServeConfig` and `plugin.ServeConfig` inside the function. While refactoring that logic into an unexported function such as: ```go func prepareServeConfigs(providerAddress string, providerServerFunc func() tfprotov5.ProviderServer, opts ...ServeOpt) (*ServeConfig, *plugin.ServeConfig, error) ``` Would be fairly straightforward, the `ServeConfig` itself implements all unexported fields which presents some tougher challenges with `go-cmp`: ``` panic: cannot handle unexported field at {*tf5server.ServeConfig}.logger: "github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server".ServeConfig consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported ``` This chooses instead to fix the implementation to match `tf6server`, rather than bundle all this unrelated work into the simple bug fix. Previously: ```console ❯ TF_ACC=1 go test -timeout=1m -v ./internal/sdkv2provider === RUN TestProvider --- PASS: TestProvider (0.00s) === RUN TestProvider_impl --- PASS: TestProvider_impl (0.00s) === RUN TestAccTests === RUN TestAccTests/corner_user {"@caller":"/Users/bflad/go/pkg/mod/github.com/hashicorp/[email protected]/internal/logging/protocol.go:21","@Level":"trace","@message":"Received request","@module":"sdk.proto","@timestamp":"2022-02-04T16:28:52.602080-05:00","EXTRA_VALUE_AT_END":null,"tf_proto_version":"5.2","tf_provider_addr":"","tf_req_id":"a24b8a29-628a-01c2-0516-08b260627109","tf_rpc":"GetProviderSchema"} {"@caller":"/Users/bflad/go/pkg/mod/github.com/hashicorp/[email protected]/internal/logging/protocol.go:21","@Level":"trace","@message":"Calling downstream","@module":"sdk.proto","@timestamp":"2022-02-04T16:28:52.602157-05:00","EXTRA_VALUE_AT_END":null,"tf_proto_version":"5.2","tf_provider_addr":"","tf_req_id":"a24b8a29-628a-01c2-0516-08b260627109","tf_rpc":"GetProviderSchema"} {"@caller":"/Users/bflad/go/pkg/mod/github.com/hashicorp/[email protected]/internal/logging/protocol.go:21","@Level":"trace","@message":"Called downstream","@module":"sdk.proto","@timestamp":"2022-02-04T16:28:52.602257-05:00","EXTRA_VALUE_AT_END":null,"tf_proto_version":"5.2","tf_provider_addr":"","tf_req_id":"a24b8a29-628a-01c2-0516-08b260627109","tf_rpc":"GetProviderSchema"} {"@caller":"/Users/bflad/go/pkg/mod/github.com/hashicorp/[email protected]/internal/logging/protocol.go:21","@Level":"trace","@message":"Served request","@module":"sdk.proto","@timestamp":"2022-02-04T16:28:52.602299-05:00","EXTRA_VALUE_AT_END":null,"tf_proto_version":"5.2","tf_provider_addr":"","tf_req_id":"a24b8a29-628a-01c2-0516-08b260627109","tf_rpc":"GetProviderSchema"} {"@caller":"/Users/bflad/go/pkg/mod/github.com/hashicorp/[email protected]/internal/logging/protocol.go:21","@Level":"trace","@message":"Received request","@module":"sdk.proto","@timestamp":"2022-02-04T16:28:52.666614-05:00","EXTRA_VALUE_AT_END":null,"tf_proto_version":"5.2","tf_provider_addr":"","tf_req_id":"97a74410-24d3-4d4e-c61c-9062200c75e8","tf_rpc":"GetProviderSchema"} ... many more ... ``` Now: ```console ❯ TF_ACC=1 go test -timeout=1m -v ./internal/sdkv2provider === RUN TestProvider --- PASS: TestProvider (0.00s) === RUN TestProvider_impl --- PASS: TestProvider_impl (0.00s) === RUN TestAccTests === RUN TestAccTests/corner_regions_cty === RUN TestAccTests/corner_user === RUN TestAccTests/corner_regions === RUN TestAccTests/corner_bigint_data === RUN TestAccTests/corner_bigint === RUN TestAccTests/corner_user_cty --- PASS: TestAccTests (6.76s) --- PASS: TestAccTests/corner_regions_cty (1.24s) --- PASS: TestAccTests/corner_user (1.02s) --- PASS: TestAccTests/corner_regions (0.92s) --- PASS: TestAccTests/corner_bigint_data (0.92s) --- PASS: TestAccTests/corner_bigint (0.97s) --- PASS: TestAccTests/corner_user_cty (1.69s) PASS ok github.com/hashicorp/terraform-provider-corner/internal/sdkv2provider 7.510s ```
1 parent 8cf5155 commit f95a7fd

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed

.changelog/153.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
tfprotov5/tf5server: Ensure server options are passed through on startup
3+
```

tfprotov5/tf5server/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ func Serve(name string, serverFactory func() tfprotov5.ProviderServer, opts ...S
259259
Plugins: plugin.PluginSet{
260260
"provider": &GRPCProviderPlugin{
261261
Name: name,
262+
Opts: opts,
262263
GRPCProvider: serverFactory,
263264
},
264265
},

0 commit comments

Comments
 (0)