Skip to content

Commit 95400a1

Browse files
yangzong18huiguangjun
authored andcommitted
modify read err from header unit testing (#372)
1 parent 64b34dc commit 95400a1

File tree

2 files changed

+142
-4
lines changed

2 files changed

+142
-4
lines changed

oss/client_test.go

Lines changed: 139 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4905,10 +4905,148 @@ func (s *OssClientSuite) TestExtendHttpResponseStatusCode(c *C) {
49054905
_, err = bucket.GetObject("unkown-error")
49064906
serviceErr, isSuc = err.(ServiceError)
49074907
c.Assert(isSuc, Equals, false)
4908-
prefix := "unkown response body, status = 509"
4908+
prefix := "unknown response body, status = 509"
49094909
ok := strings.Contains(err.Error(), prefix)
49104910
c.Assert(ok, Equals, true)
4911+
svr.Close()
4912+
}
4913+
4914+
func emptyBodyEcHandler(w http.ResponseWriter, r *http.Request) {
4915+
w.Header().Set(HTTPHeaderOssRequestID, "123456")
4916+
w.Header().Set(HTTPHeaderOssEc, "0001-00000309")
4917+
w.WriteHeader(309)
4918+
fmt.Fprintf(w, "")
4919+
}
4920+
4921+
func emptyBodyHeaderHandler(w http.ResponseWriter, r *http.Request) {
4922+
w.Header().Set(HTTPHeaderOssRequestID, "64195A905C006935335FE181")
4923+
w.Header().Set(HTTPHeaderOssEc, "0026-00000001")
4924+
w.Header().Set(HTTPHeaderOssErr, "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPgogIDxDb2RlPk5vU3VjaEtleTwvQ29kZT4KICA8TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+CiAgPFJlcXVlc3RJZD42NDE5NUE5MDVDMDA2OTM1MzM1RkUxODE8L1JlcXVlc3RJZD4KICA8SG9zdElkPmRlbW8td2Fsa2VyLTY5NjEub3NzLWNuLWhhbmd6aG91LmFsaXl1bmNzLmNvbTwvSG9zdElkPgogIDxLZXk+ZGVtby0xMTEudXh1PC9LZXk+CiAgPEVDPjAwMjYtMDAwMDAwMDE8L0VDPgo8L0Vycm9yPgo=")
4925+
w.WriteHeader(404)
4926+
fmt.Fprintf(w, "")
4927+
}
4928+
4929+
func serviceErrorBodyEcHandler(w http.ResponseWriter, r *http.Request) {
4930+
err := ServiceError{
4931+
Code: "510",
4932+
Message: "service response error",
4933+
RequestID: "ABCDEF",
4934+
HostID: "127.0.0.1",
4935+
Endpoint: "127.0.0.1",
4936+
StatusCode: 510,
4937+
Ec: "0001-00000510",
4938+
}
4939+
data, _ := xml.MarshalIndent(&err, "", " ")
4940+
w.Header().Set(HTTPHeaderOssRequestID, "ABCDEF")
4941+
w.WriteHeader(510)
4942+
fmt.Fprintf(w, string(data))
4943+
}
4944+
func serviceErrorBodyEmptyEndpiointEcHandler(w http.ResponseWriter, r *http.Request) {
4945+
err := ServiceError{
4946+
Code: "510",
4947+
Message: "service response error",
4948+
RequestID: "ABCDEF",
4949+
HostID: "127.0.0.1",
4950+
Endpoint: "",
4951+
StatusCode: 510,
4952+
Ec: "0001-00000510",
4953+
}
4954+
data, _ := xml.MarshalIndent(&err, "", " ")
4955+
w.Header().Set(HTTPHeaderOssRequestID, "ABCDEF")
4956+
w.WriteHeader(510)
4957+
fmt.Fprintf(w, string(data))
4958+
}
4959+
4960+
func unknownErrorBodyEcHandler(w http.ResponseWriter, r *http.Request) {
4961+
w.WriteHeader(509)
4962+
w.Header().Set(HTTPHeaderOssEc, "0001-00000509")
4963+
fmt.Fprintf(w, "unkown response error")
4964+
}
4965+
4966+
func (s *OssClientSuite) TestExtendHttpResponseStatusCodeWithEc(c *C) {
4967+
// get port
4968+
rand.Seed(time.Now().Unix())
4969+
port := 10000 + rand.Intn(10000)
4970+
4971+
// start http server
4972+
httpAddr := fmt.Sprintf("127.0.0.1:%d", port)
4973+
mux := http.NewServeMux()
4974+
mux.HandleFunc("/empty-body/empty-body", emptyBodyEcHandler)
4975+
mux.HandleFunc("/service-error/service-error", serviceErrorBodyEcHandler)
4976+
mux.HandleFunc("/service-error/service-error-point", serviceErrorBodyEmptyEndpiointEcHandler)
4977+
mux.HandleFunc("/unknown-error/unknown-error", unknownErrorBodyEcHandler)
49114978

4979+
mux.HandleFunc("/empty-body/read-err-from-header", emptyBodyHeaderHandler)
4980+
svr := &http.Server{
4981+
Addr: httpAddr,
4982+
ReadTimeout: 10 * time.Second,
4983+
WriteTimeout: 10 * time.Second,
4984+
MaxHeaderBytes: 1 << 20,
4985+
Handler: mux,
4986+
}
4987+
4988+
go func() {
4989+
svr.ListenAndServe()
4990+
}()
4991+
4992+
time.Sleep(5 * time.Second)
4993+
4994+
testEndpoint := httpAddr
4995+
client, err := New(testEndpoint, accessID, accessKey)
4996+
4997+
bucket, err := client.Bucket("empty-body")
4998+
_, err = bucket.GetObject("empty-body")
4999+
serviceErr, isSuc := err.(ServiceError)
5000+
testLogger.Println(serviceErr)
5001+
c.Assert(isSuc, Equals, true)
5002+
c.Assert(serviceErr.StatusCode, Equals, 309)
5003+
c.Assert(serviceErr.RequestID, Equals, "123456")
5004+
c.Assert(serviceErr.Ec, Equals, "0001-00000309")
5005+
prefix := "oss: service returned error: StatusCode=309, ErrorCode=, ErrorMessage=\"\", RequestId=123456, Ec=0001-00000309"
5006+
ok := strings.Contains(err.Error(), prefix)
5007+
c.Assert(ok, Equals, true)
5008+
5009+
bucket, err = client.Bucket("empty-body")
5010+
_, err = bucket.GetObject("read-err-from-header")
5011+
serviceErr, isSuc = err.(ServiceError)
5012+
c.Assert(isSuc, Equals, true)
5013+
c.Assert(serviceErr.StatusCode, Equals, 404)
5014+
c.Assert(serviceErr.RequestID, Equals, "64195A905C006935335FE181")
5015+
c.Assert(serviceErr.Ec, Equals, "0026-00000001")
5016+
5017+
prefix = "oss: service returned error: StatusCode=404, ErrorCode=NoSuchKey, ErrorMessage=\"The specified key does not exist.\", RequestId=64195A905C006935335FE181, Ec=0026-00000001"
5018+
c.Assert(err.Error(), Equals, prefix)
5019+
5020+
bucket, err = client.Bucket("service-error")
5021+
_, err = bucket.GetObject("service-error")
5022+
serviceErr, isSuc = (err).(ServiceError)
5023+
c.Assert(isSuc, Equals, true)
5024+
c.Assert(serviceErr.StatusCode, Equals, 510)
5025+
c.Assert(serviceErr.RequestID, Equals, "ABCDEF")
5026+
c.Assert(serviceErr.Ec, Equals, "0001-00000510")
5027+
prefix = "oss: service returned error: StatusCode=510, ErrorCode=510, ErrorMessage=\"service response error\", RequestId=ABCDEF, Endpoint=127.0.0.1, Ec=0001-00000510"
5028+
ok = strings.Contains(err.Error(), prefix)
5029+
c.Assert(ok, Equals, true)
5030+
5031+
bucket, err = client.Bucket("service-error")
5032+
_, err = bucket.GetObject("service-error-point")
5033+
serviceErr, isSuc = (err).(ServiceError)
5034+
c.Assert(isSuc, Equals, true)
5035+
c.Assert(serviceErr.StatusCode, Equals, 510)
5036+
c.Assert(serviceErr.RequestID, Equals, "ABCDEF")
5037+
c.Assert(serviceErr.Ec, Equals, "0001-00000510")
5038+
prefix = "oss: service returned error: StatusCode=510, ErrorCode=510, ErrorMessage=\"service response error\", RequestId=ABCDEF, Ec=0001-00000510"
5039+
ok = strings.Contains(err.Error(), prefix)
5040+
c.Assert(ok, Equals, true)
5041+
5042+
bucket, err = client.Bucket("unknown-error")
5043+
_, err = bucket.GetObject("unknown-error")
5044+
serviceErr, isSuc = err.(ServiceError)
5045+
c.Assert(serviceErr.Ec, Equals, "")
5046+
testLogger.Println(err.Error())
5047+
c.Assert(isSuc, Equals, false)
5048+
prefix = "unknown response body, status = 509 status code 509, RequestId = "
5049+
c.Assert(err.Error(), Equals, prefix)
49125050
svr.Close()
49135051
}
49145052

oss/conn.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ var signKeyList = []string{"acl", "uploads", "location", "cors",
4949
"x-oss-enable-md5", "x-oss-enable-sha1", "x-oss-enable-sha256",
5050
"x-oss-hash-ctx", "x-oss-md5-ctx", "transferAcceleration",
5151
"regionList", "cloudboxes", "x-oss-ac-source-ip", "x-oss-ac-subnet-mask", "x-oss-ac-vpc-id", "x-oss-ac-forward-allow",
52-
"metaQuery", "resourceGroup","rtc",
52+
"metaQuery", "resourceGroup", "rtc",
5353
}
5454

5555
// init initializes Conn
@@ -577,9 +577,9 @@ func (conn Conn) handleResponse(resp *http.Response, crc hash.Hash64) (*Response
577577
resp.Header.Get(HTTPHeaderOssRequestID))
578578
if errIn != nil { // error unmarshal the error response
579579
if len(resp.Header.Get(HTTPHeaderOssEc)) > 0 {
580-
err = fmt.Errorf("oss: service returned invalid response body, status = %s, RequestId = %s, ec = %s", resp.Status, resp.Header.Get(HTTPHeaderOssRequestID), resp.Header.Get(HTTPHeaderOssEc))
580+
err = fmt.Errorf("unknown response body, status = %s, RequestId = %s, ec = %s", resp.Status, resp.Header.Get(HTTPHeaderOssRequestID), resp.Header.Get(HTTPHeaderOssEc))
581581
} else {
582-
err = fmt.Errorf("oss: service returned invalid response body, status = %s, RequestId = %s", resp.Status, resp.Header.Get(HTTPHeaderOssRequestID))
582+
err = fmt.Errorf("unknown response body, status = %s, RequestId = %s", resp.Status, resp.Header.Get(HTTPHeaderOssRequestID))
583583
}
584584
} else {
585585
err = srvErr

0 commit comments

Comments
 (0)