Преглед изворни кода

add versioning for IsObjectExist

taowei.wtw пре 6 година
родитељ
комит
5a702ca599
5 измењених фајлова са 163 додато и 14 уклоњено
  1. 2 2
      oss/bucket.go
  2. 84 3
      oss/bucket_test.go
  3. 71 7
      oss/client_test.go
  4. 4 0
      oss/download_test.go
  5. 2 2
      oss/type.go

+ 2 - 2
oss/bucket.go

@@ -542,8 +542,8 @@ func (bucket Bucket) DeleteObjectVersions(objectVersions []DeleteObject, options
 //
 //
 // error    it's nil if no error, otherwise it's an error object.
 // error    it's nil if no error, otherwise it's an error object.
 //
 //
-func (bucket Bucket) IsObjectExist(objectKey string) (bool, error) {
-	_, err := bucket.GetObjectMeta(objectKey)
+func (bucket Bucket) IsObjectExist(objectKey string, options ...Option) (bool, error) {
+	_, err := bucket.GetObjectMeta(objectKey, options...)
 	if err == nil {
 	if err == nil {
 		return true, nil
 		return true, nil
 	}
 	}

+ 84 - 3
oss/bucket_test.go

@@ -3023,10 +3023,12 @@ func (s *OssBucketSuite) TestVersioningBucketVerison(c *C) {
 	c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
 	c.Assert(bucketResult.BucketInfo.Versioning, Equals, "")
 
 
 	// put bucket version:enabled
 	// put bucket version:enabled
+	var respHeader http.Header
 	var versioningConfig VersioningConfig
 	var versioningConfig VersioningConfig
 	versioningConfig.Status = string(VersionEnabled)
 	versioningConfig.Status = string(VersionEnabled)
-	err = client.SetBucketVersioning(bucketName, versioningConfig)
+	err = client.SetBucketVersioning(bucketName, versioningConfig, GetResponseHeader(&respHeader))
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
 
 
 	bucketResult, err = client.GetBucketInfo(bucketName)
 	bucketResult, err = client.GetBucketInfo(bucketName)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
@@ -4318,6 +4320,85 @@ func (s *OssBucketSuite) TestVersioningObjectTagging(c *C) {
 	forceDeleteBucket(client, bucketName, c)
 	forceDeleteBucket(client, bucketName, c)
 }
 }
 
 
+func (s *OssBucketSuite) TestVersioningIsObjectExist(c *C) {
+	// create a bucket with default proprety
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + randLowStr(6)
+	err = client.CreateBucket(bucketName)
+	c.Assert(err, IsNil)
+	bucket, err := client.Bucket(bucketName)
+
+	// put bucket version:enabled
+	var versioningConfig VersioningConfig
+	versioningConfig.Status = string(VersionEnabled)
+	err = client.SetBucketVersioning(bucketName, versioningConfig)
+	c.Assert(err, IsNil)
+
+	// put object v1
+	objectName := objectNamePrefix + randStr(8)
+	contextV1 := randStr(100)
+	versionIdV1 := ""
+
+	var respHeader http.Header
+	err = bucket.PutObject(objectName, strings.NewReader(contextV1), GetResponseHeader(&respHeader))
+	c.Assert(err, IsNil)
+	versionIdV1 = GetVersionId(respHeader)
+	c.Assert(len(versionIdV1) > 0, Equals, true)
+
+	// put object v2
+	contextV2 := randStr(200)
+	versionIdV2 := ""
+	err = bucket.PutObject(objectName, strings.NewReader(contextV2), GetResponseHeader(&respHeader))
+	c.Assert(err, IsNil)
+	versionIdV2 = GetVersionId(respHeader)
+	c.Assert(len(versionIdV2) > 0, Equals, true)
+
+	// check v1 and v2
+	c.Assert(versionIdV1 != versionIdV2, Equals, true)
+
+	// check default exist
+	exist, err := bucket.IsObjectExist(objectName)
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, true)
+
+	// check object v1 exist
+	exist, err = bucket.IsObjectExist(objectName, VersionId(versionIdV1))
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, true)
+
+	// check object v2 exist
+	exist, err = bucket.IsObjectExist(objectName, VersionId(versionIdV2))
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, true)
+
+	// rm v2
+	err = bucket.DeleteObject(objectName, VersionId(versionIdV2))
+	c.Assert(err, IsNil)
+
+	// check object v2 not exist
+	exist, err = bucket.IsObjectExist(objectName, VersionId(versionIdV2))
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, false)
+
+	// rm default
+	err = bucket.DeleteObject(objectName)
+	c.Assert(err, IsNil)
+
+	// check default exist
+	exist, err = bucket.IsObjectExist(objectName)
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, false)
+
+	// check v1 exist
+	exist, err = bucket.IsObjectExist(objectName, VersionId(versionIdV1))
+	c.Assert(err, IsNil)
+	c.Assert(exist, Equals, true)
+
+	forceDeleteBucket(client, bucketName, c)
+}
+
 func (s *OssBucketSuite) TestOptionsMethod(c *C) {
 func (s *OssBucketSuite) TestOptionsMethod(c *C) {
 	// create a bucket with default proprety
 	// create a bucket with default proprety
 	client, err := New(endpoint, accessID, accessKey)
 	client, err := New(endpoint, accessID, accessKey)
@@ -4330,7 +4411,7 @@ func (s *OssBucketSuite) TestOptionsMethod(c *C) {
 	bucket, err := client.Bucket(bucketName)
 	bucket, err := client.Bucket(bucketName)
 
 
 	// put bucket cors
 	// put bucket cors
-	var rule1 = CORSRule{
+	var rule = CORSRule{
 		AllowedOrigin: []string{"www.aliyun.com"},
 		AllowedOrigin: []string{"www.aliyun.com"},
 		AllowedMethod: []string{"PUT", "GET", "POST"},
 		AllowedMethod: []string{"PUT", "GET", "POST"},
 		AllowedHeader: []string{"x-oss-meta-author"},
 		AllowedHeader: []string{"x-oss-meta-author"},
@@ -4339,7 +4420,7 @@ func (s *OssBucketSuite) TestOptionsMethod(c *C) {
 	}
 	}
 
 
 	// set cors
 	// set cors
-	err = client.SetBucketCORS(bucketName, []CORSRule{rule1})
+	err = client.SetBucketCORS(bucketName, []CORSRule{rule})
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
 
 
 	// bucket options success
 	// bucket options success

+ 71 - 7
oss/client_test.go

@@ -414,10 +414,13 @@ func (s *OssClientSuite) TestListBucket(c *C) {
 	err = client.CreateBucket(bucketNameLbThree)
 	err = client.CreateBucket(bucketNameLbThree)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
 
 
-	// ListBuckets, specified prefix
-	lbr, err := client.ListBuckets(Prefix(prefix), MaxKeys(2))
+    // ListBuckets, specified prefix
+    var respHeader http.Header
+    lbr, err := client.ListBuckets(Prefix(prefix), MaxKeys(2),GetResponseHeader(&respHeader))
+    c.Assert(GetRequestId(respHeader) != "", Equals, true)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
-	c.Assert(len(lbr.Buckets), Equals, 2)
+    c.Assert(len(lbr.Buckets), Equals, 2)
+    
 
 
 	// ListBuckets, specified max keys
 	// ListBuckets, specified max keys
 	lbr, err = client.ListBuckets(MaxKeys(2))
 	lbr, err = client.ListBuckets(MaxKeys(2))
@@ -1939,8 +1942,10 @@ func (s *OssClientSuite) TestBucketEncyptionPutAndGetAndDelete(c *C) {
 	c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
 	c.Assert(encryptionRule.SSEDefault.KMSMasterKeyID, Equals, getResult.SSEDefault.KMSMasterKeyID)
 
 
 	// delete bucket encyption
 	// delete bucket encyption
-	err = client.DeleteBucketEncryption(bucketName)
+	err = client.DeleteBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
+	requestId = GetRequestId(responseHeader)
+	c.Assert(len(requestId) > 0, Equals, true)
 
 
 	// GetBucketEncryption failure
 	// GetBucketEncryption failure
 	_, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
 	_, err = client.GetBucketEncryption(bucketName, GetResponseHeader(&responseHeader))
@@ -2078,11 +2083,14 @@ func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
 	err = client.CreateBucket(bucketName)
 	err = client.CreateBucket(bucketName)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
 
 
+	var respHeader http.Header
+
 	// Bucket Tagging
 	// Bucket Tagging
 	var tagging Tagging
 	var tagging Tagging
 	tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
 	tagging.Tags = []Tag{Tag{Key: "testkey2", Value: "testvalue2"}}
-	err = client.SetBucketTagging(bucketName, tagging)
+	err = client.SetBucketTagging(bucketName, tagging, GetResponseHeader(&respHeader))
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
 
 
 	getResult, err := client.GetBucketTagging(bucketName)
 	getResult, err := client.GetBucketTagging(bucketName)
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
@@ -2090,10 +2098,13 @@ func (s *OssClientSuite) TestBucketTaggingOperation(c *C) {
 	c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
 	c.Assert(getResult.Tags[0].Value, Equals, tagging.Tags[0].Value)
 
 
 	// delete BucketTagging
 	// delete BucketTagging
-	err = client.DeleteBucketTagging(bucketName)
+	err = client.DeleteBucketTagging(bucketName, GetResponseHeader(&respHeader))
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
-	getResult, err = client.GetBucketTagging(bucketName)
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
+
+	getResult, err = client.GetBucketTagging(bucketName, GetResponseHeader(&respHeader))
 	c.Assert(err, IsNil)
 	c.Assert(err, IsNil)
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
 	c.Assert(len(getResult.Tags), Equals, 0)
 	c.Assert(len(getResult.Tags), Equals, 0)
 
 
 	err = client.DeleteBucket(bucketName)
 	err = client.DeleteBucket(bucketName)
@@ -2127,3 +2138,56 @@ func (s *OssClientSuite) TestListBucketsTagging(c *C) {
 	client.DeleteBucket(bucketName1)
 	client.DeleteBucket(bucketName1)
 	client.DeleteBucket(bucketName2)
 	client.DeleteBucket(bucketName2)
 }
 }
+
+func (s *OssClientSuite) TestGetBucketStat(c *C) {
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + randLowStr(5)
+	err = client.CreateBucket(bucketName)
+	c.Assert(err, IsNil)
+
+	bucket, err := client.Bucket(bucketName)
+	c.Assert(err, IsNil)
+
+	// put object
+	objectName := objectNamePrefix + randLowStr(5)
+	err = bucket.PutObject(objectName, strings.NewReader(randStr(10)))
+	c.Assert(err, IsNil)
+
+	bucket.DeleteObject(objectName)
+	err = bucket.PutObject(objectName, strings.NewReader(randStr(10)))
+	c.Assert(err, IsNil)
+	bucket.DeleteObject(objectName)
+
+	_, err = client.GetBucketStat(bucketName)
+	c.Assert(err, IsNil)
+
+	client.DeleteBucket(bucketName)
+}
+
+func (s *OssBucketSuite) TestGetBucketVersioning(c *C) {
+	// create a bucket with default proprety
+	client, err := New(endpoint, accessID, accessKey)
+	c.Assert(err, IsNil)
+
+	bucketName := bucketNamePrefix + randLowStr(6)
+
+	var respHeader http.Header
+	err = client.CreateBucket(bucketName, GetResponseHeader(&respHeader))
+	c.Assert(err, IsNil)
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
+
+	// put bucket version:enabled
+	var versioningConfig VersioningConfig
+	versioningConfig.Status = string(VersionEnabled)
+	err = client.SetBucketVersioning(bucketName, versioningConfig)
+	c.Assert(err, IsNil)
+
+	// get bucket version success
+	versioningResult, err := client.GetBucketVersioning(bucketName, GetResponseHeader(&respHeader))
+	c.Assert(versioningResult.Status, Equals, "Enabled")
+	c.Assert(GetRequestId(respHeader) != "", Equals, true)
+
+	forceDeleteBucket(client, bucketName, c)
+}

+ 4 - 0
oss/download_test.go

@@ -855,6 +855,10 @@ func (s *OssDownloadSuite) TestVersioningDownloadWithCheckPoint(c *C) {
 	os.Remove(newFile)
 	os.Remove(newFile)
 	downloadPartHooker = DownErrorHooker
 	downloadPartHooker = DownErrorHooker
 	options = []Option{CheckpointDir(true, "./"), VersionId(versionId)}
 	options = []Option{CheckpointDir(true, "./"), VersionId(versionId)}
+
+	strPayer := getPayer(options)
+	c.Assert(strPayer, Equals, "")
+
 	err = bucket.DownloadFile(objectName, newFile, 100*1024, options...)
 	err = bucket.DownloadFile(objectName, newFile, 100*1024, options...)
 	c.Assert(err, NotNil)
 	c.Assert(err, NotNil)
 	c.Assert(err.Error(), Equals, "ErrorHooker")
 	c.Assert(err.Error(), Equals, "ErrorHooker")

+ 2 - 2
oss/type.go

@@ -769,7 +769,7 @@ type GetBucketTaggingResult Tagging
 type BucketStat struct {
 type BucketStat struct {
 	XMLName              xml.Name `xml:"BucketStat"`
 	XMLName              xml.Name `xml:"BucketStat"`
 	Storage              int64    `xml:"Storage"`
 	Storage              int64    `xml:"Storage"`
-	ObjectCount          int64    `xml:ObjectCount`
-	MultipartUploadCount int64    `xml:MultipartUploadCount`
+	ObjectCount          int64    `xml:"ObjectCount"`
+	MultipartUploadCount int64    `xml:"MultipartUploadCount"`
 }
 }
 type GetBucketStatResult BucketStat
 type GetBucketStatResult BucketStat