From d3c2b12b20df9fd51cf753d4f327bc5a5e161774 Mon Sep 17 00:00:00 2001 From: Yanjun Shi Date: Mon, 7 Oct 2019 18:10:09 +0800 Subject: [PATCH] Add permission information for request (#187) * Add permission information for request * Add some test util --- client/common.go | 18 ++++++++++++++++-- client/common_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/client/common.go b/client/common.go index fec76c0..85bfac1 100644 --- a/client/common.go +++ b/client/common.go @@ -158,18 +158,32 @@ func (j *JenkinsCore) RequestWithoutData(method, api string, headers map[string] // ErrorHandle handles the error cases func (j *JenkinsCore) ErrorHandle(statusCode int, data []byte) (err error) { - err = fmt.Errorf("unexpected status code: %d", statusCode) + if statusCode >= 400 && statusCode < 500 { + err = j.PermissionError(statusCode) + } else { + err = fmt.Errorf("unexpected status code: %d", statusCode) + } if j.Debug { ioutil.WriteFile("debug.html", data, 0664) } return } +// PermissionError handles the no permission +func (j *JenkinsCore) PermissionError(statusCode int) (err error) { + if statusCode == 404 { + err = fmt.Errorf("Not found resources") + } else { + err = fmt.Errorf("The current user no permission") + } + return +} + // RequestWithResponse make a common request func (j *JenkinsCore) RequestWithResponse(method, api string, headers map[string]string, payload io.Reader) ( response *http.Response, err error) { var ( - req *http.Request + req *http.Request ) if req, err = http.NewRequest(method, fmt.Sprintf("%s%s", j.URL, api), payload); err != nil { diff --git a/client/common_test.go b/client/common_test.go index 3f082a2..81e3537 100644 --- a/client/common_test.go +++ b/client/common_test.go @@ -139,5 +139,40 @@ var _ = Describe("common test", func() { _, err := jenkinsCore.GetCrumb() Expect(err).To(HaveOccurred()) }) + + It("with 404 error from server", func() { + err := jenkinsCore.ErrorHandle(404, []byte{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("Not found resources")) + }) + + It("with 403 error from server", func() { + err := jenkinsCore.ErrorHandle(403, []byte{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("The current user no permission")) + }) + + It("with CrumbHandle error from server", func() { + requestCrumb, _ := http.NewRequest("GET", fmt.Sprintf("%s%s", jenkinsCore.URL, "/crumbIssuer/api/json"), nil) + responseCrumb := &http.Response{ + StatusCode: 500, + Proto: "HTTP/1.1", + Request: requestCrumb, + Body: ioutil.NopCloser(bytes.NewBufferString("")), + } + roundTripper.EXPECT(). + RoundTrip(requestCrumb).Return(responseCrumb, nil) + err := jenkinsCore.CrumbHandle(requestCrumb) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("unexpected status code: 500")) + }) + + It("test GetClient", func() { + jenkinsCore.RoundTripper = nil + jenkinsCore.Proxy = "kljasdsll" + jenkinsCore.ProxyAuth = "kljaslkdjkslad" + jclient := jenkinsCore.GetClient() + Expect(jclient).NotTo(BeNil()) + }) }) }) -- GitLab