From 3112deb3e60c3ac48d6367540f9ea44d0ad8d419 Mon Sep 17 00:00:00 2001 From: corey-aloia <35958442+corey-aloia@users.noreply.github.com> Date: Fri, 9 Feb 2024 17:53:44 +0100 Subject: [PATCH] [Rest Client] changing to enable relative urls (#477) * changing to enable relative urls Signed-off-by: Corey Aloia --- pkg/rest/client/rest.go | 6 +--- pkg/rest/client/rest_test.go | 65 ++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/pkg/rest/client/rest.go b/pkg/rest/client/rest.go index d235ae0..623f089 100644 --- a/pkg/rest/client/rest.go +++ b/pkg/rest/client/rest.go @@ -22,11 +22,7 @@ type restClient struct { // do performs an HTTP request with this client and returns the response. func (c *restClient) do(method, uri string, body []byte) (*http.Response, error) { - rel, err := url.Parse(uri) - if err != nil { - return nil, err - } - url := c.baseURL.ResolveReference(rel) + url := c.baseURL.JoinPath(uri) var r io.Reader if body != nil { r = bytes.NewReader(body) diff --git a/pkg/rest/client/rest_test.go b/pkg/rest/client/rest_test.go index 175dbc6..563e57f 100644 --- a/pkg/rest/client/rest_test.go +++ b/pkg/rest/client/rest_test.go @@ -2,6 +2,7 @@ package client import ( "bytes" + "fmt" "io" "net/http" "net/url" @@ -9,15 +10,22 @@ import ( ) const baseURLStr = "http://test.local:8080" +const baseURLPathStr = "http://test.local:8080/inbucket" var baseURL *url.URL +var baseURLPath *url.URL + func init() { var err error baseURL, err = url.Parse(baseURLStr) if err != nil { panic(err) } + baseURLPath, err = url.Parse(baseURLPathStr) + if err != nil { + panic(err) + } } type mockHTTPClient struct { @@ -51,32 +59,39 @@ func (m *mockHTTPClient) ReqBody() []byte { return body } -func TestDo(t *testing.T) { - var want, got string - mth := &mockHTTPClient{} - c := &restClient{mth, baseURL} - body := []byte("Test body") - - _, err := c.do("POST", "/dopost", body) - if err != nil { - t.Fatal(err) +func TestDoTable(t *testing.T) { + tests := []struct { + method string + uri string + wantMethod string + base *url.URL + wantUrl string + wantBody []byte + }{ + {method: "GET", wantMethod: "GET", uri: "/doget", base: baseURL, wantUrl: baseURLStr + "/doget", wantBody: []byte("Test body 1")}, + {method: "POST", wantMethod: "POST", uri: "/dopost", base: baseURL, wantUrl: baseURLStr + "/dopost", wantBody: []byte("Test body 2")}, + {method: "GET", wantMethod: "GET", uri: "/doget", base: baseURLPath, wantUrl: baseURLPathStr + "/doget", wantBody: []byte("Test body 3")}, + {method: "POST", wantMethod: "POST", uri: "/dopost", base: baseURLPath, wantUrl: baseURLPathStr + "/dopost", wantBody: []byte("Test body 4")}, } - - want = "POST" - got = mth.req.Method - if got != want { - t.Errorf("req.Method == %q, want %q", got, want) - } - - want = baseURLStr + "/dopost" - got = mth.req.URL.String() - if got != want { - t.Errorf("req.URL == %q, want %q", got, want) - } - - b := mth.ReqBody() - if !bytes.Equal(b, body) { - t.Errorf("req.Body == %q, want %q", b, body) + for _, test := range tests { + testname := fmt.Sprintf("%s,%s", test.method, test.wantUrl) + t.Run(testname, func(t *testing.T) { + mth := &mockHTTPClient{} + c := &restClient{mth, test.base} + _, err := c.do(test.method, test.uri, test.wantBody) + if err != nil { + t.Fatal(err) + } + if mth.req.Method != test.wantMethod { + t.Errorf("req.Method == %q, want %q", mth.req.Method, test.wantMethod) + } + if mth.req.URL.String() != test.wantUrl { + t.Errorf("req.URL == %q, want %q", mth.req.URL.String(), test.wantUrl) + } + if !bytes.Equal(mth.ReqBody(), test.wantBody) { + t.Errorf("req.Body == %q, want %q", mth.ReqBody(), test.wantBody) + } + }) } }