diff --git a/client/pluginManager_test.go b/client/pluginManager_test.go new file mode 100644 index 0000000000000000000000000000000000000000..a7da6ea2af4a8e7e1192115caf46020ddb9087fe --- /dev/null +++ b/client/pluginManager_test.go @@ -0,0 +1,37 @@ +package client + +import ( + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("PluginManager test", func() { + var ( + ctrl *gomock.Controller + ) + + BeforeEach(func() { + ctrl = gomock.NewController(GinkgoT()) + }) + + AfterEach(func() { + ctrl.Finish() + }) + + Context("basic function test", func() { + It("get install plugin query string", func() { + names := make([]string, 0) + Expect(getPluginsInstallQuery(names)).To(Equal("")) + + names = append(names, "abc") + Expect(getPluginsInstallQuery(names)).To(Equal("plugin.abc=")) + + names = append(names, "def") + Expect(getPluginsInstallQuery(names)).To(Equal("plugin.abc=&plugin.def=")) + + names = append(names, "") + Expect(getPluginsInstallQuery(names)).To(Equal("plugin.abc=&plugin.def=")) + }) + }) +}) diff --git a/client/pluginManger.go b/client/pluginManger.go index 469b5c081da160653a1e00d2b6611e1ed13dfbaf..95e086acae3ab70161367e6237e4e9766d8d8dce 100644 --- a/client/pluginManger.go +++ b/client/pluginManger.go @@ -153,12 +153,20 @@ func (p *PluginManager) GetPlugins() (pluginList *InstalledPluginList, err error return } +func getPluginsInstallQuery(names []string) string { + pluginNames := make([]string, 0) + for _, name := range names { + if name == "" { + continue + } + pluginNames = append(pluginNames, fmt.Sprintf("plugin.%s=", name)) + } + return strings.Join(pluginNames, "&") +} + // InstallPlugin install a plugin by name func (p *PluginManager) InstallPlugin(names []string) (err error) { - for i, name := range names { - names[i] = fmt.Sprintf("plugin.%s", name) - } - api := fmt.Sprintf("%s/pluginManager/install?%s", p.URL, strings.Join(names, "=&")) + api := fmt.Sprintf("%s/pluginManager/install?%s", p.URL, getPluginsInstallQuery(names)) var ( req *http.Request response *http.Response @@ -180,8 +188,22 @@ func (p *PluginManager) InstallPlugin(names []string) (err error) { data, err = ioutil.ReadAll(response.Body) if code == 200 { fmt.Println("install succeed.") + } else if code == 400 { + if errMsg, ok := response.Header["X-Error"]; ok { + for _, msg := range errMsg { + fmt.Println(msg) + } + } else { + fmt.Println("Cannot found plugins", names) + } } else { - log.Fatal(string(data)) + fmt.Println(response.Header) + fmt.Println("status code", code) + if err == nil && p.Debug && len(data) > 0 { + ioutil.WriteFile("debug.html", data, 0664) + } else if err != nil { + log.Fatal(err) + } } } else { log.Fatal(err) diff --git a/client/setup_test.go b/client/setup_test.go new file mode 100644 index 0000000000000000000000000000000000000000..0c65a85e8ff1b5d21ba4008a154618e41577b43a --- /dev/null +++ b/client/setup_test.go @@ -0,0 +1,13 @@ +package client + +import ( + "testing" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func TestJenkinsClient(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "jenkins client test") +}