mirror of
https://github.com/openfaas/faas.git
synced 2025-06-10 17:26:47 +00:00
Commit unit tests for content-type order
Signed-off-by: Alex Ellis <alexellis2@gmail.com>
This commit is contained in:
parent
4d4a09fa19
commit
520a6b05a1
@ -168,25 +168,31 @@ func invokeService(w http.ResponseWriter, r *http.Request, metrics metrics.Metri
|
||||
clientHeader := w.Header()
|
||||
copyHeaders(&clientHeader, &response.Header)
|
||||
|
||||
responseHeader := response.Header.Get("Content-Type")
|
||||
requestHeader := r.Header.Get("Content-Type")
|
||||
defaultHeader := "text/plain"
|
||||
contentTypeField := "Content-Type"
|
||||
|
||||
fmt.Printf("Req %s Res %s\n", requestHeader, responseHeader)
|
||||
|
||||
if len(responseHeader) > 0 {
|
||||
w.Header().Set(contentTypeField, responseHeader)
|
||||
} else if len(requestHeader) > 0 {
|
||||
w.Header().Set(contentTypeField, requestHeader)
|
||||
} else {
|
||||
w.Header().Set(contentTypeField, defaultHeader)
|
||||
}
|
||||
w.Header().Set("Content-Type", GetContentType(response.Header, r.Header, defaultHeader))
|
||||
|
||||
writeHead(service, metrics, response.StatusCode, w)
|
||||
w.Write(responseBody)
|
||||
}
|
||||
|
||||
// GetContentType resolves the correct Content-Tyoe for a proxied function
|
||||
func GetContentType(request http.Header, proxyResponse http.Header, defaultValue string) string {
|
||||
responseHeader := proxyResponse.Get("Content-Type")
|
||||
requestHeader := request.Get("Content-Type")
|
||||
|
||||
var headerContentType string
|
||||
if len(responseHeader) > 0 {
|
||||
headerContentType = responseHeader
|
||||
} else if len(requestHeader) > 0 {
|
||||
headerContentType = requestHeader
|
||||
} else {
|
||||
headerContentType = defaultValue
|
||||
}
|
||||
|
||||
return headerContentType
|
||||
}
|
||||
|
||||
func copyHeaders(destination *http.Header, source *http.Header) {
|
||||
for k, vv := range *source {
|
||||
vvClone := make([]string, len(vv))
|
||||
|
46
gateway/tests/proxy_test.go
Normal file
46
gateway/tests/proxy_test.go
Normal file
@ -0,0 +1,46 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/openfaas/faas/gateway/handlers"
|
||||
)
|
||||
|
||||
func Test_GetContentType_UsesResponseValue(t *testing.T) {
|
||||
request := http.Header{}
|
||||
request.Add("Content-Type", "text/plain")
|
||||
response := http.Header{}
|
||||
response.Add("Content-Type", "text/html")
|
||||
|
||||
contentType := handlers.GetContentType(request, response, "default")
|
||||
if contentType != response.Get("Content-Type") {
|
||||
t.Errorf("Got: %s, want: %s", contentType, response.Get("Content-Type"))
|
||||
}
|
||||
}
|
||||
|
||||
func Test_GetContentType_UsesRequest_WhenResponseEmpty(t *testing.T) {
|
||||
request := http.Header{}
|
||||
request.Add("Content-Type", "text/plain")
|
||||
response := http.Header{}
|
||||
response.Add("Content-Type", "")
|
||||
|
||||
contentType := handlers.GetContentType(request, response, "default")
|
||||
if contentType != request.Get("Content-Type") {
|
||||
t.Errorf("Got: %s, want: %s", contentType, request.Get("Content-Type"))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func Test_GetContentType_UsesDefaultWhenRequestResponseEmpty(t *testing.T) {
|
||||
request := http.Header{}
|
||||
request.Add("Content-Type", "")
|
||||
response := http.Header{}
|
||||
response.Add("Content-Type", "")
|
||||
|
||||
contentType := handlers.GetContentType(request, response, "default")
|
||||
if contentType != "default" {
|
||||
t.Errorf("Got: %s, want: %s", contentType, "default")
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user