agent: reject config with invalid options

This commit is contained in:
Ryan Uber 2015-01-05 12:30:03 -08:00
parent 92e9e138b9
commit 25fb18b1cf
2 changed files with 19 additions and 2 deletions

View File

@ -335,6 +335,13 @@ type Config struct {
// WatchPlans contains the compiled watches
WatchPlans []*watch.WatchPlan `mapstructure:"-" json:"-"`
// Allow the following fields to be present in configuration files without
// mapstructure erroring on them.
_ interface{} `mapstructure:"services"`
_ interface{} `mapstructure:"checks"`
_ interface{} `mapstructure:"service"`
_ interface{} `mapstructure:"check"`
}
type dirEnts []os.FileInfo
@ -463,8 +470,9 @@ func DecodeConfig(r io.Reader) (*Config, error) {
// Decode
var md mapstructure.Metadata
msdec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
Metadata: &md,
Result: &result,
Metadata: &md,
Result: &result,
ErrorUnused: true,
})
if err != nil {
return nil, err

View File

@ -7,6 +7,7 @@ import (
"os"
"path/filepath"
"reflect"
"strings"
"testing"
"time"
)
@ -591,6 +592,14 @@ func TestDecodeConfig(t *testing.T) {
}
}
func TestDecodeConfig_invalidKeys(t *testing.T) {
input := `{"bad": "no way jose"}`
_, err := DecodeConfig(bytes.NewReader([]byte(input)))
if err == nil || !strings.Contains(err.Error(), "invalid keys") {
t.Fatalf("should have rejected invalid config keys")
}
}
func TestDecodeConfig_Services(t *testing.T) {
input := `{
"services": [