Skip to content

Commit

Permalink
Marshal JSON payload via Gophercloud (#166)
Browse files Browse the repository at this point in the history
- removed RawBody in RequestsService
- added JSONBody (now payload will do convert to bytes via gophercloud)
- improved test for check content-type in requests with payload
  • Loading branch information
milkrage committed Aug 16, 2023
1 parent cb257da commit 9d9f5f3
Show file tree
Hide file tree
Showing 14 changed files with 51 additions and 141 deletions.
6 changes: 3 additions & 3 deletions selvpcclient/clients/services/requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ type RequestService struct {
}

type RequestOptions struct {
Body io.Reader
OkCodes []int
JSONBody interface{}
OkCodes []int
}

func NewRequestService(serviceClient *gophercloud.ServiceClient) *RequestService {
Expand All @@ -25,7 +25,7 @@ func NewRequestService(serviceClient *gophercloud.ServiceClient) *RequestService
func (s *RequestService) Do(method, url string, options *RequestOptions) (*ResponseResult, error) {
requestOpts := gophercloud.RequestOpts{
OkCodes: options.OkCodes,
RawBody: options.Body,
JSONBody: options.JSONBody,
KeepResponseBody: true,
}

Expand Down
13 changes: 2 additions & 11 deletions selvpcclient/quotamanager/quotas/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package quotas

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -24,7 +22,6 @@ func GetLimits(client *selvpcclient.Client, projectID, region string,
url := strings.Join([]string{endpoint, resourcePrefix, projectID, "limits"}, "/")

responseResult, err := client.QuotaManager.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -56,7 +53,6 @@ func GetProjectQuotas(client *selvpcclient.Client, projectID, region string,
url := strings.Join([]string{endpoint, resourcePrefix, projectID, "quotas"}, "/")

responseResult, err := client.QuotaManager.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand All @@ -81,11 +77,6 @@ func GetProjectQuotas(client *selvpcclient.Client, projectID, region string,
func UpdateProjectQuotas(client *selvpcclient.Client, projectID, region string,
updateOpts UpdateProjectQuotasOpts,
) ([]*Quota, *clientservices.ResponseResult, error) {
requestBody, err := json.Marshal(&updateOpts)
if err != nil {
return nil, nil, err
}

endpoint, err := client.QuotaManager.GetEndpoint(region)
if err != nil {
return nil, nil, fmt.Errorf("failed to get endpoint, err: %w", err)
Expand All @@ -94,8 +85,8 @@ func UpdateProjectQuotas(client *selvpcclient.Client, projectID, region string,
url := strings.Join([]string{endpoint, resourcePrefix, projectID, "quotas"}, "/")

responseResult, err := client.QuotaManager.Requests.Do(http.MethodPatch, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &updateOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand Down
1 change: 0 additions & 1 deletion selvpcclient/resell/v2/capabilities/requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ func Get(client *selvpcclient.Client) (*Capabilities, *clientservices.ResponseRe

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down
15 changes: 2 additions & 13 deletions selvpcclient/resell/v2/floatingips/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package floatingips

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -24,7 +22,6 @@ func Get(client *selvpcclient.Client, id string) (*FloatingIP, *clientservices.R

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -63,7 +60,6 @@ func List(client *selvpcclient.Client, opts ListOpts) ([]*FloatingIP, *clientser
url = strings.Join([]string{url, queryParams.Encode()}, "?")

responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand All @@ -87,21 +83,15 @@ func List(client *selvpcclient.Client, opts ListOpts) ([]*FloatingIP, *clientser

// Create requests a creation of the floating ip in the specified project.
func Create(client *selvpcclient.Client, projectID string, createOpts FloatingIPOpts) ([]*FloatingIP, *clientservices.ResponseResult, error) {
createFloatingIPOpts := &createOpts
requestBody, err := json.Marshal(createFloatingIPOpts)
if err != nil {
return nil, nil, err
}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
return nil, nil, fmt.Errorf("failed to get endpoint, err: %w", err)
}

url := strings.Join([]string{endpoint, resourceURL, "projects", projectID}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &createOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -131,7 +121,6 @@ func Delete(client *selvpcclient.Client, id string) (*clientservices.ResponseRes

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodDelete, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{204},
})
if err != nil {
Expand Down
12 changes: 2 additions & 10 deletions selvpcclient/resell/v2/keypairs/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package keypairs

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -22,7 +20,6 @@ func List(client *selvpcclient.Client) ([]*Keypair, *clientservices.ResponseResu

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -53,10 +50,6 @@ func Create(client *selvpcclient.Client, createOpts KeypairOpts) ([]*Keypair, *c
createKeypairOpts := nestedCreateOpts{
Keypair: createOpts,
}
requestBody, err := json.Marshal(&createKeypairOpts)
if err != nil {
return nil, nil, err
}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
Expand All @@ -65,8 +58,8 @@ func Create(client *selvpcclient.Client, createOpts KeypairOpts) ([]*Keypair, *c

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &createKeypairOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -96,7 +89,6 @@ func Delete(client *selvpcclient.Client, name, userID string) (*clientservices.R

url := strings.Join([]string{endpoint, resourceURL, name, "users", userID}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodDelete, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{204},
})
if err != nil {
Expand Down
15 changes: 2 additions & 13 deletions selvpcclient/resell/v2/licenses/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package licenses

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -24,7 +22,6 @@ func Get(client *selvpcclient.Client, id string) (*License, *clientservices.Resp

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -63,7 +60,6 @@ func List(client *selvpcclient.Client, opts ListOpts) ([]*License, *clientservic
url = strings.Join([]string{url, queryParams.Encode()}, "?")

responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand All @@ -87,21 +83,15 @@ func List(client *selvpcclient.Client, opts ListOpts) ([]*License, *clientservic

// Create requests a creation of the licenses in the specified project.
func Create(client *selvpcclient.Client, projectID string, createOpts LicenseOpts) ([]*License, *clientservices.ResponseResult, error) {
createLicenseOpts := &createOpts
requestBody, err := json.Marshal(createLicenseOpts)
if err != nil {
return nil, nil, err
}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
return nil, nil, fmt.Errorf("failed to get endpoint, err: %w", err)
}

url := strings.Join([]string{endpoint, resourceURL, "projects", projectID}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &createOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -131,7 +121,6 @@ func Delete(client *selvpcclient.Client, id string) (*clientservices.ResponseRes

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodDelete, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{204},
})
if err != nil {
Expand Down
25 changes: 6 additions & 19 deletions selvpcclient/resell/v2/projects/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package projects

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -22,7 +20,6 @@ func Get(client *selvpcclient.Client, id string) (*Project, *clientservices.Resp

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -53,7 +50,6 @@ func List(client *selvpcclient.Client) ([]*Project, *clientservices.ResponseResu

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -81,11 +77,7 @@ func Create(client *selvpcclient.Client, createOpts CreateOpts) (*Project, *clie
type createProject struct {
Options CreateOpts `json:"project"`
}
createProjectOpts := &createProject{Options: createOpts}
requestBody, err := json.Marshal(createProjectOpts)
if err != nil {
return nil, nil, err
}
createProjectOpts := createProject{Options: createOpts}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
Expand All @@ -94,8 +86,8 @@ func Create(client *selvpcclient.Client, createOpts CreateOpts) (*Project, *clie

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &createProjectOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand All @@ -122,11 +114,7 @@ func Update(client *selvpcclient.Client, id string, updateOpts UpdateOpts) (*Pro
type updateProject struct {
Options UpdateOpts `json:"project"`
}
updateProjectOpts := &updateProject{Options: updateOpts}
requestBody, err := json.Marshal(updateProjectOpts)
if err != nil {
return nil, nil, err
}
updateProjectOpts := updateProject{Options: updateOpts}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
Expand All @@ -135,8 +123,8 @@ func Update(client *selvpcclient.Client, id string, updateOpts UpdateOpts) (*Pro

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPatch, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200},
JSONBody: &updateProjectOpts,
OkCodes: []int{200},
})
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -166,7 +154,6 @@ func Delete(client *selvpcclient.Client, id string) (*clientservices.ResponseRes

url := strings.Join([]string{endpoint, resourceURL, id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodDelete, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{204},
})
if err != nil {
Expand Down
17 changes: 2 additions & 15 deletions selvpcclient/resell/v2/roles/requests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package roles

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
Expand All @@ -22,7 +20,6 @@ func List(client *selvpcclient.Client) ([]*Role, *clientservices.ResponseResult,

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -53,7 +50,6 @@ func ListProject(client *selvpcclient.Client, id string) ([]*Role, *clientservic

url := strings.Join([]string{endpoint, resourceURL, "projects", id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -84,7 +80,6 @@ func ListUser(client *selvpcclient.Client, id string) ([]*Role, *clientservices.

url := strings.Join([]string{endpoint, resourceURL, "users", id}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodGet, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand Down Expand Up @@ -115,7 +110,6 @@ func Create(client *selvpcclient.Client, createOpts RoleOpt) (*Role, *clientserv

url := strings.Join([]string{endpoint, resourceURL, "projects", createOpts.ProjectID, "users", createOpts.UserID}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{200},
})
if err != nil {
Expand All @@ -139,21 +133,15 @@ func Create(client *selvpcclient.Client, createOpts RoleOpt) (*Role, *clientserv

// CreateBulk requests a creation of several roles.
func CreateBulk(client *selvpcclient.Client, createOpts RoleOpts) ([]*Role, *clientservices.ResponseResult, error) {
createRolesOpts := &createOpts
requestBody, err := json.Marshal(createRolesOpts)
if err != nil {
return nil, nil, err
}

endpoint, err := client.Resell.GetEndpoint()
if err != nil {
return nil, nil, fmt.Errorf("failed to get endpoint, err: %w", err)
}

url := strings.Join([]string{endpoint, resourceURL}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodPost, url, &clientservices.RequestOptions{
Body: bytes.NewReader(requestBody),
OkCodes: []int{200, 208},
JSONBody: &createOpts,
OkCodes: []int{200, 208},
})
if err != nil {
return nil, nil, err
Expand Down Expand Up @@ -183,7 +171,6 @@ func Delete(client *selvpcclient.Client, deleteOpts RoleOpt) (*clientservices.Re

url := strings.Join([]string{endpoint, resourceURL, "projects", deleteOpts.ProjectID, "users", deleteOpts.UserID}, "/")
responseResult, err := client.Resell.Requests.Do(http.MethodDelete, url, &clientservices.RequestOptions{
Body: nil,
OkCodes: []int{204},
})
if err != nil {
Expand Down
Loading

0 comments on commit 9d9f5f3

Please sign in to comment.