publisher_test.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package main
  2. import "testing"
  3. func TestPreparingReleaseFromRemote(t *testing.T) {
  4. cases := []struct {
  5. version string
  6. expectedVersion string
  7. whatsNewUrl string
  8. relNotesUrl string
  9. nightly bool
  10. expectedBeta bool
  11. expectedStable bool
  12. expectedArch string
  13. expectedOs string
  14. expectedUrl string
  15. baseArchiveUrl string
  16. buildArtifacts []buildArtifact
  17. }{
  18. {
  19. version: "v5.2.0-beta1",
  20. expectedVersion: "5.2.0-beta1",
  21. whatsNewUrl: "https://whatsnews.foo/",
  22. relNotesUrl: "https://relnotes.foo/",
  23. nightly: false,
  24. expectedBeta: true,
  25. expectedStable: false,
  26. expectedArch: "amd64",
  27. expectedOs: "linux",
  28. expectedUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.0-beta1.linux-amd64.tar.gz",
  29. baseArchiveUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  30. buildArtifacts: []buildArtifact{{"linux", "amd64", ".linux-amd64.tar.gz"}},
  31. },
  32. {
  33. version: "v5.2.3",
  34. expectedVersion: "5.2.3",
  35. whatsNewUrl: "https://whatsnews.foo/",
  36. relNotesUrl: "https://relnotes.foo/",
  37. nightly: false,
  38. expectedBeta: false,
  39. expectedStable: true,
  40. expectedArch: "amd64",
  41. expectedOs: "rhel",
  42. expectedUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.3-1.x86_64.rpm",
  43. baseArchiveUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  44. buildArtifacts: []buildArtifact{{"rhel", "amd64", ".x86_64.rpm"}},
  45. },
  46. {
  47. version: "v5.4.0-pre1asdf",
  48. expectedVersion: "5.4.0-pre1asdf",
  49. whatsNewUrl: "https://whatsnews.foo/",
  50. relNotesUrl: "https://relnotes.foo/",
  51. nightly: true,
  52. expectedBeta: false,
  53. expectedStable: false,
  54. expectedArch: "amd64",
  55. expectedOs: "rhel",
  56. expectedUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.4.0-pre1asdf.x86_64.rpm",
  57. baseArchiveUrl: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  58. buildArtifacts: []buildArtifact{{"rhel", "amd64", ".x86_64.rpm"}},
  59. },
  60. }
  61. for _, test := range cases {
  62. builder := releaseFromExternalContent{
  63. getter: mockHttpGetter{},
  64. rawVersion: test.version,
  65. artifactConfigurations: test.buildArtifacts,
  66. }
  67. rel, _ := builder.prepareRelease(test.baseArchiveUrl, test.whatsNewUrl, test.relNotesUrl, test.nightly)
  68. if rel.Beta != test.expectedBeta || rel.Stable != test.expectedStable {
  69. t.Errorf("%s should have been tagged as beta=%v, stable=%v.", test.version, test.expectedBeta, test.expectedStable)
  70. }
  71. if rel.Version != test.expectedVersion {
  72. t.Errorf("Expected version to be %s, but it was %s.", test.expectedVersion, rel.Version)
  73. }
  74. expectedBuilds := len(test.buildArtifacts)
  75. if len(rel.Builds) != expectedBuilds {
  76. t.Errorf("Expected %v builds, but got %v.", expectedBuilds, len(rel.Builds))
  77. }
  78. build := rel.Builds[0]
  79. if build.Arch != test.expectedArch {
  80. t.Errorf("Expected arch to be %v, but it was %v", test.expectedArch, build.Arch)
  81. }
  82. if build.Os != test.expectedOs {
  83. t.Errorf("Expected os to be %v, but it was %v", test.expectedOs, build.Os)
  84. }
  85. if build.Url != test.expectedUrl {
  86. t.Errorf("Expected url to be %v, but it was %v", test.expectedUrl, build.Url)
  87. }
  88. }
  89. }
  90. type mockHttpGetter struct{}
  91. func (mockHttpGetter) getContents(url string) (string, error) {
  92. return url, nil
  93. }
  94. func TestPreparingReleaseFromLocal(t *testing.T) {
  95. whatsNewUrl := "https://whatsnews.foo/"
  96. relNotesUrl := "https://relnotes.foo/"
  97. expectedVersion := "5.4.0-123pre1"
  98. expectedBuilds := 4
  99. var builder releaseBuilder
  100. testDataPath := "testdata"
  101. builder = releaseLocalSources{
  102. path: testDataPath,
  103. artifactConfigurations: completeBuildArtifactConfigurations,
  104. }
  105. relAll, _ := builder.prepareRelease("https://s3-us-west-2.amazonaws.com/grafana-enterprise-releases/master/grafana-enterprise", whatsNewUrl, relNotesUrl, true)
  106. if relAll.Stable || !relAll.Nightly {
  107. t.Error("Expected a nightly release but wasn't.")
  108. }
  109. if relAll.ReleaseNotesUrl != relNotesUrl {
  110. t.Errorf("expected releaseNotesUrl to be %s, but it was %s", relNotesUrl, relAll.ReleaseNotesUrl)
  111. }
  112. if relAll.WhatsNewUrl != whatsNewUrl {
  113. t.Errorf("expected whatsNewUrl to be %s, but it was %s", whatsNewUrl, relAll.WhatsNewUrl)
  114. }
  115. if relAll.Beta {
  116. t.Errorf("Expected release to be nightly, not beta.")
  117. }
  118. if relAll.Version != expectedVersion {
  119. t.Errorf("Expected version=%s, but got=%s", expectedVersion, relAll.Version)
  120. }
  121. if len(relAll.Builds) != expectedBuilds {
  122. t.Errorf("Expected %v builds, but was %v", expectedBuilds, len(relAll.Builds))
  123. }
  124. expectedArch := "amd64"
  125. expectedOs := "win"
  126. builder = releaseLocalSources{
  127. path: testDataPath,
  128. artifactConfigurations: []buildArtifact{{
  129. os: expectedOs,
  130. arch: expectedArch,
  131. urlPostfix: ".windows-amd64.zip",
  132. }},
  133. }
  134. relOne, _ := builder.prepareRelease("https://s3-us-west-2.amazonaws.com/grafana-enterprise-releases/master/grafana-enterprise", whatsNewUrl, relNotesUrl, true)
  135. if len(relOne.Builds) != 1 {
  136. t.Errorf("Expected 1 artifact, but was %v", len(relOne.Builds))
  137. }
  138. build := relOne.Builds[0]
  139. if build.Arch != expectedArch {
  140. t.Fatalf("Expected arch to be %s, but was %s", expectedArch, build.Arch)
  141. }
  142. if build.Os != expectedOs {
  143. t.Fatalf("Expected os to be %s, but was %s", expectedOs, build.Os)
  144. }
  145. _, err := builder.prepareRelease("", "", "", false)
  146. if err == nil {
  147. t.Error("Error was nil, but expected an error as the local releaser only supports nightly builds.")
  148. }
  149. }
  150. func TestFilterBuildArtifacts(t *testing.T) {
  151. buildArtifacts, _ := filterBuildArtifacts([]artifactFilter{
  152. {os: "deb", arch: "amd64"},
  153. {os: "rhel", arch: "amd64"},
  154. {os: "linux", arch: "amd64"},
  155. {os: "win", arch: "amd64"},
  156. })
  157. if len(buildArtifacts) != 4 {
  158. t.Errorf("Expected 4 build artifacts after filtering, but was %v", len(buildArtifacts))
  159. }
  160. _, err := filterBuildArtifacts([]artifactFilter{
  161. {os: "foobar", arch: "amd64"},
  162. })
  163. if err == nil {
  164. t.Errorf("Expected an error as a we tried to filter on a nonexiststant os.")
  165. }
  166. }