lolly/internal/version/version_test.go
xfy 31b3d4d0a3 test(sslutil,utils,version): 添加工具模块测试
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 08:12:34 +08:00

302 lines
7.6 KiB
Go

// Package version 提供版本信息的测试。
package version
import (
"strings"
"testing"
)
// TestDefaultValues 测试默认值。
func TestDefaultValues(t *testing.T) {
// 注意:由于版本变量是包级别的变量,
// 这个测试验证的是编译时的默认值。
// 在实际构建中,这些值会通过 -ldflags 注入。
t.Run("Version默认值", func(t *testing.T) {
// 默认值应该是 "dev"
if Version != "dev" {
t.Errorf("Version = %q, want %q", Version, "dev")
}
})
t.Run("GitCommit默认值", func(t *testing.T) {
if GitCommit != "unknown" {
t.Errorf("GitCommit = %q, want %q", GitCommit, "unknown")
}
})
t.Run("GitBranch默认值", func(t *testing.T) {
if GitBranch != "unknown" {
t.Errorf("GitBranch = %q, want %q", GitBranch, "unknown")
}
})
t.Run("BuildTime默认值", func(t *testing.T) {
if BuildTime != "unknown" {
t.Errorf("BuildTime = %q, want %q", BuildTime, "unknown")
}
})
t.Run("GoVersion默认值", func(t *testing.T) {
if GoVersion != "unknown" {
t.Errorf("GoVersion = %q, want %q", GoVersion, "unknown")
}
})
t.Run("BuildPlatform默认值", func(t *testing.T) {
if BuildPlatform != "unknown" {
t.Errorf("BuildPlatform = %q, want %q", BuildPlatform, "unknown")
}
})
}
// TestVersionVariableMutation 测试版本变量可以被修改。
// 这模拟了 -ldflags 注入的效果。
func TestVersionVariableMutation(t *testing.T) {
// 保存原始值
originalVersion := Version
originalGitCommit := GitCommit
originalGitBranch := GitBranch
originalBuildTime := BuildTime
originalGoVersion := GoVersion
originalBuildPlatform := BuildPlatform
// 在测试结束时恢复原始值
t.Cleanup(func() {
Version = originalVersion
GitCommit = originalGitCommit
GitBranch = originalGitBranch
BuildTime = originalBuildTime
GoVersion = originalGoVersion
BuildPlatform = originalBuildPlatform
})
t.Run("设置Version", func(t *testing.T) {
testVersion := "v1.2.3"
Version = testVersion
if Version != testVersion {
t.Errorf("Version = %q, want %q", Version, testVersion)
}
})
t.Run("设置GitCommit", func(t *testing.T) {
testCommit := "abc123def456"
GitCommit = testCommit
if GitCommit != testCommit {
t.Errorf("GitCommit = %q, want %q", GitCommit, testCommit)
}
})
t.Run("设置GitBranch", func(t *testing.T) {
testBranch := "feature/test"
GitBranch = testBranch
if GitBranch != testBranch {
t.Errorf("GitBranch = %q, want %q", GitBranch, testBranch)
}
})
t.Run("设置BuildTime", func(t *testing.T) {
testBuildTime := "2024-01-15T10:30:00Z"
BuildTime = testBuildTime
if BuildTime != testBuildTime {
t.Errorf("BuildTime = %q, want %q", BuildTime, testBuildTime)
}
})
t.Run("设置GoVersion", func(t *testing.T) {
testGoVersion := "go1.21.5"
GoVersion = testGoVersion
if GoVersion != testGoVersion {
t.Errorf("GoVersion = %q, want %q", GoVersion, testGoVersion)
}
})
t.Run("设置BuildPlatform", func(t *testing.T) {
testPlatform := "linux/amd64"
BuildPlatform = testPlatform
if BuildPlatform != testPlatform {
t.Errorf("BuildPlatform = %q, want %q", BuildPlatform, testPlatform)
}
})
}
// TestVersionInformationFormat 测试版本信息的格式化。
func TestVersionInformationFormat(t *testing.T) {
// 保存原始值
originalVersion := Version
originalGitCommit := GitCommit
originalGitBranch := GitBranch
originalBuildTime := BuildTime
originalGoVersion := GoVersion
originalBuildPlatform := BuildPlatform
t.Cleanup(func() {
Version = originalVersion
GitCommit = originalGitCommit
GitBranch = originalGitBranch
BuildTime = originalBuildTime
GoVersion = originalGoVersion
BuildPlatform = originalBuildPlatform
})
// 设置测试值
Version = "v2.0.0"
GitCommit = "a1b2c3d4e5f6"
GitBranch = "main"
BuildTime = "2024-06-01T12:00:00Z"
GoVersion = "go1.22.0"
BuildPlatform = "darwin/arm64"
t.Run("版本号格式", func(t *testing.T) {
// 版本号应该以 'v' 开头(语义化版本规范)
if !strings.HasPrefix(Version, "v") {
t.Errorf("Version = %q, should start with 'v'", Version)
}
})
t.Run("Git提交哈希格式", func(t *testing.T) {
// Git 提交哈希应该是十六进制字符串
for _, c := range GitCommit {
if !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f')) {
t.Errorf("GitCommit = %q, contains invalid character %q", GitCommit, c)
break
}
}
})
t.Run("构建平台格式", func(t *testing.T) {
// 构建平台应该是 OS/Arch 格式
if !strings.Contains(BuildPlatform, "/") {
t.Errorf("BuildPlatform = %q, should be in OS/Arch format", BuildPlatform)
}
})
t.Run("Go版本格式", func(t *testing.T) {
// Go 版本应该以 'go' 开头
if !strings.HasPrefix(GoVersion, "go") {
t.Errorf("GoVersion = %q, should start with 'go'", GoVersion)
}
})
}
// TestAllVariablesNonEmpty 测试所有变量设置后非空。
func TestAllVariablesNonEmpty(t *testing.T) {
// 保存原始值
originalVersion := Version
originalGitCommit := GitCommit
originalGitBranch := GitBranch
originalBuildTime := BuildTime
originalGoVersion := GoVersion
originalBuildPlatform := BuildPlatform
t.Cleanup(func() {
Version = originalVersion
GitCommit = originalGitCommit
GitBranch = originalGitBranch
BuildTime = originalBuildTime
GoVersion = originalGoVersion
BuildPlatform = originalBuildPlatform
})
// 设置非空值
Version = "v1.0.0"
GitCommit = "1234567890abcdef"
GitBranch = "master"
BuildTime = "2024-01-01"
GoVersion = "go1.21"
BuildPlatform = "linux/amd64"
vars := map[string]string{
"Version": Version,
"GitCommit": GitCommit,
"GitBranch": GitBranch,
"BuildTime": BuildTime,
"GoVersion": GoVersion,
"BuildPlatform": BuildPlatform,
}
for name, value := range vars {
if value == "" {
t.Errorf("%s is empty, expected non-empty value", name)
}
if value == "unknown" {
t.Errorf("%s = %q, expected set value", name, value)
}
}
}
// TestVersionConsistency 测试版本信息的一致性。
func TestVersionConsistency(t *testing.T) {
// 保存原始值
originalVersion := Version
originalGitCommit := GitCommit
originalGitBranch := GitBranch
originalBuildTime := BuildTime
originalGoVersion := GoVersion
originalBuildPlatform := BuildPlatform
t.Cleanup(func() {
Version = originalVersion
GitCommit = originalGitCommit
GitBranch = originalGitBranch
BuildTime = originalBuildTime
GoVersion = originalGoVersion
BuildPlatform = originalBuildPlatform
})
t.Run("语义化版本格式", func(t *testing.T) {
testVersions := []string{
"v1.0.0",
"v2.1.3",
"v0.0.1",
"v10.20.30",
}
for _, v := range testVersions {
Version = v
// 验证版本号格式
if !strings.HasPrefix(Version, "v") {
t.Errorf("Version = %q, should start with 'v'", Version)
}
// 验证版本号包含点号
if !strings.Contains(Version[1:], ".") {
t.Errorf("Version = %q, should contain '.' after 'v'", Version)
}
}
})
t.Run("开发版本标识", func(t *testing.T) {
Version = "dev"
if Version != "dev" {
t.Errorf("Version = %q, want %q", Version, "dev")
}
})
}
// TestBuildPlatformVariants 测试不同构建平台格式。
func TestBuildPlatformVariants(t *testing.T) {
// 保存原始值
originalBuildPlatform := BuildPlatform
t.Cleanup(func() {
BuildPlatform = originalBuildPlatform
})
platforms := []string{
"linux/amd64",
"linux/arm64",
"darwin/amd64",
"darwin/arm64",
"windows/amd64",
"freebsd/amd64",
}
for _, platform := range platforms {
t.Run(platform, func(t *testing.T) {
BuildPlatform = platform
if BuildPlatform != platform {
t.Errorf("BuildPlatform = %q, want %q", BuildPlatform, platform)
}
})
}
}