// Copyright 2024 Matthew Rich . All rights reserved. package transport import ( "github.com/stretchr/testify/assert" "testing" "fmt" _ "os" "io" "net/url" _ "path/filepath" "context" "net/http" "net/http/httptest" ) func TestNewTransportHTTPReader(t *testing.T) { //ctx := context.Background() body := []byte(` type: "user" attributes: name: "foo" gecos: "foo user" `) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { assert.Equal(t, req.URL.String(), "/resource/user") n,e := rw.Write(body) assert.Nil(t, e) assert.Greater(t, n, 0) assert.Equal(t, "bar", req.Header.Get("foo")) })) defer server.Close() u, urlErr := url.Parse(fmt.Sprintf("%s/resource/user", server.URL)) assert.Nil(t, urlErr) h, err := NewHTTP(u, context.Background()) assert.Nil(t, err) assert.NotNil(t, h) h.Reader() h.GetRequest().Header.Add("foo", "bar") resData, readErr := io.ReadAll(h.Reader()) assert.Nil(t, readErr) assert.Greater(t, len(resData), 0) assert.Equal(t, body, resData) } func TestNewTransportHTTPWriter(t *testing.T) { body := []byte(` type: "user" attributes: name: "foo" gecos: "foo user" `) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { assert.Equal(t, req.URL.String(), "/resource/user") n, postBody := io.ReadAll(req.Body) assert.Greater(t, n, 0) assert.Equal(t, "bar", req.Header.Get("foo")) assert.Equal(t, body, postBody) })) defer server.Close() u, urlErr := url.Parse(fmt.Sprintf("%s/resource/user", server.URL)) assert.Nil(t, urlErr) h, err := NewHTTP(u, context.Background()) assert.Nil(t, err) assert.NotNil(t, h) h.Writer() h.PostRequest().Header.Add("foo", "bar") // _, writeErr := h.Writer().Write(body) // assert.Nil(t, writeErr) } func TestNewHTTPConnection(t *testing.T) { ctx := context.Background() h := NewHTTPConnection(http.DefaultClient) assert.NotNil(t, h) body := []byte(` type: "user" attributes: name: "foo" gecos: "foo user" `) server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { assert.Equal(t, req.URL.String(), "/resource/user") n,e := rw.Write(body) assert.Nil(t, e) assert.Greater(t, n, 0) assert.Equal(t, "bar", req.Header.Get("foo")) })) defer server.Close() uri := fmt.Sprintf("%s/resource/user", server.URL) assert.Nil(t, h.NewGetRequest(ctx, uri)) h.Request().Header.Add("foo", "bar") responseData, responseErr := io.ReadAll(h) assert.Nil(t, responseErr) assert.Equal(t, body, responseData) }