From 1cdbd7e6adfd4de76ed67b679cfb01a2218181eb Mon Sep 17 00:00:00 2001 From: Ali Tlekbai Date: Mon, 3 Oct 2022 17:20:05 +0600 Subject: [PATCH 1/2] add: tests for internal/hooks/requests.go --- internal/hook/request_test.go | 163 ++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 internal/hook/request_test.go diff --git a/internal/hook/request_test.go b/internal/hook/request_test.go new file mode 100644 index 00000000..67ba18b7 --- /dev/null +++ b/internal/hook/request_test.go @@ -0,0 +1,163 @@ +package hook + +import ( + "encoding/json" + "reflect" + "testing" +) + +var parseJSONPayloadTests = []struct { + body []byte + payload map[string]interface{} + ok bool +}{ + {[]byte(`[1,2,3]`), map[string]interface{}{"root": []interface{}{json.Number("1"), json.Number("2"), json.Number("3")}}, true}, + {[]byte(` [1,2,3]`), map[string]interface{}{"root": []interface{}{json.Number("1"), json.Number("2"), json.Number("3")}}, true}, + {[]byte(`{"key": "value"}`), map[string]interface{}{"key": "value"}, true}, + {[]byte(`[1, {"]`), map[string]interface{}(nil), false}, +} + +func TestParseJSONPayload(t *testing.T) { + for _, tt := range parseJSONPayloadTests { + r := Request{ + Body: tt.body, + } + err := r.ParseJSONPayload() + if (err == nil) != tt.ok { + t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) + } + + if !reflect.DeepEqual(tt.payload, r.Payload) { + t.Errorf("failed to parse json %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.payload, r.Payload) + } + } +} + +var parseHeadersTests = []struct { + headers map[string][]string + expectedHeaders map[string]interface{} +}{ + { + map[string][]string{"header1": {"12"}}, + map[string]interface{}{"header1": "12"}, + }, + { + map[string][]string{"header1": {"12", "34"}}, + map[string]interface{}{"header1": "12"}, + }, + { + map[string][]string{"header1": {}}, + map[string]interface{}{}, + }, +} + +func TestParseHeaders(t *testing.T) { + for _, tt := range parseHeadersTests { + r := Request{} + r.ParseHeaders(tt.headers) + + if !reflect.DeepEqual(tt.expectedHeaders, r.Headers) { + t.Errorf("failed to parse headers %#v:\nexpected %#v,\ngot %#v", tt.headers, tt.expectedHeaders, r.Headers) + } + } +} + +var parseQueryTests = []struct { + query map[string][]string + expectedQuery map[string]interface{} +}{ + { + map[string][]string{"query1": {"12"}}, + map[string]interface{}{"query1": "12"}, + }, + { + map[string][]string{"query1": {"12", "34"}}, + map[string]interface{}{"query1": "12"}, + }, + { + map[string][]string{"query1": {}}, + map[string]interface{}{}, + }, +} + +func TestParseQuery(t *testing.T) { + for _, tt := range parseQueryTests { + r := Request{} + r.ParseQuery(tt.query) + + if !reflect.DeepEqual(tt.expectedQuery, r.Query) { + t.Errorf("failed to parse query %#v:\nexpected %#v,\ngot %#v", tt.query, tt.expectedQuery, r.Query) + } + } +} + +var parseFormPayloadTests = []struct { + body []byte + expectedPayload map[string]interface{} + ok bool +}{ + { + []byte("x=1&y=2"), + map[string]interface{}{"x": "1", "y": "2"}, + true, + }, + { + []byte("x=1&y=2&y=3"), + map[string]interface{}{"x": "1", "y": "2"}, + true, + }, + { + []byte(";"), + map[string]interface{}(nil), + false, + }, +} + +func TestParseFormPayload(t *testing.T) { + for _, tt := range parseFormPayloadTests { + r := Request{ + Body: tt.body, + } + err := r.ParseFormPayload() + if (err == nil) != tt.ok { + t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) + } + + if !reflect.DeepEqual(tt.expectedPayload, r.Payload) { + t.Errorf("failed to parse form payload %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.expectedPayload, r.Payload) + } + } +} + +var parseXMLPayloadTests = []struct { + body []byte + expectedPayload map[string]interface{} + ok bool +}{ + { + []byte("1"), + map[string]interface{}{"x": "1"}, + true, + }, + { + []byte("1"), + map[string]interface{}(nil), + false, + }, +} + +func TestParseXMLPayload(t *testing.T) { + for _, tt := range parseXMLPayloadTests { + r := Request{ + Body: tt.body, + } + err := r.ParseXMLPayload() + if (err == nil) != tt.ok { + t.Errorf("unexpected result given %q: %s\n", string(tt.body), err) + } + + if !reflect.DeepEqual(tt.expectedPayload, r.Payload) { + t.Errorf("failed to parse xml %q:\nexpected %#v,\ngot %#v", string(tt.body), tt.expectedPayload, r.Payload) + } + } +} From 14ec47b214438cc83d31451f256f99d8f6937620 Mon Sep 17 00:00:00 2001 From: Ali Tlekbai Date: Mon, 3 Oct 2022 17:25:37 +0600 Subject: [PATCH 2/2] add: additional test for invalid json payload --- internal/hook/request_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/hook/request_test.go b/internal/hook/request_test.go index 67ba18b7..ce74e4a1 100644 --- a/internal/hook/request_test.go +++ b/internal/hook/request_test.go @@ -15,6 +15,7 @@ var parseJSONPayloadTests = []struct { {[]byte(` [1,2,3]`), map[string]interface{}{"root": []interface{}{json.Number("1"), json.Number("2"), json.Number("3")}}, true}, {[]byte(`{"key": "value"}`), map[string]interface{}{"key": "value"}, true}, {[]byte(`[1, {"]`), map[string]interface{}(nil), false}, + {[]byte(`{"key": "value}`), map[string]interface{}(nil), false}, } func TestParseJSONPayload(t *testing.T) {