From ca41a846157bfb0f3adaf505e9cc493b4095ce3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Herv=C3=A9?= Date: Fri, 19 Jan 2024 14:52:19 +0100 Subject: [PATCH] Add test --- datadog/fwprovider/framework_provider.go | 5 + .../cassettes/TestAccOpenapiApiBasic.freeze | 1 + .../cassettes/TestAccOpenapiApiBasic.yaml | 114 ++++++++++++++++++ datadog/tests/framework_provider_test.go | 5 + datadog/tests/provider_test.go | 1 + .../resource_datadog_openapi_api_test.go | 39 ++++-- .../resources/datadog_openapi_api/resource.tf | 7 +- go.mod | 6 +- go.sum | 8 +- 9 files changed, 167 insertions(+), 19 deletions(-) create mode 100644 datadog/tests/cassettes/TestAccOpenapiApiBasic.freeze create mode 100644 datadog/tests/cassettes/TestAccOpenapiApiBasic.yaml diff --git a/datadog/fwprovider/framework_provider.go b/datadog/fwprovider/framework_provider.go index dbc1cc83b0..652540e8a0 100644 --- a/datadog/fwprovider/framework_provider.go +++ b/datadog/fwprovider/framework_provider.go @@ -363,6 +363,11 @@ func defaultConfigureFunc(p *FrameworkProvider, request *provider.ConfigureReque ddClientConfig.UserAgent = utils.GetUserAgentFramework(ddClientConfig.UserAgent, request.TerraformVersion) ddClientConfig.Debug = logging.IsDebugOrHigher() + ddClientConfig.SetUnstableOperationEnabled("v2.CreateOpenAPI", true) + ddClientConfig.SetUnstableOperationEnabled("v2.UpdateOpenAPI", true) + ddClientConfig.SetUnstableOperationEnabled("v2.GetOpenAPI", true) + ddClientConfig.SetUnstableOperationEnabled("v2.DeleteOpenAPI", true) + if !config.ApiUrl.IsNull() && config.ApiUrl.ValueString() != "" { parsedAPIURL, parseErr := url.Parse(config.ApiUrl.ValueString()) if parseErr != nil { diff --git a/datadog/tests/cassettes/TestAccOpenapiApiBasic.freeze b/datadog/tests/cassettes/TestAccOpenapiApiBasic.freeze new file mode 100644 index 0000000000..429335ce15 --- /dev/null +++ b/datadog/tests/cassettes/TestAccOpenapiApiBasic.freeze @@ -0,0 +1 @@ +2024-01-29T13:46:34.377795845+01:00 \ No newline at end of file diff --git a/datadog/tests/cassettes/TestAccOpenapiApiBasic.yaml b/datadog/tests/cassettes/TestAccOpenapiApiBasic.yaml new file mode 100644 index 0000000000..92d9f74463 --- /dev/null +++ b/datadog/tests/cassettes/TestAccOpenapiApiBasic.yaml @@ -0,0 +1,114 @@ +--- +version: 2 +interactions: + - id: 0 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 446 + transfer_encoding: [] + trailer: {} + host: api.datadoghq.com + remote_addr: "" + request_uri: "" + body: "--b83b2fd69da78bf28017af4b8c09378bf61fa1caa18e15bf1b49ab6e16f4\r\nContent-Disposition: form-data; name=\"openapi_spec_file\"; filename=\".\"\r\nContent-Type: application/octet-stream\r\n\r\ninfo:\n contact:\n name: API team\n description: My API description.\n title: tf-TestAccOpenapiApiBasic-local-1706532394\nopenapi: 3.0.0\npaths:\n /api/my-api:\n get:\n description: An endpoint\n\r\n--b83b2fd69da78bf28017af4b8c09378bf61fa1caa18e15bf1b49ab6e16f4--\r\n" + form: {} + headers: + Accept: + - application/json + Content-Type: + - multipart/form-data; boundary=b83b2fd69da78bf28017af4b8c09378bf61fa1caa18e15bf1b49ab6e16f4 + url: https://api.datadoghq.com/api/v2/apicatalog/openapi + method: POST + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 104 + uncompressed: false + body: '{"data":{"id":"3326a3a7-6d74-48b7-9a63-bd7b5656ed6f","type":"api","attributes":{"failed_endpoints":[]}}}' + headers: + Content-Type: + - application/vnd.api+json + status: 201 Created + code: 201 + duration: 409.277916ms + - id: 1 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: api.datadoghq.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Accept: + - application/json + url: https://api.datadoghq.com/api/v2/apicatalog/api/3326a3a7-6d74-48b7-9a63-bd7b5656ed6f/openapi + method: GET + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 200 + uncompressed: false + body: | + info: + contact: + name: API team + description: My API description. + title: tf-TestAccOpenapiApiBasic-local-1706532394 + openapi: 3.0.0 + paths: + /api/my-api: + get: + description: An endpoint + headers: + Content-Type: + - multipart/form-data + status: 200 OK + code: 200 + duration: 113.217858ms + - id: 2 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 0 + transfer_encoding: [] + trailer: {} + host: api.datadoghq.com + remote_addr: "" + request_uri: "" + body: "" + form: {} + headers: + Accept: + - '*/*' + url: https://api.datadoghq.com/api/v2/apicatalog/api/3326a3a7-6d74-48b7-9a63-bd7b5656ed6f + method: DELETE + response: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + transfer_encoding: [] + trailer: {} + content_length: 0 + uncompressed: false + body: "" + headers: + Content-Type: + - application/vnd.api+json + status: 204 No Content + code: 204 + duration: 117.394279ms diff --git a/datadog/tests/framework_provider_test.go b/datadog/tests/framework_provider_test.go index 2ee0c486f9..a76f03d4d0 100644 --- a/datadog/tests/framework_provider_test.go +++ b/datadog/tests/framework_provider_test.go @@ -33,6 +33,11 @@ func buildFrameworkDatadogClient(ctx context.Context, httpClient *http.Client) * //Datadog API config.HTTPClient config := common.NewConfiguration() + config.SetUnstableOperationEnabled("v2.CreateOpenAPI", true) + config.SetUnstableOperationEnabled("v2.UpdateOpenAPI", true) + config.SetUnstableOperationEnabled("v2.GetOpenAPI", true) + config.SetUnstableOperationEnabled("v2.DeleteOpenAPI", true) + if ctx.Value("http_retry_enable") == true { config.RetryConfiguration.EnableRetry = true } diff --git a/datadog/tests/provider_test.go b/datadog/tests/provider_test.go index 0aec8a9259..a5e5af0400 100644 --- a/datadog/tests/provider_test.go +++ b/datadog/tests/provider_test.go @@ -138,6 +138,7 @@ var testFiles2EndpointTags = map[string]string{ "tests/resource_datadog_dashboard_topology_map_test": "dashboards", "tests/resource_datadog_dashboard_trace_service_test": "dashboards", "tests/resource_datadog_dashboard_treemap_test": "dashboards", + "tests/resource_datadog_openapi_api_test": "apimanagement", "tests/resource_datadog_powerpack_test": "powerpacks", "tests/resource_datadog_powerpack_alert_graph_test": "powerpacks", "tests/resource_datadog_powerpack_alert_value_test": "powerpacks", diff --git a/datadog/tests/resource_datadog_openapi_api_test.go b/datadog/tests/resource_datadog_openapi_api_test.go index 187c65c0ce..0a1f459e47 100644 --- a/datadog/tests/resource_datadog_openapi_api_test.go +++ b/datadog/tests/resource_datadog_openapi_api_test.go @@ -8,11 +8,24 @@ import ( "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/terraform-providers/terraform-provider-datadog/datadog" + "github.com/google/uuid" "github.com/terraform-providers/terraform-provider-datadog/datadog/fwprovider" "github.com/terraform-providers/terraform-provider-datadog/datadog/internal/utils" ) +const apiContent = ` +info: + contact: + name: API team + description: My API description. + title: %s +openapi: 3.0.0 +paths: + /api/my-api: + get: + description: An endpoint +` + func TestAccOpenapiApiBasic(t *testing.T) { t.Parallel() ctx, providers, accProviders := testAccFrameworkMuxProviders(context.Background(), t) @@ -33,10 +46,20 @@ func TestAccOpenapiApiBasic(t *testing.T) { } func testAccCheckDatadogOpenapiApi(uniq string) string { - // Update me to make use of the unique value - return fmt.Sprintf(`resource "datadog_openapi_api" "foo" { - spec_file = "UPDATE ME" - body = "UPDATE ME" + return fmt.Sprintf(` +resource "datadog_openapi_api" "test-api" { + spec = < /home/therve/Projects/datadog-api-client-go diff --git a/go.sum b/go.sum index f77b988e69..04a218906d 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/datadog-api-client-go/v2 v2.21.1-0.20240125185137-c5d2119fede6 h1:KlX1O7Jfz0GE9LzEIrP6xXzimChrUAtvNQNBD7BSdYg= -github.com/DataDog/datadog-api-client-go/v2 v2.21.1-0.20240125185137-c5d2119fede6/go.mod h1:lHlfhsNQ2qZclvpVQTfrGowUDIdIzAao38A05f9EQpc= +github.com/DataDog/datadog-api-client-go/v2 v2.21.1-0.20240126170449-0d471e4f5276 h1:f9Q2bB8fbgbjgw2lO2pbf/L6N1/jza6gKtkNw9WOxL4= +github.com/DataDog/datadog-api-client-go/v2 v2.21.1-0.20240126170449-0d471e4f5276/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc= github.com/DataDog/datadog-go v4.4.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= @@ -97,8 +97,8 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=