From aeef1f2720f347f0bc50c88f7fc980b4dc5c7321 Mon Sep 17 00:00:00 2001 From: sbruens Date: Wed, 29 Jan 2025 17:34:21 -0500 Subject: [PATCH] More review comments. --- cmd/outline-ss-server/config.go | 10 +++++++--- cmd/outline-ss-server/config_test.go | 21 ++++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/cmd/outline-ss-server/config.go b/cmd/outline-ss-server/config.go index 22c559b5..120046ac 100644 --- a/cmd/outline-ss-server/config.go +++ b/cmd/outline-ss-server/config.go @@ -90,9 +90,13 @@ func (c *ListenerConfig) UnmarshalYAML(value *yaml.Node) error { if !ok { return errors.New("`type` field required") } + lnTypeStr, ok := rawType.(string) + if !ok { + return fmt.Errorf("`type` is not a string, but %T", rawType) + } + lnType := ListenerType(lnTypeStr) delete(raw, "type") - lnType := ListenerType(rawType.(string)) fieldName, ok := listenerTypeMap[lnType] if !ok { return fmt.Errorf("invalid listener type: %v", lnType) @@ -123,8 +127,8 @@ func (c *ListenerConfig) validate() error { if field.Kind() == reflect.Ptr && field.IsNil() { continue } - if field.Type().Implements(reflect.TypeOf((*Validator)(nil)).Elem()) { - if err := field.Interface().(Validator).validate(); err != nil { + if validator, ok := field.Interface().(Validator); ok { + if err := validator.validate(); err != nil { return fmt.Errorf("invalid config: %v", err) } } diff --git a/cmd/outline-ss-server/config_test.go b/cmd/outline-ss-server/config_test.go index 68780feb..d5dec092 100644 --- a/cmd/outline-ss-server/config_test.go +++ b/cmd/outline-ss-server/config_test.go @@ -26,9 +26,24 @@ func TestConfigValidate(t *testing.T) { t.Run("InvalidConfig/InvalidListenerType", func(t *testing.T) { yaml := ` services: - - listeners: - - type: foo - address: "[::]:9000" + - listeners: + - type: + - tcp + - udp + address: "[::]:9000" +` + + _, err := readConfig([]byte(yaml)) + + require.Error(t, err) + }) + + t.Run("InvalidConfig/UnknownListenerType", func(t *testing.T) { + yaml := ` +services: + - listeners: + - type: foo + address: "[::]:9000" ` _, err := readConfig([]byte(yaml))