mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
@@ -49,10 +49,6 @@ var (
|
|||||||
func (r *Route) Validate() error {
|
func (r *Route) Validate() error {
|
||||||
var res []error
|
var res []error
|
||||||
|
|
||||||
if r.Image == "" {
|
|
||||||
res = append(res, ErrRoutesValidationMissingImage)
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.Memory == 0 {
|
if r.Memory == 0 {
|
||||||
r.Memory = 128
|
r.Memory = 128
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ func handleRouteCreate(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if wroute.Route.Image == "" {
|
||||||
|
c.JSON(http.StatusBadRequest, simpleError(models.ErrRoutesValidationMissingImage))
|
||||||
|
return
|
||||||
|
}
|
||||||
err = Api.Runner.EnsureImageExists(ctx, &runner.Config{
|
err = Api.Runner.EnsureImageExists(ctx, &runner.Config{
|
||||||
Image: wroute.Route.Image,
|
Image: wroute.Route.Image,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ func TestRouteCreate(t *testing.T) {
|
|||||||
{&datastore.Mock{}, "/v1/apps/a/routes", ``, http.StatusBadRequest, models.ErrInvalidJSON},
|
{&datastore.Mock{}, "/v1/apps/a/routes", ``, http.StatusBadRequest, models.ErrInvalidJSON},
|
||||||
{&datastore.Mock{}, "/v1/apps/a/routes", `{ }`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ }`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
||||||
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "path": "/myroute" }`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "path": "/myroute" }`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
||||||
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingImage},
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingPath},
|
||||||
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { "path": "/myroute" } }`, http.StatusBadRequest, models.ErrRoutesValidationMissingImage},
|
||||||
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { "image": "iron/hello" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingPath},
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { "image": "iron/hello" } }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingPath},
|
||||||
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { "image": "iron/hello", "path": "myroute" } }`, http.StatusInternalServerError, models.ErrRoutesValidationInvalidPath},
|
{&datastore.Mock{}, "/v1/apps/a/routes", `{ "route": { "image": "iron/hello", "path": "myroute" } }`, http.StatusInternalServerError, models.ErrRoutesValidationInvalidPath},
|
||||||
{&datastore.Mock{}, "/v1/apps/$/routes", `{ "route": { "image": "iron/hello", "path": "/myroute" } }`, http.StatusInternalServerError, models.ErrAppsValidationInvalidName},
|
{&datastore.Mock{}, "/v1/apps/$/routes", `{ "route": { "image": "iron/hello", "path": "/myroute" } }`, http.StatusInternalServerError, models.ErrAppsValidationInvalidName},
|
||||||
@@ -50,8 +51,8 @@ func TestRouteCreate(t *testing.T) {
|
|||||||
|
|
||||||
if !strings.Contains(resp.Error.Message, test.expectedError.Error()) {
|
if !strings.Contains(resp.Error.Message, test.expectedError.Error()) {
|
||||||
t.Log(buf.String())
|
t.Log(buf.String())
|
||||||
t.Errorf("Test %d: Expected error message to have `%s`",
|
t.Errorf("Test %d: Expected error message to have `%s`, but it was `%s`",
|
||||||
i, test.expectedError.Error())
|
i, test.expectedError.Error(), resp.Error.Message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,7 +172,6 @@ func TestRouteUpdate(t *testing.T) {
|
|||||||
// errors
|
// errors
|
||||||
{"/v1/apps/a/routes/myroute/do", ``, http.StatusBadRequest, models.ErrInvalidJSON},
|
{"/v1/apps/a/routes/myroute/do", ``, http.StatusBadRequest, models.ErrInvalidJSON},
|
||||||
{"/v1/apps/a/routes/myroute/do", `{}`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
{"/v1/apps/a/routes/myroute/do", `{}`, http.StatusBadRequest, models.ErrRoutesMissingNew},
|
||||||
{"/v1/apps/a/routes/myroute/do", `{ "route": {} }`, http.StatusInternalServerError, models.ErrRoutesValidationMissingImage},
|
|
||||||
|
|
||||||
// success
|
// success
|
||||||
{"/v1/apps/a/routes/myroute/do", `{ "route": { "image": "iron/hello", "path": "/myroute" } }`, http.StatusOK, nil},
|
{"/v1/apps/a/routes/myroute/do", `{ "route": { "image": "iron/hello", "path": "/myroute" } }`, http.StatusOK, nil},
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/iron-io/functions/api/models"
|
"github.com/iron-io/functions/api/models"
|
||||||
|
"github.com/iron-io/functions/api/runner"
|
||||||
"github.com/iron-io/runner/common"
|
"github.com/iron-io/runner/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -31,11 +32,15 @@ func handleRouteUpdate(c *gin.Context) {
|
|||||||
wroute.Route.AppName = c.Param("app")
|
wroute.Route.AppName = c.Param("app")
|
||||||
wroute.Route.Path = c.Param("route")
|
wroute.Route.Path = c.Param("route")
|
||||||
|
|
||||||
if err := wroute.Validate(); err != nil {
|
if wroute.Route.Image != "" {
|
||||||
log.Error(err)
|
err = Api.Runner.EnsureImageExists(ctx, &runner.Config{
|
||||||
c.JSON(http.StatusInternalServerError, simpleError(err))
|
Image: wroute.Route.Image,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, simpleError(models.ErrUsableImage))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_, err = Api.Datastore.UpdateRoute(wroute.Route)
|
_, err = Api.Datastore.UpdateRoute(wroute.Route)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user