|
@@ -5,11 +5,13 @@
|
|
|
package oss
|
|
package oss
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "encoding/json"
|
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
|
"log"
|
|
"log"
|
|
|
"math/rand"
|
|
"math/rand"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"os"
|
|
"os"
|
|
|
|
|
+ "reflect"
|
|
|
"runtime"
|
|
"runtime"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
"strings"
|
|
"strings"
|
|
@@ -45,9 +47,9 @@ var (
|
|
|
stsARN = os.Getenv("OSS_TEST_STS_ARN")
|
|
stsARN = os.Getenv("OSS_TEST_STS_ARN")
|
|
|
|
|
|
|
|
// Credential
|
|
// Credential
|
|
|
- credentialAccessID = os.Getenv("OSS_CREDENTIAL_KEY_ID")
|
|
|
|
|
- credentialAccessKey = os.Getenv("OSS_CREDENTIAL_KEY_SECRET")
|
|
|
|
|
- credentialUID = os.Getenv("OSS_CREDENTIAL_UID")
|
|
|
|
|
|
|
+ credentialAccessID = os.Getenv("OSS_CREDENTIAL_KEY_ID")
|
|
|
|
|
+ credentialAccessKey = os.Getenv("OSS_CREDENTIAL_KEY_SECRET")
|
|
|
|
|
+ credentialUID = os.Getenv("OSS_CREDENTIAL_UID")
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -2448,14 +2450,14 @@ func (s *OssBucketSuite) TestGetBucketVersioning(c *C) {
|
|
|
forceDeleteBucket(client, bucketName, c)
|
|
forceDeleteBucket(client, bucketName, c)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (s *OssClientSuite) TestBucketPolicy(c *C){
|
|
|
|
|
|
|
+func (s *OssClientSuite) TestBucketPolicy(c *C) {
|
|
|
client, err := New(endpoint, accessID, accessKey)
|
|
client, err := New(endpoint, accessID, accessKey)
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
|
|
|
|
|
|
bucketName := bucketNamePrefix + randLowStr(5)
|
|
bucketName := bucketNamePrefix + randLowStr(5)
|
|
|
err = client.CreateBucket(bucketName)
|
|
err = client.CreateBucket(bucketName)
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
var responseHeader http.Header
|
|
var responseHeader http.Header
|
|
|
ret, err := client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
|
|
ret, err := client.GetBucketPolicy(bucketName, GetResponseHeader(&responseHeader))
|
|
|
c.Assert(err, NotNil)
|
|
c.Assert(err, NotNil)
|
|
@@ -2529,7 +2531,7 @@ func (s *OssClientSuite) TestBucketPolicyNegative(c *C) {
|
|
|
}`
|
|
}`
|
|
|
err = client.SetBucketPolicy(bucketName, errPolicy, GetResponseHeader(&responseHeader))
|
|
err = client.SetBucketPolicy(bucketName, errPolicy, GetResponseHeader(&responseHeader))
|
|
|
c.Assert(err, NotNil)
|
|
c.Assert(err, NotNil)
|
|
|
- testLogger.Println("err:",err)
|
|
|
|
|
|
|
+ testLogger.Println("err:", err)
|
|
|
requestId = GetRequestId(responseHeader)
|
|
requestId = GetRequestId(responseHeader)
|
|
|
c.Assert(len(requestId) > 0, Equals, true)
|
|
c.Assert(len(requestId) > 0, Equals, true)
|
|
|
|
|
|
|
@@ -2538,7 +2540,7 @@ func (s *OssClientSuite) TestBucketPolicyNegative(c *C) {
|
|
|
|
|
|
|
|
bucketNameEmpty := bucketNamePrefix + randLowStr(5)
|
|
bucketNameEmpty := bucketNamePrefix + randLowStr(5)
|
|
|
client.DeleteBucket(bucketNameEmpty)
|
|
client.DeleteBucket(bucketNameEmpty)
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
err = client.DeleteBucketPolicy(bucketNameEmpty, GetResponseHeader(&responseHeader))
|
|
err = client.DeleteBucketPolicy(bucketNameEmpty, GetResponseHeader(&responseHeader))
|
|
|
c.Assert(err, NotNil)
|
|
c.Assert(err, NotNil)
|
|
|
requestId = GetRequestId(responseHeader)
|
|
requestId = GetRequestId(responseHeader)
|
|
@@ -2556,7 +2558,7 @@ func (s *OssClientSuite) TestSetBucketRequestPayment(c *C) {
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
|
|
|
|
|
|
reqPayConf := RequestPaymentConfiguration{
|
|
reqPayConf := RequestPaymentConfiguration{
|
|
|
- Payer:"Requester",
|
|
|
|
|
|
|
+ Payer: "Requester",
|
|
|
}
|
|
}
|
|
|
err = client.SetBucketRequestPayment(bucketName, reqPayConf)
|
|
err = client.SetBucketRequestPayment(bucketName, reqPayConf)
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
@@ -2578,7 +2580,7 @@ func (s *OssClientSuite) TestSetBucketRequestPaymentNegative(c *C) {
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
|
|
|
|
|
|
reqPayConf := RequestPaymentConfiguration{
|
|
reqPayConf := RequestPaymentConfiguration{
|
|
|
- Payer:"Requesterttttt", // this is a error configuration
|
|
|
|
|
|
|
+ Payer: "Requesterttttt", // this is a error configuration
|
|
|
}
|
|
}
|
|
|
err = client.SetBucketRequestPayment(bucketName, reqPayConf)
|
|
err = client.SetBucketRequestPayment(bucketName, reqPayConf)
|
|
|
c.Assert(err, NotNil)
|
|
c.Assert(err, NotNil)
|
|
@@ -2590,3 +2592,123 @@ func (s *OssClientSuite) TestSetBucketRequestPaymentNegative(c *C) {
|
|
|
client.DeleteBucket(bucketName)
|
|
client.DeleteBucket(bucketName)
|
|
|
c.Assert(err, IsNil)
|
|
c.Assert(err, IsNil)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func (s *OssClientSuite) TestBucketQos(c *C) {
|
|
|
|
|
+ client, err := New(endpoint, accessID, accessKey)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ ret, err := client.GetUserQoSInfo()
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+ testLogger.Println("QosInfo:", ret)
|
|
|
|
|
+
|
|
|
|
|
+ bucketName := bucketNamePrefix + randLowStr(5)
|
|
|
|
|
+ _ = client.DeleteBucket(bucketName)
|
|
|
|
|
+
|
|
|
|
|
+ err = client.CreateBucket(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ _, err = client.GetBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, NotNil)
|
|
|
|
|
+
|
|
|
|
|
+ // case 1 set BucketQoSConfiguration every member
|
|
|
|
|
+ five := 5
|
|
|
|
|
+ four := 4
|
|
|
|
|
+ three := 3
|
|
|
|
|
+ qosConf := BucketQoSConfiguration{
|
|
|
|
|
+ TotalUploadBandwidth: &five,
|
|
|
|
|
+ IntranetUploadBandwidth: &four,
|
|
|
|
|
+ ExtranetUploadBandwidth: &four,
|
|
|
|
|
+ TotalDownloadBandwidth: &four,
|
|
|
|
|
+ IntranetDownloadBandwidth: &four,
|
|
|
|
|
+ ExtranetDownloadBandwidth: &four,
|
|
|
|
|
+ TotalQPS: &five,
|
|
|
|
|
+ IntranetQPS: &three,
|
|
|
|
|
+ ExtranetQPS: &three,
|
|
|
|
|
+ }
|
|
|
|
|
+ var responseHeader http.Header
|
|
|
|
|
+ err = client.SetBucketQoSInfo(bucketName, qosConf, GetResponseHeader(&responseHeader))
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+ requestId := GetRequestId(responseHeader)
|
|
|
|
|
+ c.Assert(len(requestId) > 0, Equals, true)
|
|
|
|
|
+
|
|
|
|
|
+ // wait a moment for configuration effect
|
|
|
|
|
+ time.Sleep(time.Second)
|
|
|
|
|
+
|
|
|
|
|
+ retQos, err := client.GetBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ // set qosConf default value
|
|
|
|
|
+ qosConf.XMLName.Local = "QoSConfiguration"
|
|
|
|
|
+ c.Assert(struct2string(retQos, c), Equals, struct2string(qosConf, c))
|
|
|
|
|
+
|
|
|
|
|
+ // case 2 set BucketQoSConfiguration not every member
|
|
|
|
|
+ qosConfNo := BucketQoSConfiguration{
|
|
|
|
|
+ TotalUploadBandwidth: &five,
|
|
|
|
|
+ IntranetUploadBandwidth: &four,
|
|
|
|
|
+ ExtranetUploadBandwidth: &four,
|
|
|
|
|
+ TotalDownloadBandwidth: &four,
|
|
|
|
|
+ IntranetDownloadBandwidth: &four,
|
|
|
|
|
+ ExtranetDownloadBandwidth: &four,
|
|
|
|
|
+ TotalQPS: &five,
|
|
|
|
|
+ }
|
|
|
|
|
+ err = client.SetBucketQoSInfo(bucketName, qosConfNo)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ // wait a moment for configuration effect
|
|
|
|
|
+ time.Sleep(time.Second)
|
|
|
|
|
+
|
|
|
|
|
+ retQos, err = client.GetBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ // set qosConfNo default value
|
|
|
|
|
+ qosConfNo.XMLName.Local = "QoSConfiguration"
|
|
|
|
|
+ defNum := -1
|
|
|
|
|
+ qosConfNo.IntranetQPS = &defNum
|
|
|
|
|
+ qosConfNo.ExtranetQPS = &defNum
|
|
|
|
|
+ c.Assert(struct2string(retQos, c), Equals, struct2string(qosConfNo, c))
|
|
|
|
|
+
|
|
|
|
|
+ err = client.DeleteBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ // wait a moment for configuration effect
|
|
|
|
|
+ time.Sleep(time.Second)
|
|
|
|
|
+
|
|
|
|
|
+ _, err = client.GetBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, NotNil)
|
|
|
|
|
+
|
|
|
|
|
+ // this is a error qos configuration
|
|
|
|
|
+ to := *ret.TotalUploadBandwidth + 2
|
|
|
|
|
+ qosErrConf := BucketQoSConfiguration{
|
|
|
|
|
+ TotalUploadBandwidth: &to, // this exceed user TotalUploadBandwidth
|
|
|
|
|
+ IntranetUploadBandwidth: &four,
|
|
|
|
|
+ ExtranetUploadBandwidth: &four,
|
|
|
|
|
+ TotalDownloadBandwidth: &four,
|
|
|
|
|
+ IntranetDownloadBandwidth: &four,
|
|
|
|
|
+ ExtranetDownloadBandwidth: &four,
|
|
|
|
|
+ TotalQPS: &three,
|
|
|
|
|
+ IntranetQPS: &three,
|
|
|
|
|
+ ExtranetQPS: &three,
|
|
|
|
|
+ }
|
|
|
|
|
+ err = client.SetBucketQoSInfo(bucketName, qosErrConf)
|
|
|
|
|
+ c.Assert(err, NotNil)
|
|
|
|
|
+
|
|
|
|
|
+ err = client.DeleteBucketQosInfo(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+
|
|
|
|
|
+ err = client.DeleteBucket(bucketName)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// struct to string
|
|
|
|
|
+func struct2string(obj interface{}, c *C) string {
|
|
|
|
|
+ t := reflect.TypeOf(obj)
|
|
|
|
|
+ v := reflect.ValueOf(obj)
|
|
|
|
|
+
|
|
|
|
|
+ var data = make(map[string]interface{})
|
|
|
|
|
+ for i := 0; i < t.NumField(); i++ {
|
|
|
|
|
+ data[t.Field(i).Name] = v.Field(i).Interface()
|
|
|
|
|
+ }
|
|
|
|
|
+ str, err := json.Marshal(data)
|
|
|
|
|
+ c.Assert(err, IsNil)
|
|
|
|
|
+ return string(str)
|
|
|
|
|
+}
|