未验证 提交 553b3c82 编写于 作者: LinuxSuRen's avatar LinuxSuRen 提交者: GitHub

Merge pull request #224 from LinuxSuRen/plugin-check

Add test cases for plugin check
...@@ -22,7 +22,4 @@ var pluginCmd = &cobra.Command{ ...@@ -22,7 +22,4 @@ var pluginCmd = &cobra.Command{
Example: ` jcli plugin list Example: ` jcli plugin list
jcli plugin search github jcli plugin search github
jcli plugin check`, jcli plugin check`,
Run: func(cmd *cobra.Command, _ []string) {
cmd.Help()
},
} }
...@@ -2,40 +2,44 @@ package cmd ...@@ -2,40 +2,44 @@ package cmd
import ( import (
"fmt" "fmt"
"github.com/jenkins-zh/jenkins-cli/app/helper"
"io/ioutil" "io/ioutil"
"log"
"net/http" "net/http"
"github.com/jenkins-zh/jenkins-cli/client" "github.com/jenkins-zh/jenkins-cli/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
// PluginCheckoutOption is the option for plugin checkout command
type PluginCheckoutOption struct {
RoundTripper http.RoundTripper
}
var pluginCheckoutOption PluginCheckoutOption
func init() { func init() {
pluginCmd.AddCommand(pluginCheckCmd) pluginCmd.AddCommand(pluginCheckCmd)
} }
var pluginCheckCmd = &cobra.Command{ var pluginCheckCmd = &cobra.Command{
Use: "check", Use: "check",
Short: "Checkout update center server", Short: "Check update center server",
Long: `Checkout update center server`, Long: `Check update center server`,
Run: func(_ *cobra.Command, _ []string) { Run: func(cmd *cobra.Command, _ []string) {
jenkins := getCurrentJenkinsFromOptionsOrDie() jClient := &client.PluginManager{
jclient := &client.PluginManager{} JenkinsCore: client.JenkinsCore{
jclient.URL = jenkins.URL RoundTripper: pluginCheckoutOption.RoundTripper,
jclient.UserName = jenkins.UserName },
jclient.Token = jenkins.Token }
jclient.Proxy = jenkins.Proxy getCurrentJenkinsAndClient(&(jClient.JenkinsCore))
jclient.ProxyAuth = jenkins.ProxyAuth
jclient.CheckUpdate(func(response *http.Response) { err := jClient.CheckUpdate(func(response *http.Response) {
code := response.StatusCode code := response.StatusCode
if code == 200 { if code != 200 {
fmt.Println("update site updated.")
} else {
contentData, _ := ioutil.ReadAll(response.Body) contentData, _ := ioutil.ReadAll(response.Body)
log.Fatal(fmt.Sprintf("response code is %d, content: %s", cmd.PrintErrln(fmt.Sprintf("response code is %d, content: %s", code, string(contentData)))
code, string(contentData)))
} }
}) })
helper.CheckErr(cmd, err)
}, },
} }
package cmd
import (
"bytes"
"github.com/jenkins-zh/jenkins-cli/client"
"io/ioutil"
"os"
"github.com/golang/mock/gomock"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/jenkins-zh/jenkins-cli/mock/mhttp"
)
var _ = Describe("plugin checkout command", func() {
var (
ctrl *gomock.Controller
roundTripper *mhttp.MockRoundTripper
)
BeforeEach(func() {
ctrl = gomock.NewController(GinkgoT())
roundTripper = mhttp.NewMockRoundTripper(ctrl)
pluginCheckoutOption.RoundTripper = roundTripper
rootCmd.SetArgs([]string{})
rootOptions.Jenkins = ""
rootOptions.ConfigFile = "test.yaml"
})
AfterEach(func() {
rootCmd.SetArgs([]string{})
os.Remove(rootOptions.ConfigFile)
rootOptions.ConfigFile = ""
ctrl.Finish()
})
Context("basic cases", func() {
It("should success", func() {
var err error
var data []byte
data, err = generateSampleConfig()
Expect(err).To(BeNil())
err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664)
Expect(err).To(BeNil())
client.PrepareCheckUpdate(roundTripper, "http://localhost:8080/jenkins",
"admin", "111e3a2f0231198855dceaff96f20540a9")
rootCmd.SetArgs([]string{"plugin", "check"})
buf := new(bytes.Buffer)
rootCmd.SetOut(buf)
_, err = rootCmd.ExecuteC()
Expect(err).To(BeNil())
Expect(buf.String()).To(Equal(""))
})
})
})
...@@ -13,8 +13,8 @@ func init() { ...@@ -13,8 +13,8 @@ func init() {
var pluginOpenCmd = &cobra.Command{ var pluginOpenCmd = &cobra.Command{
Use: "open", Use: "open",
Short: "Openout update center server", Short: "Open update center server",
Long: `Openout update center server`, Long: `Open update center server`,
Run: func(_ *cobra.Command, _ []string) { Run: func(_ *cobra.Command, _ []string) {
jenkins := getCurrentJenkinsFromOptionsOrDie() jenkins := getCurrentJenkinsFromOptionsOrDie()
......
package cmd package cmd
import ( import (
"github.com/jenkins-zh/jenkins-cli/app/helper"
"net/http" "net/http"
"github.com/jenkins-zh/jenkins-cli/client" "github.com/jenkins-zh/jenkins-cli/client"
...@@ -34,14 +35,13 @@ var userCmd = &cobra.Command{ ...@@ -34,14 +35,13 @@ var userCmd = &cobra.Command{
} }
getCurrentJenkinsAndClient(&(jclient.JenkinsCore)) getCurrentJenkinsAndClient(&(jclient.JenkinsCore))
if status, err := jclient.Get(); err == nil { status, err := jclient.Get()
if data, err := userOption.Output(status); err == nil { if err == nil {
data, err := userOption.Output(status)
if err == nil {
cmd.Println(string(data)) cmd.Println(string(data))
} else {
cmd.PrintErrln(err)
} }
} else {
cmd.PrintErrln(err)
} }
helper.CheckErr(cmd, err)
}, },
} }
...@@ -181,16 +181,14 @@ func (j *JenkinsCore) PermissionError(statusCode int) (err error) { ...@@ -181,16 +181,14 @@ func (j *JenkinsCore) PermissionError(statusCode int) (err error) {
func (j *JenkinsCore) RequestWithResponseHeader(method, api string, headers map[string]string, payload io.Reader, obj interface{}) ( func (j *JenkinsCore) RequestWithResponseHeader(method, api string, headers map[string]string, payload io.Reader, obj interface{}) (
response *http.Response, err error) { response *http.Response, err error) {
response, err = j.RequestWithResponse(method, api, headers, payload) response, err = j.RequestWithResponse(method, api, headers, payload)
if err != nil {
return
}
var data []byte if err == nil && obj != nil && response.StatusCode == 200 {
if response.StatusCode == 200 { var data []byte
if data, err = ioutil.ReadAll(response.Body); err == nil { if data, err = ioutil.ReadAll(response.Body); err == nil {
err = json.Unmarshal(data, obj) err = json.Unmarshal(data, obj)
} }
} }
return return
} }
......
...@@ -68,3 +68,10 @@ func PrepareDownloadPlugin(roundTripper *mhttp.MockRoundTripper) { ...@@ -68,3 +68,10 @@ func PrepareDownloadPlugin(roundTripper *mhttp.MockRoundTripper) {
roundTripper.EXPECT(). roundTripper.EXPECT().
RoundTrip(request).Return(response, nil) RoundTrip(request).Return(response, nil)
} }
// PrepareCheckUpdate only for test
func PrepareCheckUpdate(roundTripper *mhttp.MockRoundTripper, rootURL, user, password string) {
api := fmt.Sprintf("%s/pluginManager/checkUpdatesServer", rootURL)
request, _ := http.NewRequest("POST", api, nil)
PrepareCommonPost(request, "", roundTripper, user, password, rootURL)
}
...@@ -237,4 +237,15 @@ var _ = Describe("PluginManager test", func() { ...@@ -237,4 +237,15 @@ var _ = Describe("PluginManager test", func() {
Expect(err).To(HaveOccurred()) Expect(err).To(HaveOccurred())
}) })
}) })
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())
})
})
}) })
...@@ -5,7 +5,6 @@ import ( ...@@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
"log"
"mime/multipart" "mime/multipart"
"net/http" "net/http"
"os" "os"
...@@ -70,26 +69,15 @@ type InstalledPlugin struct { ...@@ -70,26 +69,15 @@ type InstalledPlugin struct {
BackVersion string BackVersion string
} }
// CheckUpdate fetch the lastest plugins from update center site // CheckUpdate fetch the latest plugins from update center site
func (p *PluginManager) CheckUpdate(handle func(*http.Response)) { func (p *PluginManager) CheckUpdate(handle func(*http.Response)) (err error) {
api := fmt.Sprintf("%s/pluginManager/checkUpdatesServer", p.URL) api := "/pluginManager/checkUpdatesServer"
req, err := http.NewRequest("POST", api, nil) var response *http.Response
response, err = p.RequestWithResponseHeader("POST", api, nil, nil, nil)
if err == nil { if err == nil {
p.AuthHandle(req)
} else {
log.Fatal(err)
}
if err = p.CrumbHandle(req); err != nil {
log.Fatal(err)
}
client := p.GetClient()
if response, err := client.Do(req); err == nil {
p.handleCheck(handle)(response) p.handleCheck(handle)(response)
} else {
log.Fatal(err)
} }
return
} }
// GetAvailablePlugins get the aviable plugins from Jenkins // GetAvailablePlugins get the aviable plugins from Jenkins
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册