From bfcf8b21291954c50a5da4a93d477355b30687e2 Mon Sep 17 00:00:00 2001 From: Le Date: Tue, 10 Dec 2024 11:07:38 +0100 Subject: [PATCH] refactor: check success by 2xx range --- client/buildingblock.go | 10 ++++------ client/project.go | 10 ++++------ client/project_binding.go | 10 ++++------ client/status_code_checker.go | 20 ++++++++++++++++++++ client/tag_definition.go | 14 +++++--------- client/tenant.go | 10 ++++------ 6 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 client/status_code_checker.go diff --git a/client/buildingblock.go b/client/buildingblock.go index c9c0358..65ff60c 100644 --- a/client/buildingblock.go +++ b/client/buildingblock.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/url" + + "terraform-provider-meshstack/status_code_checker" ) const ( @@ -103,9 +105,7 @@ func (c *MeshStackProviderClient) ReadBuildingBlock(uuid string) (*MeshBuildingB return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var bb MeshBuildingBlock err = json.Unmarshal(data, &bb) @@ -141,9 +141,7 @@ func (c *MeshStackProviderClient) CreateBuildingBlock(bb *MeshBuildingBlockCreat return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdBb MeshBuildingBlock err = json.Unmarshal(data, &createdBb) diff --git a/client/project.go b/client/project.go index eca75ca..9580609 100644 --- a/client/project.go +++ b/client/project.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/url" + + "terraform-provider-meshstack/status_code_checker" ) const CONTENT_TYPE_PROJECT = "application/vnd.meshcloud.api.meshproject.v2.hal+json" @@ -178,9 +180,7 @@ func (c *MeshStackProviderClient) CreateProject(project *MeshProjectCreate) (*Me return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdProject MeshProject err = json.Unmarshal(data, &createdProject) @@ -219,9 +219,7 @@ func (c *MeshStackProviderClient) UpdateProject(project *MeshProjectCreate) (*Me return nil, err } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var updatedProject MeshProject err = json.Unmarshal(data, &updatedProject) diff --git a/client/project_binding.go b/client/project_binding.go index fdb71e5..a47465c 100644 --- a/client/project_binding.go +++ b/client/project_binding.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/url" + + "terraform-provider-meshstack/status_code_checker" ) type MeshProjectBinding struct { @@ -70,9 +72,7 @@ func (c *MeshStackProviderClient) readProjectBinding(name string, contentType st return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var binding MeshProjectBinding err = json.Unmarshal(data, &binding) @@ -120,9 +120,7 @@ func (c *MeshStackProviderClient) createProjectBinding(binding *MeshProjectBindi return nil, err } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdBinding MeshProjectBinding err = json.Unmarshal(data, &createdBinding) diff --git a/client/status_code_checker.go b/client/status_code_checker.go new file mode 100644 index 0000000..0f743ef --- /dev/null +++ b/client/status_code_checker.go @@ -0,0 +1,20 @@ +package client + +import ( + "io" + "fmt" + "net/http" +) + +func isSuccessHTTPStatusOrThrow(resp *http.Response) error { + data, err := io.ReadAll(res.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return fmt.Errorf("unexpected status code: got %d, expected 2xx range\nBody: %s", resp.StatusCode, data) + } + + return nil +} diff --git a/client/tag_definition.go b/client/tag_definition.go index 1855b26..4b4ca7c 100644 --- a/client/tag_definition.go +++ b/client/tag_definition.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/url" + + "terraform-provider-meshstack/status_code_checker" ) const API_VERSION_TAG_DEFINITION = "v1" @@ -156,9 +158,7 @@ func (c *MeshStackProviderClient) ReadTagDefinition(name string) (*MeshTagDefini } defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to read tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var tagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&tagDefinition); err != nil { @@ -191,9 +191,7 @@ func (c *MeshStackProviderClient) CreateTagDefinition(tagDefinition *MeshTagDefi } defer resp.Body.Close() - if resp.StatusCode != http.StatusCreated { - return nil, fmt.Errorf("failed to create tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var createdTagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&createdTagDefinition); err != nil { @@ -224,9 +222,7 @@ func (c *MeshStackProviderClient) UpdateTagDefinition(tagDefinition *MeshTagDefi } defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("failed to update tag definition: %s", resp.Status) - } + isSuccessHTTPStatusOrThrow(resp) var updatedTagDefinition MeshTagDefinition if err := json.NewDecoder(resp.Body).Decode(&updatedTagDefinition); err != nil { diff --git a/client/tenant.go b/client/tenant.go index b83c5e6..dadda08 100644 --- a/client/tenant.go +++ b/client/tenant.go @@ -7,6 +7,8 @@ import ( "io" "net/http" "net/url" + + "terraform-provider-meshstack/status_code_checker" ) const CONTENT_TYPE_TENANT = "application/vnd.meshcloud.api.meshtenant.v3.hal+json" @@ -83,9 +85,7 @@ func (c *MeshStackProviderClient) ReadTenant(workspace string, project string, p return nil, nil } - if res.StatusCode != 200 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var tenant MeshTenant err = json.Unmarshal(data, &tenant) @@ -121,9 +121,7 @@ func (c *MeshStackProviderClient) CreateTenant(tenant *MeshTenantCreate) (*MeshT return nil, err } - if res.StatusCode != 201 { - return nil, fmt.Errorf("unexpected status code: %d, %s", res.StatusCode, data) - } + isSuccessHTTPStatusOrThrow(res) var createdTenant MeshTenant err = json.Unmarshal(data, &createdTenant)