diff --git a/cmd/root.go b/cmd/root.go index d571e442a50cbd7a00d529d3db70311c00e49889..1257dc3f2cb36a9eccada790d4645c9451a92d17 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -6,8 +6,8 @@ import ( "log/slog" "os" - "gitee.com/openeuler/uos-libvirtd-exporter/collector" "gitee.com/openeuler/uos-libvirtd-exporter/config" + "gitee.com/openeuler/uos-libvirtd-exporter/collector" "gitee.com/openeuler/uos-libvirtd-exporter/server" "gitee.com/openeuler/uos-libvirtd-exporter/signal" "gitee.com/openeuler/uos-libvirtd-exporter/slogx" diff --git a/cmd/root_test.go b/cmd/root_test.go index 3729194e5fe4d8ae1337167f2e3e8dcde9ede6c4..29e53e900b61e862dd91a76904e9af8e9a45178a 100644 --- a/cmd/root_test.go +++ b/cmd/root_test.go @@ -7,6 +7,7 @@ import ( "path/filepath" "testing" + "gitee.com/openeuler/uos-libvirtd-exporter/config" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/stretchr/testify/assert" @@ -154,6 +155,7 @@ func TestEnvironmentVariables(t *testing.T) { os.Setenv("WEB_TELEMETRY_PATH", "/envmetrics") // 重新初始化以确保环境变量被绑定 + viper.Reset() _ = viper.BindEnv("libvirt.uri", "LIBVIRT_URI") _ = viper.BindEnv("web.listen_address", "WEB_LISTEN_ADDRESS") _ = viper.BindEnv("web.telemetry_path", "WEB_TELEMETRY_PATH") @@ -191,22 +193,22 @@ log: err = ioutil.WriteFile(configFile, []byte(configContent), 0644) require.NoError(t, err) - // 保存原始 cfgFile 变量并在测试后恢复 - originalCfgFile := cfgFile - defer func() { - cfgFile = originalCfgFile - }() - - // 设置配置文件路径 - cfgFile = configFile + // 创建一个新的viper实例用于测试 + v := viper.New() - // 调用 loadConfiguration 函数 - cfg, usedFile, err := loadConfiguration() + // 调用 LoadWithViper 函数 + cfg, usedFile, err := config.LoadWithViper(v, configFile) - // loadConfiguration 会失败,因为连接 libvirt 会出错,但配置应该已经加载了 + // 检查结果 + assert.NoError(t, err, "LoadWithViper 应该成功") assert.NotNil(t, cfg, "配置对象不应为 nil") assert.Equal(t, configFile, usedFile, "应返回使用的配置文件路径") - // 错误可能不为空,因为我们没有实际的 libvirt 连接 + assert.Equal(t, "test:///loadconfig", cfg.Libvirt.URI) + assert.Equal(t, ":9180", cfg.Web.ListenAddress) + assert.Equal(t, "/loadmetrics", cfg.Web.TelemetryPath) + assert.True(t, cfg.Web.ExposeRuntimeMetrics) + assert.Equal(t, "warn", cfg.Log.Level) + assert.Equal(t, "json", cfg.Log.Format) } // TestHelperFunctions 测试辅助函数