diff --git a/bridge/bridge.go b/bridge/bridge.go index b2a58b6..b42af32 100755 --- a/bridge/bridge.go +++ b/bridge/bridge.go @@ -11,7 +11,6 @@ import ( "gopkg.in/guregu/null.v3" "io/ioutil" "net/http" - "net/url" "os" "time" ) @@ -302,7 +301,6 @@ type CallOpts struct { Query map[string]interface{} `json:"query"` QueryPassthrough bool `json:"queryPassthrough"` Body string `json:"body"` - PostForm url.Values `json:"postForm"` ExpectedCode int `json:"expectedCode"` } diff --git a/json/invalid.json b/json/invalid.json new file mode 100755 index 0000000..81750b9 --- /dev/null +++ b/json/invalid.json @@ -0,0 +1 @@ +{ \ No newline at end of file diff --git a/main.go b/main.go index 9efeb43..c6d8f3b 100755 --- a/main.go +++ b/main.go @@ -68,17 +68,10 @@ func NewJSONBridges(uri string) ([]bridge.Bridge, error) { func (ja *JSON) Run(h *bridge.Helper) (interface{}, error) { r := make(map[string]interface{}) p := make(map[string]interface{}) - f := make(map[string][]string) for k, v := range ja.bridge.Opts.Query { p[k] = h.GetParam(fmt.Sprintf("%s", v)) } ja.bridge.Opts.Query = p - for k, s := range ja.bridge.Opts.PostForm { - for _, v := range s { - f[k] = append(f[k], h.GetParam(v)) - } - } - ja.bridge.Opts.PostForm = f var url string if len(ja.bridge.URL) == 0 { url = h.GetParam("url") @@ -102,7 +95,7 @@ func (ja *JSON) Opts() *bridge.Opts { // Handler is the entrypoint for GCP functions func Handler(w http.ResponseWriter, r *http.Request) { env := os.Getenv("BRIDGE") - if len(env) != 0 { + if len(env) == 0 { w.Write([]byte("No bridge set")) return } else if b, err := NewJSONBridges(env); err != nil { diff --git a/main_test.go b/main_test.go index 753d574..2bf2669 100755 --- a/main_test.go +++ b/main_test.go @@ -1,8 +1,14 @@ package main import ( + "bytes" + "encoding/json" "github.com/linkpoolio/bridges/bridge" "github.com/stretchr/testify/assert" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" "testing" ) @@ -55,3 +61,94 @@ func TestNewJSONBridges(t *testing.T) { }) } } + +func TestNewJSONBridges_Errors(t *testing.T) { + _, err := NewJSONBridges("") + assert.Equal(t, "Empty bridge URI given", err.Error()) + + _, err = NewJSONBridges("json/invalid.json") + assert.Equal(t, "unexpected end of JSON input", err.Error()) + + _, err = NewJSONBridges("http://invalidqwerty.com") + assert.Contains(t, err.Error(), "no such host") +} + +func TestHandler(t *testing.T) { + p := map[string]interface{}{ + "jobRunId": "1234", + } + pb, err := json.Marshal(p) + assert.Nil(t, err) + + req, err := http.NewRequest(http.MethodPost, "/", bytes.NewReader(pb)) + assert.Nil(t, err) + rr := httptest.NewRecorder() + + err = os.Setenv("BRIDGE", "json/cryptocompare.json") + assert.Nil(t, err) + Handler(rr, req) + assert.Equal(t, http.StatusOK, rr.Code) + err = os.Unsetenv("BRIDGE") + assert.Nil(t, err) + + body, err := ioutil.ReadAll(rr.Body) + assert.Nil(t, err) + json, err := bridge.Parse(body) + assert.Nil(t, err) + + assert.Equal(t, "1234", json.Get("jobRunId").String()) + + data := json.Get("data").Map() + _, ok := data["USD"] + assert.True(t, ok) + _, ok = data["JPY"] + assert.True(t, ok) + _, ok = data["EUR"] + assert.True(t, ok) +} + +func TestHandler_NilBridge(t *testing.T) { + p := map[string]interface{}{ + "jobRunId": "1234", + } + pb, err := json.Marshal(p) + assert.Nil(t, err) + + req, err := http.NewRequest(http.MethodPost, "/", bytes.NewReader(pb)) + assert.Nil(t, err) + rr := httptest.NewRecorder() + + err = os.Setenv("BRIDGE", "") + assert.Nil(t, err) + Handler(rr, req) + assert.Equal(t, http.StatusOK, rr.Code) + err = os.Unsetenv("BRIDGE") + assert.Nil(t, err) + + body, err := ioutil.ReadAll(rr.Body) + assert.Nil(t, err) + assert.Equal(t, "No bridge set", string(body)) +} + +func TestHandler_InvalidBridge(t *testing.T) { + p := map[string]interface{}{ + "jobRunId": "1234", + } + pb, err := json.Marshal(p) + assert.Nil(t, err) + + req, err := http.NewRequest(http.MethodPost, "/", bytes.NewReader(pb)) + assert.Nil(t, err) + rr := httptest.NewRecorder() + + err = os.Setenv("BRIDGE", "json/invalid.json") + assert.Nil(t, err) + Handler(rr, req) + assert.Equal(t, http.StatusOK, rr.Code) + err = os.Unsetenv("BRIDGE") + assert.Nil(t, err) + + body, err := ioutil.ReadAll(rr.Body) + assert.Nil(t, err) + assert.Equal(t, "unexpected end of JSON input", string(body)) +} \ No newline at end of file