You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
8.6 KiB
292 lines
8.6 KiB
package cos
|
|
|
|
import (
|
|
"context"
|
|
"encoding/xml"
|
|
"fmt"
|
|
"net/http"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestBucketService_PutInventory(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
opt := &BucketPutInventoryOptions{
|
|
XMLName: xml.Name{Local: "InventoryConfiguration"},
|
|
ID: "list1",
|
|
IsEnabled: "True",
|
|
IncludedObjectVersions: "All",
|
|
Filter: &BucketInventoryFilter{"myPrefix"},
|
|
Schedule: &BucketInventorySchedule{"Daily"},
|
|
Destination: &BucketInventoryDestination{
|
|
Bucket: "qcs::cos:ap-guangzhou::examplebucket-1250000000",
|
|
AccountId: "100000000001",
|
|
Prefix: "list1",
|
|
Format: "CSV",
|
|
Encryption: &BucketInventoryEncryption{},
|
|
},
|
|
OptionalFields: &BucketInventoryOptionalFields{
|
|
BucketInventoryFields: []string{
|
|
"Size",
|
|
"LastModifiedDate",
|
|
"ETag",
|
|
"StorageClass",
|
|
"IsMultipartUploaded",
|
|
"ReplicationStatus",
|
|
},
|
|
},
|
|
}
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, http.MethodPut)
|
|
vs := values{
|
|
"inventory": "",
|
|
"id": "list1",
|
|
}
|
|
testFormValues(t, r, vs)
|
|
|
|
body := &BucketPutInventoryOptions{}
|
|
xml.NewDecoder(r.Body).Decode(body)
|
|
want := opt
|
|
if !reflect.DeepEqual(want, body) {
|
|
t.Fatalf("Bucket.PutInventory request\n body: %+v\n, want %+v\n", body, want)
|
|
}
|
|
})
|
|
|
|
_, err := client.Bucket.PutInventory(context.Background(), "list1", opt)
|
|
if err != nil {
|
|
t.Fatalf("Bucket.PutInventory failed, error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestBucketService_GetInventory(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, http.MethodGet)
|
|
vs := values{
|
|
"inventory": "",
|
|
"id": "list1",
|
|
}
|
|
testFormValues(t, r, vs)
|
|
|
|
fmt.Fprint(w, `<InventoryConfiguration>
|
|
<Id>list1</Id>
|
|
<IsEnabled>True</IsEnabled>
|
|
<Destination>
|
|
<COSBucketDestination>
|
|
<Format>CSV</Format>
|
|
<Bucket>qcs::cos:ap-guangzhou::examplebucket-1250000000</Bucket>
|
|
<Prefix>list1</Prefix>
|
|
<AccountId>100000000001</AccountId>
|
|
</COSBucketDestination>
|
|
</Destination>
|
|
<Schedule>
|
|
<Frequency>Daily</Frequency>
|
|
</Schedule>
|
|
<Filter>
|
|
<Prefix>myPrefix</Prefix>
|
|
</Filter>
|
|
<IncludedObjectVersions>All</IncludedObjectVersions>
|
|
<OptionalFields>
|
|
<Field>Size</Field>
|
|
<Field>LastModifiedDate</Field>
|
|
<Field>ETag</Field>
|
|
<Field>StorageClass</Field>
|
|
<Field>IsMultipartUploaded</Field>
|
|
<Field>ReplicationStatus</Field>
|
|
</OptionalFields>
|
|
</InventoryConfiguration>`)
|
|
})
|
|
res, _, err := client.Bucket.GetInventory(context.Background(), "list1")
|
|
if err != nil {
|
|
t.Fatalf("Bucket.GetInventory failed, error: %v", err)
|
|
}
|
|
want := &BucketGetInventoryResult{
|
|
XMLName: xml.Name{Local: "InventoryConfiguration"},
|
|
ID: "list1",
|
|
IsEnabled: "True",
|
|
IncludedObjectVersions: "All",
|
|
Filter: &BucketInventoryFilter{"myPrefix"},
|
|
Schedule: &BucketInventorySchedule{"Daily"},
|
|
Destination: &BucketInventoryDestination{
|
|
Bucket: "qcs::cos:ap-guangzhou::examplebucket-1250000000",
|
|
AccountId: "100000000001",
|
|
Prefix: "list1",
|
|
Format: "CSV",
|
|
},
|
|
OptionalFields: &BucketInventoryOptionalFields{
|
|
BucketInventoryFields: []string{
|
|
"Size",
|
|
"LastModifiedDate",
|
|
"ETag",
|
|
"StorageClass",
|
|
"IsMultipartUploaded",
|
|
"ReplicationStatus",
|
|
},
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(res, want) {
|
|
t.Errorf("Bucket.GetInventory returned\n%+v, want\n%+v", res, want)
|
|
}
|
|
}
|
|
|
|
func TestBucketService_ListInventory(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, http.MethodGet)
|
|
vs := values{
|
|
"inventory": "",
|
|
}
|
|
testFormValues(t, r, vs)
|
|
fmt.Fprint(w, `<ListInventoryConfigurationResult>
|
|
<InventoryConfiguration>
|
|
<Id>list1</Id>
|
|
<IsEnabled>True</IsEnabled>
|
|
<Destination>
|
|
<COSBucketDestination>
|
|
<Format>CSV</Format>
|
|
<AccountId>1250000000</AccountId>
|
|
<Bucket>qcs::cos:ap-beijing::examplebucket-1250000000</Bucket>
|
|
<Prefix>list1</Prefix>
|
|
<Encryption>
|
|
<SSE-COS/>
|
|
</Encryption>
|
|
</COSBucketDestination>
|
|
</Destination>
|
|
<Schedule>
|
|
<Frequency>Daily</Frequency>
|
|
</Schedule>
|
|
<Filter>
|
|
<Prefix>myPrefix</Prefix>
|
|
</Filter>
|
|
<IncludedObjectVersions>All</IncludedObjectVersions>
|
|
<OptionalFields>
|
|
<Field>Size</Field>
|
|
<Field>LastModifiedDate</Field>
|
|
<Field>ETag</Field>
|
|
<Field>StorageClass</Field>
|
|
<Field>IsMultipartUpload</Field>
|
|
<Field>ReplicationStatus</Field>
|
|
</OptionalFields>
|
|
</InventoryConfiguration>
|
|
<InventoryConfiguration>
|
|
<Id>list2</Id>
|
|
<IsEnabled>True</IsEnabled>
|
|
<Destination>
|
|
<COSBucketDestination>
|
|
<Format>CSV</Format>
|
|
<AccountId>1250000000</AccountId>
|
|
<Bucket>qcs::cos:ap-beijing::examplebucket-1250000000</Bucket>
|
|
<Prefix>list2</Prefix>
|
|
</COSBucketDestination>
|
|
</Destination>
|
|
<Schedule>
|
|
<Frequency>Weekly</Frequency>
|
|
</Schedule>
|
|
<Filter>
|
|
<Prefix>myPrefix2</Prefix>
|
|
</Filter>
|
|
<IncludedObjectVersions>All</IncludedObjectVersions>
|
|
<OptionalFields>
|
|
<Field>Size</Field>
|
|
<Field>LastModifiedDate</Field>
|
|
<Field>ETag</Field>
|
|
<Field>StorageClass</Field>
|
|
</OptionalFields>
|
|
</InventoryConfiguration>
|
|
<IsTruncated>false</IsTruncated>
|
|
<ContinuationToken>...</ContinuationToken>
|
|
<IsTruncated>true</IsTruncated>
|
|
<NextContinuationToken>1ueSDFASDF1Tr/XDAFdadEADadf2J/wm36Hy4vbOwM=</NextContinuationToken>
|
|
</ListInventoryConfigurationResult>`)
|
|
})
|
|
|
|
res, _, err := client.Bucket.ListInventoryConfigurations(context.Background(), "")
|
|
if err != nil {
|
|
t.Fatalf("Bucket.ListInventory failed, error: %v", err)
|
|
}
|
|
want := &ListBucketInventoryConfigResult{
|
|
XMLName: xml.Name{Local: "ListInventoryConfigurationResult"},
|
|
IsTruncated: true,
|
|
ContinuationToken: "...",
|
|
NextContinuationToken: "1ueSDFASDF1Tr/XDAFdadEADadf2J/wm36Hy4vbOwM=",
|
|
InventoryConfigurations: []BucketListInventoryConfiguartion{
|
|
BucketListInventoryConfiguartion{
|
|
XMLName: xml.Name{Local: "InventoryConfiguration"},
|
|
ID: "list1",
|
|
IsEnabled: "True",
|
|
IncludedObjectVersions: "All",
|
|
Filter: &BucketInventoryFilter{"myPrefix"},
|
|
Schedule: &BucketInventorySchedule{"Daily"},
|
|
Destination: &BucketInventoryDestination{
|
|
Bucket: "qcs::cos:ap-beijing::examplebucket-1250000000",
|
|
AccountId: "1250000000",
|
|
Prefix: "list1",
|
|
Format: "CSV",
|
|
Encryption: &BucketInventoryEncryption{},
|
|
},
|
|
OptionalFields: &BucketInventoryOptionalFields{
|
|
BucketInventoryFields: []string{
|
|
"Size",
|
|
"LastModifiedDate",
|
|
"ETag",
|
|
"StorageClass",
|
|
"IsMultipartUpload",
|
|
"ReplicationStatus",
|
|
},
|
|
},
|
|
},
|
|
BucketListInventoryConfiguartion{
|
|
XMLName: xml.Name{Local: "InventoryConfiguration"},
|
|
ID: "list2",
|
|
IsEnabled: "True",
|
|
IncludedObjectVersions: "All",
|
|
Filter: &BucketInventoryFilter{"myPrefix2"},
|
|
Schedule: &BucketInventorySchedule{"Weekly"},
|
|
Destination: &BucketInventoryDestination{
|
|
Bucket: "qcs::cos:ap-beijing::examplebucket-1250000000",
|
|
AccountId: "1250000000",
|
|
Prefix: "list2",
|
|
Format: "CSV",
|
|
},
|
|
OptionalFields: &BucketInventoryOptionalFields{
|
|
BucketInventoryFields: []string{
|
|
"Size",
|
|
"LastModifiedDate",
|
|
"ETag",
|
|
"StorageClass",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
if !reflect.DeepEqual(res, want) {
|
|
t.Fatalf("Bucket.ListInventory failed, \nwant: %+v\nres: %+v", want, res)
|
|
}
|
|
}
|
|
|
|
func TestBucketService_DeleteInventory(t *testing.T) {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
testMethod(t, r, http.MethodDelete)
|
|
vs := values{
|
|
"inventory": "",
|
|
"id": "list1",
|
|
}
|
|
testFormValues(t, r, vs)
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
})
|
|
|
|
_, err := client.Bucket.DeleteInventory(context.Background(), "list1")
|
|
if err != nil {
|
|
t.Fatalf("Bucket.DeleteInventory returned error: %v", err)
|
|
}
|
|
}
|