mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Adding JSON format validation API tests
This commit is contained in:
72
test/fn-api-tests/formats_test.go
Normal file
72
test/fn-api-tests/formats_test.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"net/url"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type JSONResponse struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
func TestFnFormats(t *testing.T) {
|
||||
|
||||
t.Run("test-json-format", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
s := SetupDefaultSuite()
|
||||
|
||||
// TODO(treeder): put image in fnproject @ dockerhub
|
||||
image := "denismakogon/test-hot-json-go:0.0.1"
|
||||
format := "json"
|
||||
route := "/test-hot-json-go"
|
||||
|
||||
CreateApp(t, s.Context, s.Client, s.AppName, map[string]string{})
|
||||
CreateRoute(t, s.Context, s.Client, s.AppName, route, image, "sync",
|
||||
format, s.RouteConfig, s.RouteHeaders)
|
||||
|
||||
u := url.URL{
|
||||
Scheme: "http",
|
||||
Host: Host(),
|
||||
}
|
||||
u.Path = path.Join(u.Path, "r", s.AppName, s.RoutePath)
|
||||
|
||||
b, _ := json.Marshal(&struct {
|
||||
Name string `json:"name"`
|
||||
}{
|
||||
Name: "Jimmy",
|
||||
})
|
||||
content := bytes.NewBuffer(b)
|
||||
output := &bytes.Buffer{}
|
||||
headers, err := CallFN(u.String(), content, output, "POST", []string{})
|
||||
if err != nil {
|
||||
t.Errorf("Got unexpected error: %v", err)
|
||||
}
|
||||
|
||||
msg := &JSONResponse{}
|
||||
json.Unmarshal(output.Bytes(), msg)
|
||||
expectedOutput := "Hello Jimmy"
|
||||
if !strings.Contains(expectedOutput, msg.Message) {
|
||||
t.Errorf("Assertion error.\n\tExpected: %v\n\tActual: %v", expectedOutput, output.String())
|
||||
}
|
||||
|
||||
expectedHeaderNames := []string{"Content-Type", "Content-Length"}
|
||||
expectedHeaderValues := []string{"application/json; charset=utf-8", strconv.Itoa(output.Len())}
|
||||
for i, name := range expectedHeaderNames {
|
||||
actual := headers.Get(name)
|
||||
expected := expectedHeaderValues[i]
|
||||
if !strings.Contains(expected, actual) {
|
||||
t.Errorf("HTTP header assertion error for %v."+
|
||||
"\n\tExpected: %v\n\tActual: %v", name, expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
DeleteApp(t, s.Context, s.Client, s.AppName)
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user