pluginManager_test.go 7.4 KB
Newer Older
LinuxSuRen's avatar
LinuxSuRen 已提交
1 2 3
package client

import (
4 5 6 7 8
	"bytes"
	"fmt"
	"io/ioutil"
	"net/http"

LinuxSuRen's avatar
LinuxSuRen 已提交
9
	"github.com/golang/mock/gomock"
10
	"github.com/jenkins-zh/jenkins-cli/mock/mhttp"
LinuxSuRen's avatar
LinuxSuRen 已提交
11 12 13 14 15 16
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("PluginManager test", func() {
	var (
17 18 19
		ctrl         *gomock.Controller
		roundTripper *mhttp.MockRoundTripper
		pluginMgr    PluginManager
20
		updateMgr    UpdateCenterManager
LinuxSuRen's avatar
LinuxSuRen 已提交
21 22 23 24
	)

	BeforeEach(func() {
		ctrl = gomock.NewController(GinkgoT())
25 26 27 28
		roundTripper = mhttp.NewMockRoundTripper(ctrl)
		pluginMgr = PluginManager{}
		pluginMgr.RoundTripper = roundTripper
		pluginMgr.URL = "http://localhost"
29 30 31
		updateMgr = UpdateCenterManager{}
		updateMgr.RoundTripper = roundTripper
		updateMgr.URL = "http://localhost"
LinuxSuRen's avatar
LinuxSuRen 已提交
32 33 34 35 36 37 38 39 40
	})

	AfterEach(func() {
		ctrl.Finish()
	})

	Context("basic function test", func() {
		It("get install plugin query string", func() {
			names := make([]string, 0)
41
			Expect(pluginMgr.getPluginsInstallQuery(names)).To(Equal(""))
LinuxSuRen's avatar
LinuxSuRen 已提交
42 43

			names = append(names, "abc")
44
			Expect(pluginMgr.getPluginsInstallQuery(names)).To(Equal("plugin.abc="))
LinuxSuRen's avatar
LinuxSuRen 已提交
45 46

			names = append(names, "def")
47
			Expect(pluginMgr.getPluginsInstallQuery(names)).To(Equal("plugin.abc=&plugin.def="))
LinuxSuRen's avatar
LinuxSuRen 已提交
48 49

			names = append(names, "")
50
			Expect(pluginMgr.getPluginsInstallQuery(names)).To(Equal("plugin.abc=&plugin.def="))
LinuxSuRen's avatar
LinuxSuRen 已提交
51 52
		})
	})
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

	Context("GetAvailablePlugins", func() {
		It("no plugin in the list", func() {
			PrepareForEmptyAvaiablePluginList(roundTripper, pluginMgr.URL)

			pluginList, err := pluginMgr.GetAvailablePlugins()
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Data)).To(Equal(0))
		})

		It("one plugin in the list", func() {
			PrepareForOneAvaiablePlugin(roundTripper, pluginMgr.URL)

			pluginList, err := pluginMgr.GetAvailablePlugins()
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Data)).To(Equal(1))
			Expect(pluginList.Data[0].Name).To(Equal("fake"))
		})

74 75 76 77 78 79 80 81 82 83
		It("many plugins in the list", func() {
			PrepareForManyAvaiablePlugin(roundTripper, pluginMgr.URL)

			pluginList, err := pluginMgr.GetAvailablePlugins()
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Data)).To(Equal(6))
			Expect(pluginList.Data[0].Name).To(Equal("fake-ocean"))
		})

84 85 86 87 88 89 90 91 92
		It("response with 500", func() {
			request, _ := http.NewRequest("GET", fmt.Sprintf("%s/pluginManager/plugins", pluginMgr.URL), nil)
			response := &http.Response{
				StatusCode: 500,
				Proto:      "HTTP/1.1",
				Request:    request,
				Body:       ioutil.NopCloser(bytes.NewBufferString("")),
			}
			roundTripper.EXPECT().
93
				RoundTrip(NewRequestMatcher(request)).Return(response, nil)
94 95 96 97 98 99 100 101

			_, err := pluginMgr.GetAvailablePlugins()
			Expect(err).To(HaveOccurred())
		})
	})

	Context("GetPlugins", func() {
		It("no plugin in the list", func() {
102
			PrepareForEmptyInstalledPluginList(roundTripper, pluginMgr.URL, 1)
103

104
			pluginList, err := pluginMgr.GetPlugins(1)
105 106 107 108 109 110
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Plugins)).To(Equal(0))
		})

		It("one plugin in the list", func() {
111
			PrepareForOneInstalledPlugin(roundTripper, pluginMgr.URL)
112

113
			pluginList, err := pluginMgr.GetPlugins(1)
114 115 116 117 118 119 120
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Plugins)).To(Equal(1))
			Expect(pluginList.Plugins[0].ShortName).To(Equal("fake"))
		})

		It("response with 500", func() {
121
			PrepareFor500InstalledPluginList(roundTripper, pluginMgr.URL, 1)
122

123
			_, err := pluginMgr.GetPlugins(1)
124 125
			Expect(err).To(HaveOccurred())
		})
126 127 128 129 130 131 132 133 134

		It("test with parameter", func() {
			PrepareForManyInstalledPlugins(roundTripper, pluginMgr.URL, 2)

			pluginList, err := pluginMgr.GetPlugins(2)
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Plugins[0].Dependencies)).To(Equal(1))
		})
135 136
	})

137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
	Context("InstallPlugin", func() {
		var (
			pluginName string
		)

		BeforeEach(func() {
			pluginName = "fake"
		})

		It("normal case, should success", func() {
			PrepareForInstallPlugin(roundTripper, pluginMgr.URL, pluginName, "", "")

			err := pluginMgr.InstallPlugin([]string{pluginName})
			Expect(err).To(BeNil())
		})
152

LinuxSuRen's avatar
LinuxSuRen 已提交
153 154 155 156 157
		It("upload a plugin with a specific version, should success", func() {
			pluginName = "hugo"
			version := "0.1.8"
			PrepareDownloadPlugin(roundTripper)
			PrepareForUploadPlugin(roundTripper, pluginMgr.URL)
158

LinuxSuRen's avatar
LinuxSuRen 已提交
159
			err := pluginMgr.InstallPlugin([]string{pluginName + "@" + version})
160 161 162
			Expect(err).To(BeNil())
		})

LinuxSuRen's avatar
LinuxSuRen 已提交
163 164 165 166 167
		It("upload a not exists plugin", func() {
			pluginName = "hugo"
			version := "0.1.8"
			response := PrepareDownloadPlugin(roundTripper)
			response.StatusCode = 400
168

LinuxSuRen's avatar
LinuxSuRen 已提交
169
			err := pluginMgr.InstallPlugin([]string{pluginName + "@" + version})
170 171 172
			Expect(err).NotTo(BeNil())
		})

LinuxSuRen's avatar
LinuxSuRen 已提交
173 174
		It("with 400", func() {
			PrepareForInstallPluginWithCode(roundTripper, 400, pluginMgr.URL, pluginName, "", "")
175

LinuxSuRen's avatar
LinuxSuRen 已提交
176
			err := pluginMgr.InstallPlugin([]string{pluginName})
177 178 179
			Expect(err).NotTo(BeNil())
		})

180 181 182
		It("with 400, error message", func() {
			response := PrepareForInstallPluginWithCode(roundTripper, 400, pluginMgr.URL, pluginName, "", "")
			response.Header = map[string][]string{
183
				"X-Error": {"X-Error"},
184 185 186 187 188
			}

			err := pluginMgr.InstallPlugin([]string{pluginName})
			Expect(err).To(Equal(fmt.Errorf("X-Error")))
		})
189 190
	})

191 192 193 194 195 196 197 198 199 200
	Context("UninstallPlugin", func() {
		var (
			pluginName string
		)

		BeforeEach(func() {
			pluginName = "fake"
		})

		It("normal case, should success", func() {
201
			PrepareForUninstallPlugin(roundTripper, pluginMgr.URL, pluginName)
202 203 204 205 206 207

			err := pluginMgr.UninstallPlugin(pluginName)
			Expect(err).To(BeNil())
		})

		It("response with 500", func() {
208
			PrepareForUninstallPluginWith500(roundTripper, pluginMgr.URL, pluginName)
209 210 211 212 213

			err := pluginMgr.UninstallPlugin(pluginName)
			Expect(err).To(HaveOccurred())
		})
	})
LinuxSuRen's avatar
LinuxSuRen 已提交
214 215 216 217 218 219 220 221

	Context("Upload", func() {
		It("normal case, should success", func() {
			tmpfile, err := ioutil.TempFile("", "example")
			Expect(err).To(BeNil())

			PrepareForUploadPlugin(roundTripper, pluginMgr.URL)

LinuxSuRen's avatar
LinuxSuRen 已提交
222 223
			err = pluginMgr.Upload(tmpfile.Name())
			Expect(err).NotTo(HaveOccurred())
LinuxSuRen's avatar
LinuxSuRen 已提交
224 225
		})
	})
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250

	Context("UpdateCenter", func() {
		It("normal case, should success", func() {
			PrepareForRequestUpdateCenter(roundTripper, pluginMgr.URL)

			site, err := updateMgr.GetSite()
			Expect(err).To(BeNil())
			Expect(site).NotTo(BeNil())
			Expect(site.ID).To(Equal("default"))
		})
	})

	Context("NullUpdateCenter", func() {
		It("normal case, should success", func() {
			PrepareForNoAvailablePlugins(roundTripper, pluginMgr.URL)

			site, err := updateMgr.GetSite()
			Expect(err).To(BeNil())
			Expect(site).NotTo(BeNil())
			Expect(site.ID).To(Equal("default"))
		})
	})

	Context("ManyInstalledPlugins", func() {
		It("normal case, should success", func() {
251
			PrepareForManyInstalledPlugins(roundTripper, pluginMgr.URL, 1)
252

253
			pluginList, err := pluginMgr.GetPlugins(1)
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
			Expect(err).To(BeNil())
			Expect(pluginList).NotTo(BeNil())
			Expect(len(pluginList.Plugins)).To(Equal(4))
			Expect(pluginList.Plugins[0].ShortName).To(Equal("fake-ocean"))
		})
	})

	Context("500UpdateCenter", func() {
		It("normal case, should success", func() {
			PrepareForRequest500UpdateCenter(roundTripper, pluginMgr.URL)

			_, err := updateMgr.GetSite()
			Expect(err).To(HaveOccurred())
		})
	})
LinuxSuRen's avatar
LinuxSuRen 已提交
269 270 271 272 273 274 275 276 277 278 279

	Context("CheckUpdate", func() {
		It("normal case, should success", func() {
			PrepareCheckUpdate(roundTripper, pluginMgr.URL, "", "")

			err := pluginMgr.CheckUpdate(func(_ *http.Response) {
				// do nothing
			})
			Expect(err).To(BeNil())
		})
	})
LinuxSuRen's avatar
LinuxSuRen 已提交
280
})