|
|
@@ -7,26 +7,26 @@ import (
|
|
|
|
|
|
func TestVersionsCheckEnvVersionAndDefault(t *testing.T) {
|
|
|
versions := VersionInit()
|
|
|
- channel := new(ChannelVersions)
|
|
|
+ platform := new(PlatformVersions)
|
|
|
|
|
|
- releaseDefault := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
- releaseExact := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
- trialDefault := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "1.0.0", Url: "体验服默认地址", Default: true}
|
|
|
- trialExact := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验服版本地址"}
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
+ releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
+ trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.0", Url: "体验服默认地址", Default: true}
|
|
|
+ trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验服版本地址"}
|
|
|
|
|
|
for _, v := range []*version.Version{releaseDefault, releaseExact, trialDefault, trialExact} {
|
|
|
- channel.VList.Push(v)
|
|
|
- channel.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
+ platform.VList.Push(v)
|
|
|
+ platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
}
|
|
|
|
|
|
- versions.VChannels.Set("wx", channel)
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
|
|
|
- if got := versions.Check("1.0.1", "wx", "trial"); got != trialDefault {
|
|
|
- t.Fatalf("传入体验版环境版本时应优先返回体验版默认地址,实际返回 %#v", got)
|
|
|
+ if got := versions.Check("1.0.1", "wx", "trial"); got != trialExact {
|
|
|
+ t.Fatalf("传入版本号和体验版环境时应精确匹配体验版版本,实际返回 %#v", got)
|
|
|
}
|
|
|
|
|
|
- if got := versions.Check("1.0.1", "wx", "release"); got != releaseDefault {
|
|
|
- t.Fatalf("传入正式服环境版本时应优先返回正式服默认地址,实际返回 %#v", got)
|
|
|
+ if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
|
|
|
+ t.Fatalf("传入版本号和正式服环境时应精确匹配正式服版本,实际返回 %#v", got)
|
|
|
}
|
|
|
|
|
|
if got := versions.Check("1.0.1", "wx", ""); got != releaseExact {
|
|
|
@@ -38,72 +38,78 @@ func TestVersionsCheckEnvVersionAndDefault(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
if got := versions.Check("9.9.9", "wx", "trial"); got != trialDefault {
|
|
|
- t.Fatalf("体验版未知版本应返回体验版默认地址,实际返回 %#v", got)
|
|
|
+ t.Fatalf("体验版版本号未命中应返回体验版默认版本,实际返回 %#v", got)
|
|
|
}
|
|
|
|
|
|
- if got := versions.Check("9.9.9", "wx", "develop"); got != releaseDefault {
|
|
|
- t.Fatalf("开发版未知版本应返回正式服默认地址,实际返回 %#v", got)
|
|
|
+ if got := versions.Check("9.9.9", "wx", "develop"); got != trialDefault {
|
|
|
+ t.Fatalf("develop 版本号未命中应返回体验版默认版本,实际返回 %#v", got)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func TestVersionsCheckWithoutEnvVersionUsesVersionFirst(t *testing.T) {
|
|
|
versions := VersionInit()
|
|
|
- channel := new(ChannelVersions)
|
|
|
+ platform := new(PlatformVersions)
|
|
|
|
|
|
- releaseDefault := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
- trialExact := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "0.2.0", Url: "体验版版本地址"}
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
+ trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "0.2.0", Url: "体验版版本地址"}
|
|
|
|
|
|
for _, v := range []*version.Version{releaseDefault, trialExact} {
|
|
|
- channel.VList.Push(v)
|
|
|
- channel.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
+ platform.VList.Push(v)
|
|
|
+ platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
}
|
|
|
- versions.VChannels.Set("wx", channel)
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
|
|
|
if got := versions.Check("0.2.0", "wx", ""); got != trialExact {
|
|
|
t.Fatalf("未传环境版本时应按版本号命中体验版版本,实际返回 %#v", got)
|
|
|
}
|
|
|
|
|
|
if got := versions.Check("9.9.9", "wx", ""); got != releaseDefault {
|
|
|
- t.Fatalf("未传环境版本且版本号不存在时应返回正式服默认地址,实际返回 %#v", got)
|
|
|
+ t.Fatalf("传入不存在的版本号应回退到正式服默认地址,实际返回 %#v", got)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func TestVersionsCheckEnvVersionPriority(t *testing.T) {
|
|
|
+func TestVersionsCheckVersionConditionOverridesDefault(t *testing.T) {
|
|
|
versions := VersionInit()
|
|
|
- channel := new(ChannelVersions)
|
|
|
+ platform := new(PlatformVersions)
|
|
|
|
|
|
- releaseDefault := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
- releaseExact := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
- trialDefault := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "2.0.0", Url: "体验版默认地址", Default: true}
|
|
|
- trialExact := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
|
|
|
+ releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
+ trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "2.0.0", Url: "体验版默认地址", Default: true}
|
|
|
+ trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
|
|
|
|
|
|
for _, v := range []*version.Version{releaseDefault, releaseExact, trialDefault, trialExact} {
|
|
|
- channel.VList.Push(v)
|
|
|
- channel.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
+ platform.VList.Push(v)
|
|
|
+ platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
}
|
|
|
- versions.VChannels.Set("wx", channel)
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
|
|
|
- if got := versions.Check("1.0.1", "wx", "release"); got != releaseDefault {
|
|
|
- t.Fatalf("传入正式服环境版本时应优先返回正式服默认地址,实际返回 %#v", got)
|
|
|
+ if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
|
|
|
+ t.Fatalf("传入正式服版本号时应匹配指定版本,实际返回 %#v", got)
|
|
|
}
|
|
|
|
|
|
- if got := versions.Check("1.0.1", "wx", "trial"); got != trialDefault {
|
|
|
- t.Fatalf("传入体验版环境版本时应优先返回体验版默认地址,实际返回 %#v", got)
|
|
|
+ if got := versions.Check("1.0.1", "wx", "trial"); got != trialExact {
|
|
|
+ t.Fatalf("传入体验版版本号时应匹配指定版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "wx", "release"); got != releaseDefault {
|
|
|
+ t.Fatalf("不传版本号时应返回正式服默认版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "wx", "trial"); got != trialDefault {
|
|
|
+ t.Fatalf("不传版本号时应返回体验版默认版本,实际返回 %#v", got)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func TestVersionsCheckEnvVersionWithoutDefault(t *testing.T) {
|
|
|
versions := VersionInit()
|
|
|
- channel := new(ChannelVersions)
|
|
|
+ platform := new(PlatformVersions)
|
|
|
|
|
|
- releaseExact := &version.Version{Channel: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
- trialExact := &version.Version{Channel: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
|
|
|
+ releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
|
|
|
+ trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
|
|
|
|
|
|
for _, v := range []*version.Version{releaseExact, trialExact} {
|
|
|
- channel.VList.Push(v)
|
|
|
- channel.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
+ platform.VList.Push(v)
|
|
|
+ platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
|
|
|
}
|
|
|
- versions.VChannels.Set("wx", channel)
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
|
|
|
if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
|
|
|
t.Fatalf("正式服没有默认地址时应返回正式服版本地址,实际返回 %#v", got)
|
|
|
@@ -113,3 +119,145 @@ func TestVersionsCheckEnvVersionWithoutDefault(t *testing.T) {
|
|
|
t.Fatalf("体验版没有默认地址时应返回体验版版本地址,实际返回 %#v", got)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestVersionsCheckFallsBackToLegacyRecords(t *testing.T) {
|
|
|
+ versions := VersionInit()
|
|
|
+ legacy := new(PlatformVersions)
|
|
|
+ record := &version.Version{Channel: "bb", Version: "1.0.0", EnvVersion: "release", Url: "历史地址"}
|
|
|
+ legacy.VList.Push(record)
|
|
|
+ legacy.VMap.Set(versionMapKey(record.Version, NormalizeEnvVersion(record.EnvVersion)), record)
|
|
|
+ versions.VPlatforms.Set("", legacy)
|
|
|
+
|
|
|
+ if got := versions.Check("1.0.0", "wx", ""); got != record {
|
|
|
+ t.Fatalf("平台记录不存在时应兼容读取历史空平台记录,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestVersionsCheckWithoutVersionUsesEnvironmentDefault(t *testing.T) {
|
|
|
+ versions := VersionInit()
|
|
|
+ platform := new(PlatformVersions)
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Default: true}
|
|
|
+ trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Default: true}
|
|
|
+ otherPlatformDefault := &version.Version{Platform: "dy", EnvVersion: "trial", Version: "9.9.9", Default: true}
|
|
|
+ platform.VList.Push(releaseDefault)
|
|
|
+ platform.VList.Push(trialDefault)
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
+ other := new(PlatformVersions)
|
|
|
+ other.VList.Push(otherPlatformDefault)
|
|
|
+ versions.VPlatforms.Set("dy", other)
|
|
|
+
|
|
|
+ if got := versions.Check("", "wx", "trial"); got != trialDefault {
|
|
|
+ t.Fatalf("empty version should use the trial default for the requested platform: %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "wx", "release"); got != releaseDefault {
|
|
|
+ t.Fatalf("empty version should use the release default for the requested platform: %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "wx", ""); got != releaseDefault {
|
|
|
+ t.Fatalf("empty version and environment should use the release default: %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "dy", "trial"); got != otherPlatformDefault {
|
|
|
+ t.Fatalf("empty version should not cross platform boundaries: %#v", got)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestVersionsCheckWithoutVersionFallsBackToLatestEnvironmentVersion(t *testing.T) {
|
|
|
+ versions := VersionInit()
|
|
|
+ platform := new(PlatformVersions)
|
|
|
+ releaseOld := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.2"}
|
|
|
+ releaseLatest := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.10"}
|
|
|
+ trial := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "2.0.0"}
|
|
|
+ for _, item := range []*version.Version{releaseOld, trial, releaseLatest} {
|
|
|
+ platform.VList.Push(item)
|
|
|
+ }
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
+
|
|
|
+ if got := versions.Check("", "wx", ""); got != releaseLatest {
|
|
|
+ t.Fatalf("空版本号和环境应返回最新正式服版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "wx", "trial"); got != trial {
|
|
|
+ t.Fatalf("空版本号应只在指定环境内选择,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("9.9.9", "wx", "trial"); got != trial {
|
|
|
+ t.Fatalf("指定版本未命中应返回体验版最新版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("", "dy", ""); got != nil {
|
|
|
+ t.Fatalf("不应跨平台返回版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+
|
|
|
+ releaseOld.Default = true
|
|
|
+ if got := versions.Check("", "wx", ""); got != releaseOld {
|
|
|
+ t.Fatalf("正式服默认标记应优先于最新版本,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestVersionsCheckTrialMissFallsBackToMatchingReleaseVersion(t *testing.T) {
|
|
|
+ versions := VersionInit()
|
|
|
+ platform := new(PlatformVersions)
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Default: true}
|
|
|
+ releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1"}
|
|
|
+ for _, item := range []*version.Version{releaseDefault, releaseExact} {
|
|
|
+ platform.VList.Push(item)
|
|
|
+ platform.VMap.Set(versionMapKey(item.Version, releaseEnvVersion), item)
|
|
|
+ }
|
|
|
+ versions.VPlatforms.Set("wx", platform)
|
|
|
+
|
|
|
+ if got := versions.Check("1.0.1", "wx", "trial"); got != releaseExact {
|
|
|
+ t.Fatalf("体验服环境未命中时应优先返回同版本正式服配置,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+ if got := versions.Check("9.9.9", "wx", "trial"); got != releaseDefault {
|
|
|
+ t.Fatalf("版本号未命中时应返回正式服默认配置,实际返回 %#v", got)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestVersionsCheckDevelopAndEnvironmentFallback(t *testing.T) {
|
|
|
+ releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Default: true}
|
|
|
+ releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.3"}
|
|
|
+ trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Default: true}
|
|
|
+ trialLatest := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.2"}
|
|
|
+ legacyTrial := &version.Version{EnvVersion: "trial", Version: "1.0.3"}
|
|
|
+ otherTrial := &version.Version{Platform: "dy", EnvVersion: "trial", Version: "1.0.3"}
|
|
|
+ cases := []struct {
|
|
|
+ name string
|
|
|
+ records []*version.Version
|
|
|
+ number string
|
|
|
+ env string
|
|
|
+ want *version.Version
|
|
|
+ }{
|
|
|
+ {"develop exact", []*version.Version{releaseExact, trialLatest}, "1.0.2", "develop", trialLatest},
|
|
|
+ {"develop normalized", []*version.Version{releaseExact, trialLatest}, "1.0.2", " DeVeLoP ", trialLatest},
|
|
|
+ {"develop default before matching release", []*version.Version{releaseExact, trialDefault, trialLatest}, "1.0.3", "develop", trialDefault},
|
|
|
+ {"trial default before matching release", []*version.Version{releaseExact, trialDefault, trialLatest}, "1.0.3", "trial", trialDefault},
|
|
|
+ {"trial latest before matching release", []*version.Version{releaseExact, trialLatest}, "1.0.3", "trial", trialLatest},
|
|
|
+ {"develop latest before matching release", []*version.Version{releaseExact, trialLatest}, "1.0.3", "develop", trialLatest},
|
|
|
+ {"develop empty version", []*version.Version{releaseDefault, trialDefault, trialLatest}, "", "develop", trialDefault},
|
|
|
+ {"develop missing trial", []*version.Version{releaseDefault, releaseExact}, "1.0.3", "develop", releaseExact},
|
|
|
+ {"develop missing version and trial", []*version.Version{releaseDefault, releaseExact}, "9.9.9", "develop", releaseDefault},
|
|
|
+ {"develop release latest", []*version.Version{releaseExact}, "9.9.9", "develop", releaseExact},
|
|
|
+ {"develop empty version without trial", []*version.Version{releaseDefault}, "", "develop", releaseDefault},
|
|
|
+ {"platform isolation", []*version.Version{releaseExact, otherTrial}, "1.0.3", "develop", releaseExact},
|
|
|
+ {"legacy trial before release", []*version.Version{releaseExact, legacyTrial}, "1.0.3", "develop", legacyTrial},
|
|
|
+ {"platform default before legacy exact", []*version.Version{trialDefault, legacyTrial}, "1.0.3", "develop", trialDefault},
|
|
|
+ {"release miss stays release", []*version.Version{releaseDefault, trialLatest}, "1.0.2", "release", releaseDefault},
|
|
|
+ {"no records", nil, "1.0.3", "develop", nil},
|
|
|
+ }
|
|
|
+ for _, tc := range cases {
|
|
|
+ t.Run(tc.name, func(t *testing.T) {
|
|
|
+ versions := new(Versions)
|
|
|
+ for _, record := range tc.records {
|
|
|
+ platform, ok := versions.VPlatforms.Get(record.Platform)
|
|
|
+ if !ok {
|
|
|
+ platform = new(PlatformVersions)
|
|
|
+ versions.VPlatforms.Set(record.Platform, platform)
|
|
|
+ }
|
|
|
+ platform.VList.Push(record)
|
|
|
+ platform.VMap.Set(versionMapKey(record.Version, NormalizeEnvVersion(record.EnvVersion)), record)
|
|
|
+ }
|
|
|
+ if got := versions.Check(tc.number, "wx", tc.env); got != tc.want {
|
|
|
+ t.Fatalf("Check(%q, wx, %q) = %#v, want %#v", tc.number, tc.env, got, tc.want)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if got := NormalizeEnvVersion("develop"); got != releaseEnvVersion {
|
|
|
+ t.Fatalf("query alias must not change stored environment normalization: %q", got)
|
|
|
+ }
|
|
|
+}
|