Files
fn-serverless/api/server/fn_annotator_test.go
Tom Coupland b1938c1cbf Fns now annotated with invoke urls, as per triggers (#1172)
Clone of the trigger work to inject invoke urls into the annotations
on a fn when it is returned from the server.

Small changes to trigges code following code review of the fn code.
2018-08-16 09:44:48 +01:00

134 lines
2.9 KiB
Go

package server
import (
bytes2 "bytes"
"crypto/tls"
"encoding/json"
"net/http/httptest"
"testing"
"github.com/fnproject/fn/api/models"
"github.com/gin-gonic/gin"
)
func TestAnnotateFnDefaultProvider(t *testing.T) {
app := &models.App{
ID: "app_id",
Name: "myApp",
}
tr := &models.Fn{
ID: "fnID",
Name: "myFn",
AppID: app.ID,
}
// defaults the fn endpoint to the base URL if it's not already set
tep := NewRequestBasedFnAnnotator()
c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request = httptest.NewRequest("GET", "/v2/foo/bar", bytes2.NewBuffer([]byte{}))
c.Request.Host = "my-server.com:8192"
newT, err := tep.AnnotateFn(c, app, tr)
if err != nil {
t.Fatalf("expected no error, got %s", err)
}
bytes, got := newT.Annotations.Get(models.FnInvokeEndpointAnnotation)
if !got {
t.Fatalf("Expecting annotation to be present but got %v", newT.Annotations)
}
var annot string
err = json.Unmarshal(bytes, &annot)
if err != nil {
t.Fatalf("Couldn't get annotation")
}
expected := "http://my-server.com:8192/invoke/fnID"
if annot != expected {
t.Errorf("expected annotation to be %s but was %s", expected, annot)
}
}
func TestHttpsFn(t *testing.T) {
app := &models.App{
ID: "app_id",
Name: "myApp",
}
tr := &models.Fn{
ID: "fnID",
Name: "myFn",
AppID: app.ID,
}
// defaults the Fn endpoint to the base URL if it's not already set
tep := NewRequestBasedFnAnnotator()
c, _ := gin.CreateTestContext(httptest.NewRecorder())
c.Request = httptest.NewRequest("GET", "/v2/foo/bar", bytes2.NewBuffer([]byte{}))
c.Request.Host = "my-server.com:8192"
c.Request.TLS = &tls.ConnectionState{}
newT, err := tep.AnnotateFn(c, app, tr)
if err != nil {
t.Fatalf("expected no error, got %s", err)
}
bytes, got := newT.Annotations.Get(models.FnInvokeEndpointAnnotation)
if !got {
t.Fatalf("Expecting annotation to be present but got %v", newT.Annotations)
}
var annot string
err = json.Unmarshal(bytes, &annot)
if err != nil {
t.Fatalf("Couldn't get annotation")
}
expected := "https://my-server.com:8192/invoke/fnID"
if annot != expected {
t.Errorf("expected annotation to be %s but was %s", expected, annot)
}
}
func TestStaticUrlFnAnnotator(t *testing.T) {
a := NewStaticURLFnAnnotator("http://foo.bar.com/somewhere")
app := &models.App{
ID: "app_id",
Name: "myApp",
}
tr := &models.Fn{
ID: "fnID",
Name: "myFn",
AppID: app.ID,
}
newT, err := a.AnnotateFn(nil, app, tr)
if err != nil {
t.Fatalf("failed when should have succeeded: %s", err)
}
bytes, got := newT.Annotations.Get(models.FnInvokeEndpointAnnotation)
if !got {
t.Fatalf("Expecting annotation to be present but got %v", newT.Annotations)
}
var annot string
err = json.Unmarshal(bytes, &annot)
if err != nil {
t.Fatalf("Couldn't get annotation")
}
expected := "http://foo.bar.com/somewhere/invoke/fnID"
if annot != expected {
t.Errorf("expected annotation to be %s but was %s", expected, annot)
}
}