2019-06-03 20:44:43 +03:00
|
|
|
package rpc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"net/http"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/golang/protobuf/proto"
|
2020-08-19 17:47:17 +03:00
|
|
|
go_api "github.com/unistack-org/micro/v3/api/proto"
|
2019-06-03 20:44:43 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestRequestPayloadFromRequest(t *testing.T) {
|
|
|
|
|
|
|
|
// our test event so that we can validate serialising / deserializing of true protos works
|
|
|
|
protoEvent := go_api.Event{
|
|
|
|
Name: "Test",
|
|
|
|
}
|
|
|
|
|
|
|
|
protoBytes, err := proto.Marshal(&protoEvent)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Failed to marshal proto", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
jsonBytes, err := json.Marshal(protoEvent)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("Failed to marshal proto to JSON ", err)
|
|
|
|
}
|
|
|
|
|
2020-03-27 10:59:31 +03:00
|
|
|
jsonUrlBytes := []byte(`{"key1":"val1","key2":"val2","name":"Test"}`)
|
|
|
|
|
|
|
|
t.Run("extracting a json from a POST request with url params", func(t *testing.T) {
|
|
|
|
r, err := http.NewRequest("POST", "http://localhost/my/path?key1=val1&key2=val2", bytes.NewReader(jsonBytes))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to created http.Request: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
extByte, err := requestPayload(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to extract payload from request: %v", err)
|
|
|
|
}
|
|
|
|
if string(extByte) != string(jsonUrlBytes) {
|
|
|
|
t.Fatalf("Expected %v and %v to match", string(extByte), jsonUrlBytes)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2019-06-03 20:44:43 +03:00
|
|
|
t.Run("extracting a proto from a POST request", func(t *testing.T) {
|
|
|
|
r, err := http.NewRequest("POST", "http://localhost/my/path", bytes.NewReader(protoBytes))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to created http.Request: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
extByte, err := requestPayload(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to extract payload from request: %v", err)
|
|
|
|
}
|
|
|
|
if string(extByte) != string(protoBytes) {
|
|
|
|
t.Fatalf("Expected %v and %v to match", string(extByte), string(protoBytes))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("extracting JSON from a POST request", func(t *testing.T) {
|
|
|
|
r, err := http.NewRequest("POST", "http://localhost/my/path", bytes.NewReader(jsonBytes))
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to created http.Request: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
extByte, err := requestPayload(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to extract payload from request: %v", err)
|
|
|
|
}
|
|
|
|
if string(extByte) != string(jsonBytes) {
|
|
|
|
t.Fatalf("Expected %v and %v to match", string(extByte), string(jsonBytes))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("extracting params from a GET request", func(t *testing.T) {
|
|
|
|
|
|
|
|
r, err := http.NewRequest("GET", "http://localhost/my/path", nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to created http.Request: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
q := r.URL.Query()
|
|
|
|
q.Add("name", "Test")
|
|
|
|
r.URL.RawQuery = q.Encode()
|
|
|
|
|
|
|
|
extByte, err := requestPayload(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to extract payload from request: %v", err)
|
|
|
|
}
|
|
|
|
if string(extByte) != string(jsonBytes) {
|
|
|
|
t.Fatalf("Expected %v and %v to match", string(extByte), string(jsonBytes))
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("GET request with no params", func(t *testing.T) {
|
|
|
|
|
|
|
|
r, err := http.NewRequest("GET", "http://localhost/my/path", nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to created http.Request: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
extByte, err := requestPayload(r)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failed to extract payload from request: %v", err)
|
|
|
|
}
|
|
|
|
if string(extByte) != "" {
|
|
|
|
t.Fatalf("Expected %v and %v to match", string(extByte), "")
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|