publisher_test.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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. version: "v5.4.0-pre1asdf",
  62. expectedVersion: "5.4.0-pre1asdf",
  63. whatsNewURL: "https://whatsnews.foo/",
  64. relNotesURL: "https://relnotes.foo/",
  65. nightly: true,
  66. expectedBeta: false,
  67. expectedStable: false,
  68. expectedArch: "armv6",
  69. expectedOs: "linux",
  70. expectedURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-rpi-5.4.0-pre1asdf_armhf.deb",
  71. baseArchiveURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  72. buildArtifacts: []buildArtifact{{"linux", "armv6", "_armhf.deb", "-rpi"}},
  73. },
  74. {
  75. version: "v5.4.0-pre1asdf",
  76. expectedVersion: "5.4.0-pre1asdf",
  77. whatsNewURL: "https://whatsnews.foo/",
  78. relNotesURL: "https://relnotes.foo/",
  79. nightly: true,
  80. expectedBeta: false,
  81. expectedStable: false,
  82. expectedArch: "amd64",
  83. expectedOs: "win-installer",
  84. expectedURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.4.0-pre1asdf.windows-amd64.msi",
  85. baseArchiveURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  86. buildArtifacts: []buildArtifact{{"win-installer", "amd64", ".windows-amd64.msi", ""}},
  87. },
  88. {
  89. version: "v5.4.0-pre1asdf",
  90. expectedVersion: "5.4.0-pre1asdf",
  91. whatsNewURL: "https://whatsnews.foo/",
  92. relNotesURL: "https://relnotes.foo/",
  93. nightly: true,
  94. expectedBeta: false,
  95. expectedStable: false,
  96. expectedArch: "amd64",
  97. expectedOs: "win",
  98. expectedURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.4.0-pre1asdf.windows-amd64.zip",
  99. baseArchiveURL: "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana",
  100. buildArtifacts: []buildArtifact{{"win", "amd64", ".windows-amd64.zip", ""}},
  101. },
  102. }
  103. for _, test := range cases {
  104. builder := releaseFromExternalContent{
  105. getter: mockHTTPGetter{},
  106. rawVersion: test.version,
  107. artifactConfigurations: test.buildArtifacts,
  108. }
  109. rel, _ := builder.prepareRelease(test.baseArchiveURL, test.whatsNewURL, test.relNotesURL, test.nightly)
  110. if rel.Beta != test.expectedBeta || rel.Stable != test.expectedStable {
  111. t.Errorf("%s should have been tagged as beta=%v, stable=%v.", test.version, test.expectedBeta, test.expectedStable)
  112. }
  113. if rel.Version != test.expectedVersion {
  114. t.Errorf("Expected version to be %s, but it was %s.", test.expectedVersion, rel.Version)
  115. }
  116. expectedBuilds := len(test.buildArtifacts)
  117. if len(rel.Builds) != expectedBuilds {
  118. t.Errorf("Expected %v builds, but got %v.", expectedBuilds, len(rel.Builds))
  119. }
  120. build := rel.Builds[0]
  121. if build.Arch != test.expectedArch {
  122. t.Errorf("Expected arch to be %v, but it was %v", test.expectedArch, build.Arch)
  123. }
  124. if build.Os != test.expectedOs {
  125. t.Errorf("Expected os to be %v, but it was %v", test.expectedOs, build.Os)
  126. }
  127. if build.URL != test.expectedURL {
  128. t.Errorf("Expected url to be %v, but it was %v", test.expectedURL, build.URL)
  129. }
  130. }
  131. }
  132. type mockHTTPGetter struct{}
  133. func (mockHTTPGetter) getContents(url string) (string, error) {
  134. return url, nil
  135. }
  136. func TestFilterBuildArtifacts(t *testing.T) {
  137. buildArtifacts, _ := filterBuildArtifacts([]artifactFilter{
  138. {os: "deb", arch: "amd64"},
  139. {os: "rhel", arch: "amd64"},
  140. {os: "linux", arch: "amd64"},
  141. {os: "win", arch: "amd64"},
  142. })
  143. if len(buildArtifacts) != 4 {
  144. t.Errorf("Expected 4 build artifacts after filtering, but was %v", len(buildArtifacts))
  145. }
  146. _, err := filterBuildArtifacts([]artifactFilter{
  147. {os: "foobar", arch: "amd64"},
  148. })
  149. if err == nil {
  150. t.Errorf("Expected an error as a we tried to filter on a nonexiststant os.")
  151. }
  152. }