Insist trigger sources are prefixed (#1184)

* Insist trigger sources are prefixed

All trigger sources must have a '/' prefix to be allowed into the datastore.

* Adding condition to novelValue for gen tests

NovelValue was failing to detect same Config values correctly. This
adds a specific check for Config, like the one for Annotation, to
ensure a novel value is indeed generated.
This commit is contained in:
Tom Coupland
2018-08-23 12:24:56 +01:00
committed by GitHub
parent df94333cf4
commit fc3f54d2da
5 changed files with 32 additions and 15 deletions

View File

@@ -20,7 +20,9 @@ func appReflectType() reflect.Type {
}
func configGenerator() gopter.Gen {
return gen.MapOf(gen.AlphaString(), gen.AlphaString())
return gen.MapOf(gen.AlphaString(), gen.AlphaString()).Map(func(m map[string]string) Config {
return Config(m)
})
}
func annotationGenerator() gopter.Gen {
@@ -75,6 +77,10 @@ func novelValue(t *testing.T, originalInstance reflect.Value, fieldName string,
if !newValue.(Annotations).Equals(currentValue.(Annotations)) {
break
}
} else if fieldName == "Config" {
if !newValue.(Config).Equals(currentValue.(Config)) {
break
}
} else {
if newValue != currentValue {
break

View File

@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"net/http"
"strings"
"time"
"unicode"
@@ -119,6 +120,10 @@ var (
ErrTriggerMissingSource = err{
code: http.StatusBadRequest,
error: errors.New("Missing Trigger Source")}
//ErrTriggerMissingSourcePrefix - source does not have a / prefix
ErrTriggerMissingSourcePrefix = err{
code: http.StatusBadRequest,
error: errors.New("Missing Trigger Source Prefix '/'")}
//ErrTriggerNotFound - trigger not found
ErrTriggerNotFound = err{
code: http.StatusNotFound,
@@ -164,6 +169,10 @@ func (t *Trigger) Validate() error {
return ErrTriggerMissingSource
}
if !strings.HasPrefix(t.Source, "/") {
return ErrTriggerMissingSourcePrefix
}
err := t.Annotations.Validate()
if err != nil {
return err

View File

@@ -44,8 +44,8 @@ func TestTriggerListJsonMarshalling(t *testing.T) {
}
}
var httpTrigger = &Trigger{Name: "name", AppID: "foo", FnID: "bar", Type: "http", Source: "baz"}
var invalidTrigger = &Trigger{Name: "name", AppID: "foo", FnID: "bar", Type: "error", Source: "baz"}
var httpTrigger = &Trigger{Name: "name", AppID: "foo", FnID: "bar", Type: "http", Source: "/baz"}
var invalidTrigger = &Trigger{Name: "name", AppID: "foo", FnID: "bar", Type: "error", Source: "/baz"}
var triggerValidateCases = []struct {
val *Trigger