Skip to content

Commit

Permalink
add http mock
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaobing.meng authored and menglingwei committed Dec 11, 2021
1 parent 3dce9c8 commit cb649e7
Show file tree
Hide file tree
Showing 6 changed files with 229 additions and 55 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.idea/
vendor
oss/*.log
12 changes: 12 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module github.com/aliyun/aliyun-oss-go-sdk

go 1.11

require (
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1263
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f
github.com/magiconair/properties v1.8.5 // indirect
github.com/satori/go.uuid v1.2.0 // indirect
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
)
56 changes: 56 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1263 h1:4LvG//QeqQLO8teWN8XQYEE2kNnor+FyCQtpfYdX1T4=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1263/go.mod h1:9CMdKNL3ynIGPpfTcdwTvIm8SGuAZYYC4jFVSSvE1YQ=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f h1:ZNv7On9kyUzm7fvRZumSyy/IUiSC7AzL0I1jKKtwooA=
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denverdino/aliyungo v0.0.0-20210910083501-4f11020c0bfb h1:w0Y6orfArgN0EGUOXqa3heTmPwUzZS9oV79ddQqkVP4=
github.com/denverdino/aliyungo v0.0.0-20210910083501-4f11020c0bfb/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
108 changes: 53 additions & 55 deletions oss/bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import (
"strings"
"time"

"github.com/baiyubin/aliyun-sts-go-sdk/sts"

. "gopkg.in/check.v1"
)

Expand Down Expand Up @@ -2060,59 +2058,59 @@ func (s *OssBucketSuite) TestGetConfig(c *C) {
c.Assert(bucket.GetConfig().IsEnableMD5, Equals, false)
}

func (s *OssBucketSuite) TestSTSToken(c *C) {
objectName := objectNamePrefix + RandStr(8)
objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"

stsClient := sts.NewClient(stsaccessID, stsaccessKey, stsARN, "oss_test_sess")

resp, err := stsClient.AssumeRole(1800)
c.Assert(err, IsNil)

client, err := New(endpoint, resp.Credentials.AccessKeyId, resp.Credentials.AccessKeySecret,
SecurityToken(resp.Credentials.SecurityToken))
c.Assert(err, IsNil)

bucket, err := client.Bucket(bucketName)
c.Assert(err, IsNil)

// Put
err = bucket.PutObject(objectName, strings.NewReader(objectValue))
c.Assert(err, IsNil)

// Get
body, err := bucket.GetObject(objectName)
c.Assert(err, IsNil)
str, err := readBody(body)
c.Assert(err, IsNil)
c.Assert(str, Equals, objectValue)

// List
lor, err := bucket.ListObjects()
c.Assert(err, IsNil)
testLogger.Println("Objects:", lor.Objects)

// Put with URL
signedURL, err := bucket.SignURL(objectName, HTTPPut, 3600)
c.Assert(err, IsNil)

err = bucket.PutObjectWithURL(signedURL, strings.NewReader(objectValue))
c.Assert(err, IsNil)

// Get with URL
signedURL, err = bucket.SignURL(objectName, HTTPGet, 3600)
c.Assert(err, IsNil)

body, err = bucket.GetObjectWithURL(signedURL)
c.Assert(err, IsNil)
str, err = readBody(body)
c.Assert(err, IsNil)
c.Assert(str, Equals, objectValue)

// Delete
err = bucket.DeleteObject(objectName)
c.Assert(err, IsNil)
}
//func (s *OssBucketSuite) TestSTSToken(c *C) {
// objectName := objectNamePrefix + RandStr(8)
// objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"
//
// stsClient := sts.NewClient(stsaccessID, stsaccessKey, stsARN, "oss_test_sess")
//
// resp, err := stsClient.AssumeRole(1800)
// c.Assert(err, IsNil)
//
// client, err := New(endpoint, resp.Credentials.AccessKeyId, resp.Credentials.AccessKeySecret,
// SecurityToken(resp.Credentials.SecurityToken))
// c.Assert(err, IsNil)
//
// bucket, err := client.Bucket(bucketName)
// c.Assert(err, IsNil)
//
// // Put
// err = bucket.PutObject(objectName, strings.NewReader(objectValue))
// c.Assert(err, IsNil)
//
// // Get
// body, err := bucket.GetObject(objectName)
// c.Assert(err, IsNil)
// str, err := readBody(body)
// c.Assert(err, IsNil)
// c.Assert(str, Equals, objectValue)
//
// // List
// lor, err := bucket.ListObjects()
// c.Assert(err, IsNil)
// testLogger.Println("Objects:", lor.Objects)
//
// // Put with URL
// signedURL, err := bucket.SignURL(objectName, HTTPPut, 3600)
// c.Assert(err, IsNil)
//
// err = bucket.PutObjectWithURL(signedURL, strings.NewReader(objectValue))
// c.Assert(err, IsNil)
//
// // Get with URL
// signedURL, err = bucket.SignURL(objectName, HTTPGet, 3600)
// c.Assert(err, IsNil)
//
// body, err = bucket.GetObjectWithURL(signedURL)
// c.Assert(err, IsNil)
// str, err = readBody(body)
// c.Assert(err, IsNil)
// c.Assert(str, Equals, objectValue)
//
// // Delete
// err = bucket.DeleteObject(objectName)
// c.Assert(err, IsNil)
//}

func (s *OssBucketSuite) TestSTSTonekNegative(c *C) {
objectName := objectNamePrefix + RandStr(8)
Expand Down
4 changes: 4 additions & 0 deletions oss/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ func (client Client) Bucket(bucketName string) (*Bucket, error) {
}, nil
}

func (client Client) SetTransport(roundTripper http.RoundTripper) {
client.Conn.client.Transport = roundTripper
}

// CreateBucket creates a bucket.
//
// bucketName the bucket name, it's globably unique and immutable. The bucket name can only consist of lowercase letters, numbers and dash ('-').
Expand Down
101 changes: 101 additions & 0 deletions oss/client_transport_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package oss

import (
"bytes"
"io/ioutil"
"net/http"
"testing"
)

func Test_ClientTransPort_CreateBucket(t *testing.T) {
t.Logf("ok")

rt := &tripper{}
rt.AddResponse(200)

client, err := New("cn-beijing", "abc", "dfe")
if err != nil {
t.Fatalf("New Error %v", err)
}

if client.HTTPClient == nil {
client.HTTPClient = &http.Client{
Transport: rt,
}
} else {
client.HTTPClient.Transport = rt
}
client.SetTransport(rt)

// Create Bucket
err = client.CreateBucket("abc")
if err != nil {
t.Fatalf("CreateBucket Error %v", err)
} else {
t.Logf("CreateBucket Success")
}

}

func Test_ClientTransPort_DeleteBucket(t *testing.T) {
t.Logf("ok")

rt := &tripper{}
rt.AddResponse(204)

client, err := New("cn-beijing", "abc", "dfe")
if err != nil {
t.Fatalf("New Error %v", err)
}

if client.HTTPClient == nil {
client.HTTPClient = &http.Client{
Transport: rt,
}
} else {
client.HTTPClient.Transport = rt
}
client.SetTransport(rt)

// Delete Bucket
err = client.DeleteBucket("abc")
if err != nil {
t.Fatalf("DeleteBucket Error %v", err)
} else {
t.Logf("DeleteBucket Success")
}
}

type tripper struct {
req int
reqBodies [][]byte
responseCodes []int
}

func (r *tripper) RoundTrip(req *http.Request) (*http.Response, error) {
defer func() {
r.req++
}()

if req.Body != nil {
dt, err := ioutil.ReadAll(req.Body)
if err != nil {
return nil, err
}
r.reqBodies = append(r.reqBodies, dt)
}

code := http.StatusOK
if r.req < len(r.responseCodes) {
code = r.responseCodes[r.req]
}

return &http.Response{
StatusCode: code,
Body: ioutil.NopCloser(bytes.NewBufferString("{}")),
}, nil
}

func (r *tripper) AddResponse(code int) {
r.responseCodes = append(r.responseCodes, code)
}

0 comments on commit cb649e7

Please sign in to comment.