version_test.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package task
  2. import (
  3. "dsbqj-admin/model/mongo/version"
  4. "testing"
  5. )
  6. func TestVersionsCheckEnvVersionAndDefault(t *testing.T) {
  7. versions := VersionInit()
  8. platform := new(PlatformVersions)
  9. releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
  10. releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
  11. trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.0", Url: "体验服默认地址", Default: true}
  12. trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验服版本地址"}
  13. for _, v := range []*version.Version{releaseDefault, releaseExact, trialDefault, trialExact} {
  14. platform.VList.Push(v)
  15. platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
  16. }
  17. versions.VPlatforms.Set("wx", platform)
  18. if got := versions.Check("1.0.1", "wx", "trial"); got != trialExact {
  19. t.Fatalf("传入版本号和体验版环境时应精确匹配体验版版本,实际返回 %#v", got)
  20. }
  21. if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
  22. t.Fatalf("传入版本号和正式服环境时应精确匹配正式服版本,实际返回 %#v", got)
  23. }
  24. if got := versions.Check("1.0.1", "wx", ""); got != releaseExact {
  25. t.Fatalf("未传环境版本应返回正式服地址,实际返回 %#v", got)
  26. }
  27. if got := versions.Check("1.0.1", "wx", ""); got == nil || got.Version != "1.0.1" {
  28. t.Fatalf("未传环境版本时应优先按版本号返回任意环境版本,实际返回 %#v", got)
  29. }
  30. if got := versions.Check("9.9.9", "wx", "trial"); got != releaseDefault {
  31. t.Fatalf("体验版版本号未命中应回退到正式服默认版本,实际返回 %#v", got)
  32. }
  33. if got := versions.Check("9.9.9", "wx", "develop"); got != releaseDefault {
  34. t.Fatalf("版本号未命中应回退到正式服默认版本,实际返回 %#v", got)
  35. }
  36. }
  37. func TestVersionsCheckWithoutEnvVersionUsesVersionFirst(t *testing.T) {
  38. versions := VersionInit()
  39. platform := new(PlatformVersions)
  40. releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
  41. trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "0.2.0", Url: "体验版版本地址"}
  42. for _, v := range []*version.Version{releaseDefault, trialExact} {
  43. platform.VList.Push(v)
  44. platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
  45. }
  46. versions.VPlatforms.Set("wx", platform)
  47. if got := versions.Check("0.2.0", "wx", ""); got != trialExact {
  48. t.Fatalf("未传环境版本时应按版本号命中体验版版本,实际返回 %#v", got)
  49. }
  50. if got := versions.Check("9.9.9", "wx", ""); got != releaseDefault {
  51. t.Fatalf("传入不存在的版本号应回退到正式服默认地址,实际返回 %#v", got)
  52. }
  53. }
  54. func TestVersionsCheckVersionConditionOverridesDefault(t *testing.T) {
  55. versions := VersionInit()
  56. platform := new(PlatformVersions)
  57. releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Url: "正式服默认地址", Default: true}
  58. releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
  59. trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "2.0.0", Url: "体验版默认地址", Default: true}
  60. trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
  61. for _, v := range []*version.Version{releaseDefault, releaseExact, trialDefault, trialExact} {
  62. platform.VList.Push(v)
  63. platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
  64. }
  65. versions.VPlatforms.Set("wx", platform)
  66. if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
  67. t.Fatalf("传入正式服版本号时应匹配指定版本,实际返回 %#v", got)
  68. }
  69. if got := versions.Check("1.0.1", "wx", "trial"); got != trialExact {
  70. t.Fatalf("传入体验版版本号时应匹配指定版本,实际返回 %#v", got)
  71. }
  72. if got := versions.Check("", "wx", "release"); got != releaseDefault {
  73. t.Fatalf("不传版本号时应返回正式服默认版本,实际返回 %#v", got)
  74. }
  75. if got := versions.Check("", "wx", "trial"); got != trialDefault {
  76. t.Fatalf("不传版本号时应返回体验版默认版本,实际返回 %#v", got)
  77. }
  78. }
  79. func TestVersionsCheckEnvVersionWithoutDefault(t *testing.T) {
  80. versions := VersionInit()
  81. platform := new(PlatformVersions)
  82. releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1", Url: "正式服版本地址"}
  83. trialExact := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Url: "体验版版本地址"}
  84. for _, v := range []*version.Version{releaseExact, trialExact} {
  85. platform.VList.Push(v)
  86. platform.VMap.Set(versionMapKey(v.Version, NormalizeEnvVersion(v.EnvVersion)), v)
  87. }
  88. versions.VPlatforms.Set("wx", platform)
  89. if got := versions.Check("1.0.1", "wx", "release"); got != releaseExact {
  90. t.Fatalf("正式服没有默认地址时应返回正式服版本地址,实际返回 %#v", got)
  91. }
  92. if got := versions.Check("1.0.1", "wx", "trial"); got != trialExact {
  93. t.Fatalf("体验版没有默认地址时应返回体验版版本地址,实际返回 %#v", got)
  94. }
  95. }
  96. func TestVersionsCheckFallsBackToLegacyRecords(t *testing.T) {
  97. versions := VersionInit()
  98. legacy := new(PlatformVersions)
  99. record := &version.Version{Channel: "bb", Version: "1.0.0", EnvVersion: "release", Url: "历史地址"}
  100. legacy.VList.Push(record)
  101. legacy.VMap.Set(versionMapKey(record.Version, NormalizeEnvVersion(record.EnvVersion)), record)
  102. versions.VPlatforms.Set("", legacy)
  103. if got := versions.Check("1.0.0", "wx", ""); got != record {
  104. t.Fatalf("平台记录不存在时应兼容读取历史空平台记录,实际返回 %#v", got)
  105. }
  106. }
  107. func TestVersionsCheckWithoutVersionUsesEnvironmentDefault(t *testing.T) {
  108. versions := VersionInit()
  109. platform := new(PlatformVersions)
  110. releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Default: true}
  111. trialDefault := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "1.0.1", Default: true}
  112. otherPlatformDefault := &version.Version{Platform: "dy", EnvVersion: "trial", Version: "9.9.9", Default: true}
  113. platform.VList.Push(releaseDefault)
  114. platform.VList.Push(trialDefault)
  115. versions.VPlatforms.Set("wx", platform)
  116. other := new(PlatformVersions)
  117. other.VList.Push(otherPlatformDefault)
  118. versions.VPlatforms.Set("dy", other)
  119. if got := versions.Check("", "wx", "trial"); got != trialDefault {
  120. t.Fatalf("empty version should use the trial default for the requested platform: %#v", got)
  121. }
  122. if got := versions.Check("", "wx", "release"); got != releaseDefault {
  123. t.Fatalf("empty version should use the release default for the requested platform: %#v", got)
  124. }
  125. if got := versions.Check("", "wx", ""); got != releaseDefault {
  126. t.Fatalf("empty version and environment should use the release default: %#v", got)
  127. }
  128. if got := versions.Check("", "dy", "trial"); got != otherPlatformDefault {
  129. t.Fatalf("empty version should not cross platform boundaries: %#v", got)
  130. }
  131. }
  132. func TestVersionsCheckWithoutVersionFallsBackToLatestEnvironmentVersion(t *testing.T) {
  133. versions := VersionInit()
  134. platform := new(PlatformVersions)
  135. releaseOld := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.2"}
  136. releaseLatest := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.10"}
  137. trial := &version.Version{Platform: "wx", EnvVersion: "trial", Version: "2.0.0"}
  138. for _, item := range []*version.Version{releaseOld, trial, releaseLatest} {
  139. platform.VList.Push(item)
  140. }
  141. versions.VPlatforms.Set("wx", platform)
  142. if got := versions.Check("", "wx", ""); got != releaseLatest {
  143. t.Fatalf("空版本号和环境应返回最新正式服版本,实际返回 %#v", got)
  144. }
  145. if got := versions.Check("", "wx", "trial"); got != trial {
  146. t.Fatalf("空版本号应只在指定环境内选择,实际返回 %#v", got)
  147. }
  148. if got := versions.Check("9.9.9", "wx", "trial"); got != releaseLatest {
  149. t.Fatalf("指定版本和环境均未命中应返回最新正式服版本,实际返回 %#v", got)
  150. }
  151. if got := versions.Check("", "dy", ""); got != nil {
  152. t.Fatalf("不应跨平台返回版本,实际返回 %#v", got)
  153. }
  154. releaseOld.Default = true
  155. if got := versions.Check("", "wx", ""); got != releaseOld {
  156. t.Fatalf("正式服默认标记应优先于最新版本,实际返回 %#v", got)
  157. }
  158. }
  159. func TestVersionsCheckTrialMissFallsBackToMatchingReleaseVersion(t *testing.T) {
  160. versions := VersionInit()
  161. platform := new(PlatformVersions)
  162. releaseDefault := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.0", Default: true}
  163. releaseExact := &version.Version{Platform: "wx", EnvVersion: "release", Version: "1.0.1"}
  164. for _, item := range []*version.Version{releaseDefault, releaseExact} {
  165. platform.VList.Push(item)
  166. platform.VMap.Set(versionMapKey(item.Version, releaseEnvVersion), item)
  167. }
  168. versions.VPlatforms.Set("wx", platform)
  169. if got := versions.Check("1.0.1", "wx", "trial"); got != releaseExact {
  170. t.Fatalf("体验服环境未命中时应优先返回同版本正式服配置,实际返回 %#v", got)
  171. }
  172. if got := versions.Check("9.9.9", "wx", "trial"); got != releaseDefault {
  173. t.Fatalf("版本号未命中时应返回正式服默认配置,实际返回 %#v", got)
  174. }
  175. }