mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Hot protocols improvements (for 662) (#724)
* Improve deadline handling in streaming protocols * Move special headers handling down to the protocols * Adding function format documentation for JSON changes * Add tests for request url and method in JSON protocol * Fix protocol missing fn-specific info * Fix import * Add panic for something that should never happen
This commit is contained in:
@@ -41,7 +41,7 @@ func setupRequest(data interface{}) *callInfoImpl {
|
||||
}
|
||||
req.Body = ioutil.NopCloser(&buf)
|
||||
|
||||
call := &models.Call{Type: "json"}
|
||||
call := &models.Call{Type: "sync"}
|
||||
|
||||
// fixup URL in models.Call
|
||||
call.URL = req.URL.String()
|
||||
@@ -50,6 +50,46 @@ func setupRequest(data interface{}) *callInfoImpl {
|
||||
return ci
|
||||
}
|
||||
|
||||
func TestJSONProtocolwriteJSONInputRequestBasicFields(t *testing.T) {
|
||||
ci := setupRequest(nil)
|
||||
r, w := io.Pipe()
|
||||
proto := JSONProtocol{w, r}
|
||||
go func() {
|
||||
err := proto.writeJSONToContainer(ci)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
w.Close()
|
||||
}()
|
||||
incomingReq := &jsonIn{}
|
||||
bb := new(bytes.Buffer)
|
||||
|
||||
_, err := bb.ReadFrom(r)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
err = json.Unmarshal(bb.Bytes(), incomingReq)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
}
|
||||
if incomingReq.CallID != ci.CallID() {
|
||||
t.Errorf("Request CallID assertion mismatch: expected: %s, got %s",
|
||||
ci.CallID(), incomingReq.CallID)
|
||||
}
|
||||
if incomingReq.ContentType != ci.ContentType() {
|
||||
t.Errorf("Request ContentType assertion mismatch: expected: %s, got %s",
|
||||
ci.ContentType(), incomingReq.ContentType)
|
||||
}
|
||||
if incomingReq.Type != ci.CallType() {
|
||||
t.Errorf("Request CallType assertion mismatch: expected: %s, got %s",
|
||||
ci.CallType(), incomingReq.Type)
|
||||
}
|
||||
if incomingReq.Deadline != ci.Deadline().String() {
|
||||
t.Errorf("Request Deadline assertion mismatch: expected: %s, got %s",
|
||||
ci.Deadline(), incomingReq.Deadline)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJSONProtocolwriteJSONInputRequestWithData(t *testing.T) {
|
||||
rDataBefore := RequestData{A: "a"}
|
||||
ci := setupRequest(rDataBefore)
|
||||
@@ -82,9 +122,17 @@ func TestJSONProtocolwriteJSONInputRequestWithData(t *testing.T) {
|
||||
t.Errorf("Request data assertion mismatch: expected: %s, got %s",
|
||||
rDataBefore.A, rDataAfter.A)
|
||||
}
|
||||
if incomingReq.Protocol.Type != ci.call.Type {
|
||||
if incomingReq.Protocol.Type != ci.ProtocolType() {
|
||||
t.Errorf("Call protocol type assertion mismatch: expected: %s, got %s",
|
||||
ci.call.Type, incomingReq.Protocol.Type)
|
||||
ci.ProtocolType(), incomingReq.Protocol.Type)
|
||||
}
|
||||
if incomingReq.Protocol.Method != ci.Method() {
|
||||
t.Errorf("Call protocol method assertion mismatch: expected: %s, got %s",
|
||||
ci.Method(), incomingReq.Protocol.Method)
|
||||
}
|
||||
if incomingReq.Protocol.RequestURL != ci.RequestURL() {
|
||||
t.Errorf("Call protocol request URL assertion mismatch: expected: %s, got %s",
|
||||
ci.RequestURL(), incomingReq.Protocol.RequestURL)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,6 +166,18 @@ func TestJSONProtocolwriteJSONInputRequestWithoutData(t *testing.T) {
|
||||
t.Errorf("Request headers assertion mismatch: expected: %s, got %s",
|
||||
ci.req.Header, incomingReq.Protocol.Headers)
|
||||
}
|
||||
if incomingReq.Protocol.Type != ci.ProtocolType() {
|
||||
t.Errorf("Call protocol type assertion mismatch: expected: %s, got %s",
|
||||
ci.ProtocolType(), incomingReq.Protocol.Type)
|
||||
}
|
||||
if incomingReq.Protocol.Method != ci.Method() {
|
||||
t.Errorf("Call protocol method assertion mismatch: expected: %s, got %s",
|
||||
ci.Method(), incomingReq.Protocol.Method)
|
||||
}
|
||||
if incomingReq.Protocol.RequestURL != ci.RequestURL() {
|
||||
t.Errorf("Call protocol request URL assertion mismatch: expected: %s, got %s",
|
||||
ci.RequestURL(), incomingReq.Protocol.RequestURL)
|
||||
}
|
||||
}
|
||||
|
||||
func TestJSONProtocolwriteJSONInputRequestWithQuery(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user