From 175454b6d72473e281efc0e421b188efa7b115d6 Mon Sep 17 00:00:00 2001 From: Steven Normore Date: Sun, 1 Sep 2019 08:48:01 -0400 Subject: [PATCH] Support unset/nil count field on Kubernetes node pool updates. --- godo_test.go | 4 ++++ kubernetes.go | 2 +- kubernetes_test.go | 54 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/godo_test.go b/godo_test.go index 296037a..0974f4b 100644 --- a/godo_test.go +++ b/godo_test.go @@ -539,3 +539,7 @@ func TestCustomBaseURL_badURL(t *testing.T) { testURLParseError(t, err) } + +func intPtr(val int) *int { + return &val +} diff --git a/kubernetes.go b/kubernetes.go index 254ec54..f46c1bd 100644 --- a/kubernetes.go +++ b/kubernetes.go @@ -91,7 +91,7 @@ type KubernetesNodePoolCreateRequest struct { // Kubernetes cluster. type KubernetesNodePoolUpdateRequest struct { Name string `json:"name,omitempty"` - Count int `json:"count,omitempty"` + Count *int `json:"count,omitempty"` Tags []string `json:"tags,omitempty"` } diff --git a/kubernetes_test.go b/kubernetes_test.go index 710e80e..925af3d 100644 --- a/kubernetes_test.go +++ b/kubernetes_test.go @@ -1,6 +1,7 @@ package godo import ( + "bytes" "encoding/json" "fmt" "net/http" @@ -765,7 +766,7 @@ func TestKubernetesClusters_UpdateNodePool(t *testing.T) { } updateRequest := &KubernetesNodePoolUpdateRequest{ Name: "a better name", - Count: 4, + Count: intPtr(4), Tags: []string{"tag-1", "tag-2"}, } @@ -799,6 +800,57 @@ func TestKubernetesClusters_UpdateNodePool(t *testing.T) { require.Equal(t, want, got) } +func TestKubernetesClusters_UpdateNodePool_ZeroCount(t *testing.T) { + setup() + defer teardown() + + kubeSvc := client.Kubernetes + + want := &KubernetesNodePool{ + ID: "8d91899c-nodepool-4a1a-acc5-deadbeefbb8a", + Name: "name", + Size: "s-1vcpu-1gb", + Count: 0, + Tags: []string{"tag-1", "tag-2"}, + } + updateRequest := &KubernetesNodePoolUpdateRequest{ + Count: intPtr(0), + } + + jBlob := ` +{ + "node_pool": { + "id": "8d91899c-nodepool-4a1a-acc5-deadbeefbb8a", + "size": "s-1vcpu-1gb", + "count": 0, + "name": "name", + "tags": [ + "tag-1", "tag-2" + ] + } +}` + + expectedReqJSON := "{\"count\":0}\n" + + mux.HandleFunc("/v2/kubernetes/clusters/8d91899c-0739-4a1a-acc5-deadbeefbb8f/node_pools/8d91899c-nodepool-4a1a-acc5-deadbeefbb8a", func(w http.ResponseWriter, r *http.Request) { + buf := new(bytes.Buffer) + buf.ReadFrom(r.Body) + require.Equal(t, expectedReqJSON, buf.String()) + + v := new(KubernetesNodePoolUpdateRequest) + err := json.NewDecoder(buf).Decode(v) + require.NoError(t, err) + + testMethod(t, r, http.MethodPut) + require.Equal(t, v, updateRequest) + fmt.Fprint(w, jBlob) + }) + + got, _, err := kubeSvc.UpdateNodePool(ctx, "8d91899c-0739-4a1a-acc5-deadbeefbb8f", "8d91899c-nodepool-4a1a-acc5-deadbeefbb8a", updateRequest) + require.NoError(t, err) + require.Equal(t, want, got) +} + func TestKubernetesClusters_DeleteNodePool(t *testing.T) { setup() defer teardown()