未验证 提交 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{
Example: ` jcli plugin list
jcli plugin search github
jcli plugin check`,
Run: func(cmd *cobra.Command, _ []string) {
cmd.Help()
},
}
......@@ -2,40 +2,44 @@ package cmd
import (
"fmt"
"github.com/jenkins-zh/jenkins-cli/app/helper"
"io/ioutil"
"log"
"net/http"
"github.com/jenkins-zh/jenkins-cli/client"
"github.com/spf13/cobra"
)
// PluginCheckoutOption is the option for plugin checkout command
type PluginCheckoutOption struct {
RoundTripper http.RoundTripper
}
var pluginCheckoutOption PluginCheckoutOption
func init() {
pluginCmd.AddCommand(pluginCheckCmd)
}
var pluginCheckCmd = &cobra.Command{
Use: "check",
Short: "Checkout update center server",
Long: `Checkout update center server`,
Run: func(_ *cobra.Command, _ []string) {
jenkins := getCurrentJenkinsFromOptionsOrDie()
jclient := &client.PluginManager{}
jclient.URL = jenkins.URL
jclient.UserName = jenkins.UserName
jclient.Token = jenkins.Token
jclient.Proxy = jenkins.Proxy
jclient.ProxyAuth = jenkins.ProxyAuth
Short: "Check update center server",
Long: `Check update center server`,
Run: func(cmd *cobra.Command, _ []string) {
jClient := &client.PluginManager{
JenkinsCore: client.JenkinsCore{
RoundTripper: pluginCheckoutOption.RoundTripper,
},
}
getCurrentJenkinsAndClient(&(jClient.JenkinsCore))
jclient.CheckUpdate(func(response *http.Response) {
err := jClient.CheckUpdate(func(response *http.Response) {
code := response.StatusCode
if code == 200 {
fmt.Println("update site updated.")
} else {
if code != 200 {
contentData, _ := ioutil.ReadAll(response.Body)
log.Fatal(fmt.Sprintf("response code is %d, content: %s",
code, string(contentData)))
cmd.PrintErrln(fmt.Sprintf("response code is %d, content: %s", 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() {
var pluginOpenCmd = &cobra.Command{
Use: "open",
Short: "Openout update center server",
Long: `Openout update center server`,
Short: "Open update center server",
Long: `Open update center server`,
Run: func(_ *cobra.Command, _ []string) {
jenkins := getCurrentJenkinsFromOptionsOrDie()
......
package cmd
import (
"github.com/jenkins-zh/jenkins-cli/app/helper"
"net/http"
"github.com/jenkins-zh/jenkins-cli/client"
......@@ -34,14 +35,13 @@ var userCmd = &cobra.Command{
}
getCurrentJenkinsAndClient(&(jclient.JenkinsCore))
if status, err := jclient.Get(); err == nil {
if data, err := userOption.Output(status); err == nil {
status, err := jclient.Get()
if err == nil {
data, err := userOption.Output(status)
if err == nil {
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) {
func (j *JenkinsCore) RequestWithResponseHeader(method, api string, headers map[string]string, payload io.Reader, obj interface{}) (
response *http.Response, err error) {
response, err = j.RequestWithResponse(method, api, headers, payload)
if err != nil {
return
}
if err == nil && obj != nil && response.StatusCode == 200 {
var data []byte
if response.StatusCode == 200 {
if data, err = ioutil.ReadAll(response.Body); err == nil {
err = json.Unmarshal(data, obj)
}
}
return
}
......
......@@ -68,3 +68,10 @@ func PrepareDownloadPlugin(roundTripper *mhttp.MockRoundTripper) {
roundTripper.EXPECT().
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() {
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 (
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
"os"
......@@ -70,26 +69,15 @@ type InstalledPlugin struct {
BackVersion string
}
// CheckUpdate fetch the lastest plugins from update center site
func (p *PluginManager) CheckUpdate(handle func(*http.Response)) {
api := fmt.Sprintf("%s/pluginManager/checkUpdatesServer", p.URL)
req, err := http.NewRequest("POST", api, nil)
// CheckUpdate fetch the latest plugins from update center site
func (p *PluginManager) CheckUpdate(handle func(*http.Response)) (err error) {
api := "/pluginManager/checkUpdatesServer"
var response *http.Response
response, err = p.RequestWithResponseHeader("POST", api, nil, nil, 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)
} else {
log.Fatal(err)
}
return
}
// GetAvailablePlugins get the aviable plugins from Jenkins
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册