From ba7ded84a9a09da2ef63362792656cbd57d9aae1 Mon Sep 17 00:00:00 2001 From: jeremytchang <78522362+jeremytchang@users.noreply.github.com> Date: Mon, 17 Oct 2022 17:00:58 -0700 Subject: [PATCH] fix: Handle Go SDK 204 no responses correctly (#1193) Changes copied from approved PR from forked repo #1074 Original commit message: I added status code handling in the Go SDK to deal with delete endpoints' response body. In Looker API, delete endpoints call returns empty response body with status code 204 when the API call is succeeded. Such API call will be failed with EOF error in the current implementation because of reading empty response body. Co-authored-by: hirohito-sasakawa Co-authored-by: hirosassa --- go/integration/integration_test.go | 60 ++++++++++++++++++++++++++++++ go/rtl/auth.go | 4 ++ 2 files changed, 64 insertions(+) diff --git a/go/integration/integration_test.go b/go/integration/integration_test.go index b96afc6c4..be8fa4ba3 100644 --- a/go/integration/integration_test.go +++ b/go/integration/integration_test.go @@ -165,6 +165,66 @@ func TestIntegrationGoSDK(t *testing.T) { } }) + t.Run("CRUD User Attribute Group Value", func(t *testing.T) { + name := "foo" + group, err := sdk.CreateGroup(v4.WriteGroup{ + Name: &name, + }, "", nil) + if err != nil { + t.Errorf("CreateGroup() failed. error=%v", err) + } + + groupId := group.Id + group, err = sdk.Group(*groupId, "", nil) + if err != nil { + t.Errorf("Group() failed. error=%v", err) + } + + attributeName := "bar" + attributeLabel := "bar" + attributeType := "string" + ua, err := sdk.CreateUserAttribute(v4.WriteUserAttribute{ + Name: attributeName, + Label: attributeLabel, + Type: attributeType, + }, "", nil) + if err != nil { + t.Errorf("CreateUserAttribute failed. error=%v", err) + } + + uaId := ua.Id + ua, err = sdk.UserAttribute(*uaId, "", nil) + if err != nil { + t.Errorf("UserAttribute() failed. error=%v", err) + } + + value := "baz" + _, err = sdk.UpdateUserAttributeGroupValue(*groupId, *uaId, v4.UserAttributeGroupValue{ + GroupId: groupId, + UserAttributeId: uaId, + Value: &value, + }, nil) + if err != nil { + t.Errorf("UpdateUserAttributeGroupValue() failed. error=%v", err) + } + + err = sdk.DeleteUserAttributeGroupValue(*groupId, *uaId, nil) + if err != nil { + t.Errorf("DeleteUserAttributeGroupValue() failed. error=%v", err) + } + + _, err = sdk.DeleteUserAttribute(*uaId, nil) + if err != nil { + t.Errorf("DeleteUserAttribute() failed. error=%v", err) + } + + _, err = sdk.DeleteGroup(*groupId, nil) + if err != nil { + t.Errorf("DeleteGroup() failed. error=%v", err) + } + + }) + t.Run("Me()", func(t *testing.T) { user, err := sdk.Me("", nil) diff --git a/go/rtl/auth.go b/go/rtl/auth.go index 2a5a430db..91acc1495 100644 --- a/go/rtl/auth.go +++ b/go/rtl/auth.go @@ -118,6 +118,10 @@ func (s *AuthSession) Do(result interface{}, method, ver, path string, reqPars m return fmt.Errorf("response error. status=%s. error=%s", res.Status, string(b)) } + if res.StatusCode == 204 { // 204 No Content. DELETE endpoints returns response with no body + return nil + } + // TODO: Make parsing content-type aware. Requires change to go model generation to use interface{} for all union types. // Github Issue: https://github.com/looker-open-source/sdk-codegen/issues/1022 switch v := result.(type) {