From 53b5c8e859bb54f688c9489f64f12aaeb1288223 Mon Sep 17 00:00:00 2001 From: Benyamin-Tehrani <149029835+Benyamin-Tehrani@users.noreply.github.com> Date: Mon, 7 Oct 2024 16:20:33 +0800 Subject: [PATCH] chore: return error when override fails --- config/config.go | 2 +- config/override.go | 10 +++++++--- config/override_test.go | 23 +++++++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/config/config.go b/config/config.go index ac4ba4f1..f41e004d 100644 --- a/config/config.go +++ b/config/config.go @@ -593,7 +593,7 @@ func ParseRawConfig(rawCfg *RawConfig) (*Config, error) { // apply overrides err := ApplyOverride(rawCfg, rawCfg.Override) if err != nil { - log.Errorln("Error when applying overrides: %v", err) + return nil, err } general, err := parseGeneral(rawCfg) diff --git a/config/override.go b/config/override.go index 971bf5ac..8fec5947 100644 --- a/config/override.go +++ b/config/override.go @@ -1,6 +1,8 @@ package config import ( + "errors" + "fmt" "github.com/metacubex/mihomo/log" "gopkg.in/yaml.v3" "os" @@ -55,7 +57,7 @@ func ApplyOverride(rawCfg *RawConfig, overrides []RawOverride) error { overrideContent, err := yaml.Marshal(override.Content) if err != nil { log.Errorln("Error when applying override #%v: %v", id, err) - continue + return err } // unmarshal override content into rawConfig, with custom list merge strategy @@ -69,11 +71,13 @@ func ApplyOverride(rawCfg *RawConfig, overrides []RawOverride) error { case Override, Default: err = yaml.Unmarshal(overrideContent, rawCfg) default: - log.Errorln("Bad list strategy in override #%v: %v", id, override.ListStrategy) + err = errors.New(fmt.Sprintf("Bad list strategy in override #%v: %v", id, override.ListStrategy)) + log.Errorln(err.Error()) + return err } if err != nil { log.Errorln("Error when applying override #%v: %v", id, err) - continue + return err } } return nil diff --git a/config/override_test.go b/config/override_test.go index f564ef39..3f7fb0fe 100644 --- a/config/override_test.go +++ b/config/override_test.go @@ -8,6 +8,7 @@ import ( "os" "os/user" "runtime" + "strings" "testing" ) @@ -245,4 +246,26 @@ override: assert.Contains(t, cfg.Providers, "provider3") assert.Equal(t, "https://www.google.com", cfg.Providers["provider3"].HealthCheckURL()) }) + + t.Run("bad_override", func(t *testing.T) { + config_file := ` +mixed-port: 7890 +ipv6: true +log-level: debug +allow-lan: false +unified-delay: false +tcp-concurrent: true +external-controller: 127.0.0.1:9090 +default-nameserver: + - "223.5.5.5" +override: + - list-strategy: 12wlfiu3o + content: + external-controller: 0.0.0.0:9090 + allow-lan: true` + rawCfg, err := UnmarshalRawConfig([]byte(config_file)) + assert.NoError(t, err) + _, err = ParseRawConfig(rawCfg) + assert.True(t, strings.HasPrefix(err.Error(), "Bad list strategy in override #0:")) + }) }