10 changed files with 1070 additions and 11 deletions
			
			
		- 
					262batch.go
- 
					389batch_test.go
- 
					5cos.go
- 
					2cos_test.go
- 
					140costesting/ci_test.go
- 
					99example/batch/create_job.go
- 
					44example/batch/describe_job.go
- 
					43example/batch/list_jobs.go
- 
					48example/batch/update_priority.go
- 
					49example/batch/update_status.go
| @ -0,0 +1,262 @@ | |||||
|  | package cos | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"encoding/xml" | ||||
|  | 	"fmt" | ||||
|  | 	"net/http" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | type BatchService service | ||||
|  | 
 | ||||
|  | type BatchRequestHeaders struct { | ||||
|  | 	XCosAppid     int          `header:"x-cos-appid"` | ||||
|  | 	ContentLength string       `header:"Content-Length,omitempty"` | ||||
|  | 	ContentType   string       `header:"Content-Type,omitempty"` | ||||
|  | 	Headers       *http.Header `header:"-"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | // BatchProgressSummary
 | ||||
|  | type BatchProgressSummary struct { | ||||
|  | 	NumberOfTasksFailed    int `xml:"NumberOfTasksFailed"` | ||||
|  | 	NumberOfTasksSucceeded int `xml:"NumberOfTasksSucceeded"` | ||||
|  | 	TotalNumberOfTasks     int `xml:"TotalNumberOfTasks"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | // BatchJobReport
 | ||||
|  | type BatchJobReport struct { | ||||
|  | 	Bucket      string `xml:"Bucket"` | ||||
|  | 	Enabled     string `xml:"Enabled"` | ||||
|  | 	Format      string `xml:"Format"` | ||||
|  | 	Prefix      string `xml:"Prefix,omitempty"` | ||||
|  | 	ReportScope string `xml:"ReportScope"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | // BatchJobOperationCopy
 | ||||
|  | type BatchMetadata struct { | ||||
|  | 	Key   string `xml:"Key"` | ||||
|  | 	Value string `xml:"Value"` | ||||
|  | } | ||||
|  | type BatchNewObjectMetadata struct { | ||||
|  | 	CacheControl       string          `xml:"CacheControl,omitempty"` | ||||
|  | 	ContentDisposition string          `xml:"ContentDisposition,omitempty"` | ||||
|  | 	ContentEncoding    string          `xml:"ContentEncoding,omitempty"` | ||||
|  | 	ContentType        string          `xml:"ContentType,omitempty"` | ||||
|  | 	HttpExpiresDate    string          `xml:"HttpExpiresDate,omitempty"` | ||||
|  | 	SSEAlgorithm       string          `xml:"SSEAlgorithm,omitempty"` | ||||
|  | 	UserMetadata       []BatchMetadata `xml:"UserMetadata>member,omitempty"` | ||||
|  | } | ||||
|  | type BatchGrantee struct { | ||||
|  | 	DisplayName    string `xml:"DisplayName,omitempty"` | ||||
|  | 	Identifier     string `xml:"Identifier"` | ||||
|  | 	TypeIdentifier string `xml:"TypeIdentifier"` | ||||
|  | } | ||||
|  | type BatchCOSGrant struct { | ||||
|  | 	Grantee    *BatchGrantee `xml:"Grantee"` | ||||
|  | 	Permission string        `xml:"Permission"` | ||||
|  | } | ||||
|  | type BatchAccessControlGrants struct { | ||||
|  | 	COSGrants *BatchCOSGrant `xml:"COSGrant,omitempty"` | ||||
|  | } | ||||
|  | type BatchJobOperationCopy struct { | ||||
|  | 	AccessControlGrants       *BatchAccessControlGrants `xml:"AccessControlGrants,omitempty"` | ||||
|  | 	CannedAccessControlList   string                    `xml:"CannedAccessControlList,omitempty"` | ||||
|  | 	MetadataDirective         string                    `xml:"MetadataDirective,omitempty"` | ||||
|  | 	ModifiedSinceConstraint   int64                     `xml:"ModifiedSinceConstraint,omitempty"` | ||||
|  | 	UnModifiedSinceConstraint int64                     `xml:"UnModifiedSinceConstraint,omitempty"` | ||||
|  | 	NewObjectMetadata         *BatchNewObjectMetadata   `xml:"NewObjectMetadata,omitempty"` | ||||
|  | 	StorageClass              string                    `xml:"StorageClass,omitempty"` | ||||
|  | 	TargetResource            string                    `xml:"TargetResource"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | // BatchJobOperation
 | ||||
|  | type BatchJobOperation struct { | ||||
|  | 	PutObjectCopy *BatchJobOperationCopy `xml:"COSPutObjectCopy,omitempty" header:"-"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | // BatchJobManifest
 | ||||
|  | type BatchJobManifestLocation struct { | ||||
|  | 	ETag            string `xml:"ETag" header:"-"` | ||||
|  | 	ObjectArn       string `xml:"ObjectArn" header:"-"` | ||||
|  | 	ObjectVersionId string `xml:"ObjectVersionId,omitempty" header:"-"` | ||||
|  | } | ||||
|  | type BatchJobManifestSpec struct { | ||||
|  | 	Fields []string `xml:"Fields>member,omitempty" header:"-"` | ||||
|  | 	Format string   `xml:"Format" header:"-"` | ||||
|  | } | ||||
|  | type BatchJobManifest struct { | ||||
|  | 	Location *BatchJobManifestLocation `xml:"Location" header:"-"` | ||||
|  | 	Spec     *BatchJobManifestSpec     `xml:"Spec" header:"-"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchCreateJobOptions struct { | ||||
|  | 	XMLName              xml.Name           `xml:"CreateJobRequest" header:"-"` | ||||
|  | 	ClientRequestToken   string             `xml:"ClientRequestToken" header:"-"` | ||||
|  | 	ConfirmationRequired string             `xml:"ConfirmationRequired,omitempty" header:"-"` | ||||
|  | 	Description          string             `xml:"Description,omitempty" header:"-"` | ||||
|  | 	Manifest             *BatchJobManifest  `xml:"Manifest" header:"-"` | ||||
|  | 	Operation            *BatchJobOperation `xml:"Operation" header:"-"` | ||||
|  | 	Priority             int                `xml:"Priority" header:"-"` | ||||
|  | 	Report               *BatchJobReport    `xml:"Report" header:"-"` | ||||
|  | 	RoleArn              string             `xml:"RoleArn" header:"-"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchCreateJobResult struct { | ||||
|  | 	XMLName xml.Name `xml:"CreateJobResult"` | ||||
|  | 	JobId   string   `xml:"JobId"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | func processETag(opt *BatchCreateJobOptions) *BatchCreateJobOptions { | ||||
|  | 	if opt != nil && opt.Manifest != nil && opt.Manifest.Location != nil { | ||||
|  | 		opt.Manifest.Location.ETag = "<ETag>" + opt.Manifest.Location.ETag + "</ETag>" | ||||
|  | 	} | ||||
|  | 	return opt | ||||
|  | } | ||||
|  | 
 | ||||
|  | func (s *BatchService) CreateJob(ctx context.Context, opt *BatchCreateJobOptions, headers *BatchRequestHeaders) (*BatchCreateJobResult, *Response, error) { | ||||
|  | 	var res BatchCreateJobResult | ||||
|  | 	sendOpt := sendOptions{ | ||||
|  | 		baseURL:   s.client.BaseURL.BatchURL, | ||||
|  | 		uri:       "/jobs", | ||||
|  | 		method:    http.MethodPost, | ||||
|  | 		optHeader: headers, | ||||
|  | 		body:      opt, | ||||
|  | 		result:    &res, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	resp, err := s.client.send(ctx, &sendOpt) | ||||
|  | 	return &res, resp, err | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchJobFailureReasons struct { | ||||
|  | 	FailureCode   string `xml:"FailureCode"` | ||||
|  | 	FailureReason string `xml:"FailureReason"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchDescribeJob struct { | ||||
|  | 	ConfirmationRequired string                  `xml:"ConfirmationRequired,omitempty"` | ||||
|  | 	CreationTime         string                  `xml:"CreationTime,omitempty"` | ||||
|  | 	Description          string                  `xml:"Description,omitempty"` | ||||
|  | 	FailureReasons       *BatchJobFailureReasons `xml:"FailureReasons>JobFailure,omitempty"` | ||||
|  | 	JobId                string                  `xml:"JobId"` | ||||
|  | 	Manifest             *BatchJobManifest       `xml:"Manifest"` | ||||
|  | 	Operation            *BatchJobOperation      `xml:"Operation"` | ||||
|  | 	Priority             int                     `xml:"Priority"` | ||||
|  | 	ProgressSummary      *BatchProgressSummary   `xml:"ProgressSummary"` | ||||
|  | 	Report               *BatchJobReport         `xml:"Report,omitempty"` | ||||
|  | 	RoleArn              string                  `xml:"RoleArn,omitempty"` | ||||
|  | 	Status               string                  `xml:"Status,omitempty"` | ||||
|  | 	StatusUpdateReason   string                  `xml:"StatusUpdateReason,omitempty"` | ||||
|  | 	SuspendedCause       string                  `xml:"SuspendedCause,omitempty"` | ||||
|  | 	SuspendedDate        string                  `xml:"SuspendedDate,omitempty"` | ||||
|  | 	TerminationDate      string                  `xml:"TerminationDate,omitempty"` | ||||
|  | } | ||||
|  | type BatchDescribeJobResult struct { | ||||
|  | 	XMLName xml.Name          `xml:"DescribeJobResult"` | ||||
|  | 	Job     *BatchDescribeJob `xml:"Job"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | func (s *BatchService) DescribeJob(ctx context.Context, id string, headers *BatchRequestHeaders) (*BatchDescribeJobResult, *Response, error) { | ||||
|  | 	var res BatchDescribeJobResult | ||||
|  | 	u := fmt.Sprintf("/jobs/%s", id) | ||||
|  | 	sendOpt := sendOptions{ | ||||
|  | 		baseURL:   s.client.BaseURL.BatchURL, | ||||
|  | 		uri:       u, | ||||
|  | 		method:    http.MethodGet, | ||||
|  | 		optHeader: headers, | ||||
|  | 		result:    &res, | ||||
|  | 	} | ||||
|  | 	resp, err := s.client.send(ctx, &sendOpt) | ||||
|  | 	return &res, resp, err | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchListJobsOptions struct { | ||||
|  | 	JobStatuses string `url:"jobStatuses,omitempty" header:"-"` | ||||
|  | 	MaxResults  int    `url:"maxResults,omitempty" header:"-"` | ||||
|  | 	NextToken   string `url:"nextToken,omitempty" header:"-"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchListJobsMember struct { | ||||
|  | 	CreationTime    string                `xml:"CreationTime,omitempty"` | ||||
|  | 	Description     string                `xml:"Description,omitempty"` | ||||
|  | 	JobId           string                `xml:"JobId,omitempty"` | ||||
|  | 	Operation       string                `xml:"Operation,omitempty"` | ||||
|  | 	Priority        int                   `xml:"Priority,omitempty"` | ||||
|  | 	ProgressSummary *BatchProgressSummary `xml:"ProgressSummary,omitempty"` | ||||
|  | 	Status          string                `xml:"Status,omitempty"` | ||||
|  | 	TerminationDate string                `xml:"TerminationDate,omitempty"` | ||||
|  | } | ||||
|  | type BatchListJobs struct { | ||||
|  | 	Members []BatchListJobsMember `xml:"member,omitempty"` | ||||
|  | } | ||||
|  | type BatchListJobsResult struct { | ||||
|  | 	XMLName   xml.Name       `xml:"ListJobsResult"` | ||||
|  | 	Jobs      *BatchListJobs `xml:"Jobs"` | ||||
|  | 	NextToken string         `xml:"NextToken,omitempty"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | func (s *BatchService) ListJobs(ctx context.Context, opt *BatchListJobsOptions, headers *BatchRequestHeaders) (*BatchListJobsResult, *Response, error) { | ||||
|  | 	var res BatchListJobsResult | ||||
|  | 	sendOpt := sendOptions{ | ||||
|  | 		baseURL:   s.client.BaseURL.BatchURL, | ||||
|  | 		uri:       "/jobs", | ||||
|  | 		method:    http.MethodGet, | ||||
|  | 		optQuery:  opt, | ||||
|  | 		optHeader: headers, | ||||
|  | 		result:    &res, | ||||
|  | 	} | ||||
|  | 	resp, err := s.client.send(ctx, &sendOpt) | ||||
|  | 	return &res, resp, err | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchUpdatePriorityOptions struct { | ||||
|  | 	JobId    string `url:"-" header:"-" xml:"-"` | ||||
|  | 	Priority int    `url:"priority" header:"-" xml:"-"` | ||||
|  | } | ||||
|  | type BatchUpdatePriorityResult struct { | ||||
|  | 	XMLName  xml.Name `xml:"UpdateJobPriorityResult"` | ||||
|  | 	JobId    string   `xml:"JobId,omitempty"` | ||||
|  | 	Priority int      `xml:"Priority,omitempty"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | func (s *BatchService) UpdateJobPriority(ctx context.Context, opt *BatchUpdatePriorityOptions, headers *BatchRequestHeaders) (*BatchUpdatePriorityResult, *Response, error) { | ||||
|  | 	u := fmt.Sprintf("/jobs/%s/priority", opt.JobId) | ||||
|  | 	var res BatchUpdatePriorityResult | ||||
|  | 	sendOpt := sendOptions{ | ||||
|  | 		baseURL:   s.client.BaseURL.BatchURL, | ||||
|  | 		uri:       u, | ||||
|  | 		method:    http.MethodPost, | ||||
|  | 		optQuery:  opt, | ||||
|  | 		optHeader: headers, | ||||
|  | 		result:    &res, | ||||
|  | 	} | ||||
|  | 	resp, err := s.client.send(ctx, &sendOpt) | ||||
|  | 	return &res, resp, err | ||||
|  | } | ||||
|  | 
 | ||||
|  | type BatchUpdateStatusOptions struct { | ||||
|  | 	JobId              string `header:"-" url:"-" xml:"-"` | ||||
|  | 	RequestedJobStatus string `url:"requestedJobStatus" header:"-" xml:"-"` | ||||
|  | 	StatusUpdateReason string `url:"statusUpdateReason,omitempty" header:"-", xml:"-"` | ||||
|  | } | ||||
|  | type BatchUpdateStatusResult struct { | ||||
|  | 	XMLName            xml.Name `xml:"UpdateJobStatusResult"` | ||||
|  | 	JobId              string   `xml:"JobId,omitempty"` | ||||
|  | 	Status             string   `xml:"Status,omitempty"` | ||||
|  | 	StatusUpdateReason string   `xml:"StatusUpdateReason,omitempty"` | ||||
|  | } | ||||
|  | 
 | ||||
|  | func (s *BatchService) UpdateJobStatus(ctx context.Context, opt *BatchUpdateStatusOptions, headers *BatchRequestHeaders) (*BatchUpdateStatusResult, *Response, error) { | ||||
|  | 	u := fmt.Sprintf("/jobs/%s/status", opt.JobId) | ||||
|  | 	var res BatchUpdateStatusResult | ||||
|  | 	sendOpt := sendOptions{ | ||||
|  | 		baseURL:   s.client.BaseURL.BatchURL, | ||||
|  | 		uri:       u, | ||||
|  | 		method:    http.MethodPost, | ||||
|  | 		optQuery:  opt, | ||||
|  | 		optHeader: headers, | ||||
|  | 		result:    &res, | ||||
|  | 	} | ||||
|  | 	resp, err := s.client.send(ctx, &sendOpt) | ||||
|  | 	return &res, resp, err | ||||
|  | } | ||||
| @ -0,0 +1,389 @@ | |||||
|  | package cos | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"encoding/xml" | ||||
|  | 	"fmt" | ||||
|  | 	"net/http" | ||||
|  | 	"reflect" | ||||
|  | 	"testing" | ||||
|  | 
 | ||||
|  |     "github.com/google/uuid" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func TestBatchService_CreateJob(t *testing.T) { | ||||
|  | 	setup() | ||||
|  | 	defer teardown() | ||||
|  | 	uuid_str := uuid.New().String() | ||||
|  | 	opt := &BatchCreateJobOptions{ | ||||
|  | 		ClientRequestToken: uuid_str, | ||||
|  | 		Description:        "test batch", | ||||
|  | 		Manifest: &BatchJobManifest{ | ||||
|  | 			Location: &BatchJobManifestLocation{ | ||||
|  | 				ETag:      "15150651828fa9cdcb8356b6d1c7638b", | ||||
|  | 				ObjectArn: "qcs::cos:ap-chengdu::sourcebucket-1250000000/manifests/batch-copy-manifest.csv", | ||||
|  | 			}, | ||||
|  | 			Spec: &BatchJobManifestSpec{ | ||||
|  | 				Fields: []string{"Bucket", "Key"}, | ||||
|  | 				Format: "COSBatchOperations_CSV_V1", | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 		Operation: &BatchJobOperation{ | ||||
|  | 			PutObjectCopy: &BatchJobOperationCopy{ | ||||
|  | 				TargetResource: "qcs::cos:ap-chengdu::destinationbucket-1250000000", | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 		Priority: 1, | ||||
|  | 		Report: &BatchJobReport{ | ||||
|  | 			Bucket:      "qcs::cos:ap-chengdu::sourcebucket-1250000000", | ||||
|  | 			Enabled:     "true", | ||||
|  | 			Format:      "Report_CSV_V1", | ||||
|  | 			Prefix:      "job-result", | ||||
|  | 			ReportScope: "AllTasks", | ||||
|  | 		}, | ||||
|  | 		RoleArn: "qcs::cam::uin/100000000001:roleName/COS_Batch_QcsRole", | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	mux.HandleFunc("/jobs", func(w http.ResponseWriter, r *http.Request) { | ||||
|  | 		testHeader(t, r, "x-cos-appid", "1250000000") | ||||
|  | 		testMethod(t, r, http.MethodPost) | ||||
|  | 		v := new(BatchCreateJobOptions) | ||||
|  | 		xml.NewDecoder(r.Body).Decode(v) | ||||
|  | 
 | ||||
|  | 		want := opt | ||||
|  | 		want.XMLName = xml.Name{Local: "CreateJobRequest"} | ||||
|  | 		if !reflect.DeepEqual(v, want) { | ||||
|  | 			t.Errorf("Batch.CreateJob request body: %+v, want %+v", v, want) | ||||
|  | 		} | ||||
|  | 		fmt.Fprint(w, `<?xml version='1.0' encoding='utf-8' ?> | ||||
|  | <CreateJobResult> | ||||
|  |     <JobId>53dc6228-c50b-46f7-8ad7-65e7159f1aae</JobId> | ||||
|  | </CreateJobResult>`) | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	headers := &BatchRequestHeaders{ | ||||
|  | 		XCosAppid: 1250000000, | ||||
|  | 	} | ||||
|  | 	ref, _, err := client.Batch.CreateJob(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		t.Fatalf("Batch.CreateJob returned error: %v", err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	want := &BatchCreateJobResult{ | ||||
|  | 		XMLName: xml.Name{Local: "CreateJobResult"}, | ||||
|  | 		JobId:   "53dc6228-c50b-46f7-8ad7-65e7159f1aae", | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	if !reflect.DeepEqual(ref, want) { | ||||
|  | 		t.Errorf("Batch.CreateJob returned %+v, want %+v", ref, want) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | } | ||||
|  | 
 | ||||
|  | func TestBatchService_DescribeJob(t *testing.T) { | ||||
|  | 	setup() | ||||
|  | 	defer teardown() | ||||
|  | 
 | ||||
|  | 	mux.HandleFunc("/jobs/53dc6228-c50b-46f7-8ad7-65e7159f1aae", func(w http.ResponseWriter, r *http.Request) { | ||||
|  | 		testHeader(t, r, "x-cos-appid", "1250000000") | ||||
|  | 		testMethod(t, r, http.MethodGet) | ||||
|  | 
 | ||||
|  | 		fmt.Fprint(w, `<?xml version='1.0' encoding='utf-8' ?> | ||||
|  | <DescribeJobResult> | ||||
|  |     <Job> | ||||
|  |         <ConfirmationRequired>false</ConfirmationRequired> | ||||
|  |         <CreationTime>2019-12-19T18:00:30Z</CreationTime> | ||||
|  |         <Description>example-job</Description> | ||||
|  |         <FailureReasons> | ||||
|  |             <JobFailure> | ||||
|  |                 <FailureCode/> | ||||
|  |                 <FailureReason/> | ||||
|  |             </JobFailure> | ||||
|  |         </FailureReasons> | ||||
|  |         <JobId>53dc6228-c50b-46f7-8ad7-65e7159f1aae</JobId> | ||||
|  |         <Manifest> | ||||
|  |             <Location> | ||||
|  |                 <ETag>"15150651828fa9cdcb8356b6d1c7638b"</ETag> | ||||
|  |                 <ObjectArn>qcs::cos:ap-chengdu::sourcebucket-1250000000/manifests/batch-copy-manifest.csv</ObjectArn> | ||||
|  |             </Location> | ||||
|  |             <Spec> | ||||
|  |                 <Fields> | ||||
|  |                     <member>Bucket</member> | ||||
|  |                     <member>Key</member> | ||||
|  |                 </Fields> | ||||
|  |                 <Format>COSBatchOperations_CSV_V1</Format> | ||||
|  |             </Spec> | ||||
|  |         </Manifest> | ||||
|  |         <Operation> | ||||
|  |             <COSPutObjectCopy> | ||||
|  |                 <TargetResource>qcs::cos:ap-chengdu::destinationbucket-1250000000</TargetResource> | ||||
|  |             </COSPutObjectCopy> | ||||
|  |         </Operation> | ||||
|  |         <Priority>10</Priority> | ||||
|  |         <ProgressSummary> | ||||
|  |             <NumberOfTasksFailed>0</NumberOfTasksFailed> | ||||
|  |             <NumberOfTasksSucceeded>10</NumberOfTasksSucceeded> | ||||
|  |             <TotalNumberOfTasks>10</TotalNumberOfTasks> | ||||
|  |         </ProgressSummary> | ||||
|  |         <Report> | ||||
|  |             <Bucket>qcs::cos:ap-chengdu::sourcebucket-1250000000</Bucket> | ||||
|  |             <Enabled>true</Enabled> | ||||
|  |             <Format>Report_CSV_V1</Format> | ||||
|  |             <Prefix>job-result</Prefix> | ||||
|  |             <ReportScope>AllTasks</ReportScope> | ||||
|  |         </Report> | ||||
|  |         <RoleArn>qcs::cam::uin/100000000001:roleName/COS_Batch_QcsRole</RoleArn> | ||||
|  |         <Status>Complete</Status> | ||||
|  |         <StatusUpdateReason>Job complete</StatusUpdateReason> | ||||
|  |         <TerminationDate>2019-12-19T18:00:42Z</TerminationDate> | ||||
|  |     </Job> | ||||
|  | </DescribeJobResult>`) | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	headers := &BatchRequestHeaders{ | ||||
|  | 		XCosAppid: 1250000000, | ||||
|  | 	} | ||||
|  | 	ref, _, err := client.Batch.DescribeJob(context.Background(), "53dc6228-c50b-46f7-8ad7-65e7159f1aae", headers) | ||||
|  | 	if err != nil { | ||||
|  | 		t.Fatalf("Batch.DescribeJob returned error: %v", err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	want := &BatchDescribeJobResult{ | ||||
|  | 		XMLName: xml.Name{Local: "DescribeJobResult"}, | ||||
|  | 		Job: &BatchDescribeJob{ | ||||
|  | 			ConfirmationRequired: "false", | ||||
|  | 			CreationTime:         "2019-12-19T18:00:30Z", | ||||
|  | 			Description:          "example-job", | ||||
|  | 			FailureReasons:       &BatchJobFailureReasons{}, | ||||
|  | 			JobId:                "53dc6228-c50b-46f7-8ad7-65e7159f1aae", | ||||
|  | 			Manifest: &BatchJobManifest{ | ||||
|  | 				Location: &BatchJobManifestLocation{ | ||||
|  | 					ETag:      "\"15150651828fa9cdcb8356b6d1c7638b\"", | ||||
|  | 					ObjectArn: "qcs::cos:ap-chengdu::sourcebucket-1250000000/manifests/batch-copy-manifest.csv", | ||||
|  | 				}, | ||||
|  | 				Spec: &BatchJobManifestSpec{ | ||||
|  | 					Fields: []string{"Bucket", "Key"}, | ||||
|  | 					Format: "COSBatchOperations_CSV_V1", | ||||
|  | 				}, | ||||
|  | 			}, | ||||
|  | 			Operation: &BatchJobOperation{ | ||||
|  | 				PutObjectCopy: &BatchJobOperationCopy{ | ||||
|  | 					TargetResource: "qcs::cos:ap-chengdu::destinationbucket-1250000000", | ||||
|  | 				}, | ||||
|  | 			}, | ||||
|  | 			Priority: 10, | ||||
|  | 			ProgressSummary: &BatchProgressSummary{ | ||||
|  | 				NumberOfTasksFailed:    0, | ||||
|  | 				NumberOfTasksSucceeded: 10, | ||||
|  | 				TotalNumberOfTasks:     10, | ||||
|  | 			}, | ||||
|  | 			Report: &BatchJobReport{ | ||||
|  | 				Bucket:      "qcs::cos:ap-chengdu::sourcebucket-1250000000", | ||||
|  | 				Enabled:     "true", | ||||
|  | 				Format:      "Report_CSV_V1", | ||||
|  | 				Prefix:      "job-result", | ||||
|  | 				ReportScope: "AllTasks", | ||||
|  | 			}, | ||||
|  | 			RoleArn:            "qcs::cam::uin/100000000001:roleName/COS_Batch_QcsRole", | ||||
|  | 			Status:             "Complete", | ||||
|  | 			StatusUpdateReason: "Job complete", | ||||
|  | 			TerminationDate:    "2019-12-19T18:00:42Z", | ||||
|  | 		}, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	if !reflect.DeepEqual(ref, want) { | ||||
|  | 		t.Errorf("Batch.DescribeJob returned %+v, want %+v", ref, want) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | } | ||||
|  | 
 | ||||
|  | func TestBatchService_ListJobs(t *testing.T) { | ||||
|  | 	setup() | ||||
|  | 	defer teardown() | ||||
|  | 
 | ||||
|  | 	mux.HandleFunc("/jobs", func(w http.ResponseWriter, r *http.Request) { | ||||
|  | 		testHeader(t, r, "x-cos-appid", "1250000000") | ||||
|  | 		testMethod(t, r, http.MethodGet) | ||||
|  | 		vs := values{ | ||||
|  | 			"maxResults": "2", | ||||
|  | 		} | ||||
|  | 		testFormValues(t, r, vs) | ||||
|  | 
 | ||||
|  | 		fmt.Fprint(w, `<?xml version='1.0' encoding='utf-8' ?> | ||||
|  | <ListJobsResult> | ||||
|  |     <Jobs> | ||||
|  |         <member> | ||||
|  |             <CreationTime>2019-12-19T11:05:40Z</CreationTime> | ||||
|  |             <Description>example-job</Description> | ||||
|  |             <JobId>021140d8-67ca-4e89-8089-0de9a1e40943</JobId> | ||||
|  |             <Operation>COSPutObjectCopy</Operation> | ||||
|  |             <Priority>10</Priority> | ||||
|  |             <ProgressSummary> | ||||
|  |                 <NumberOfTasksFailed>0</NumberOfTasksFailed> | ||||
|  |                 <NumberOfTasksSucceeded>10</NumberOfTasksSucceeded> | ||||
|  |                 <TotalNumberOfTasks>10</TotalNumberOfTasks> | ||||
|  |             </ProgressSummary> | ||||
|  |             <Status>Complete</Status> | ||||
|  |             <TerminationDate>2019-12-19T11:05:56Z</TerminationDate> | ||||
|  |         </member> | ||||
|  |         <member> | ||||
|  |             <CreationTime>2019-12-19T11:07:05Z</CreationTime> | ||||
|  |             <Description>example-job</Description> | ||||
|  |             <JobId>066d919e-49b9-429e-b844-e17ea7b16421</JobId> | ||||
|  |             <Operation>COSPutObjectCopy</Operation> | ||||
|  |             <Priority>10</Priority> | ||||
|  |             <ProgressSummary> | ||||
|  |                 <NumberOfTasksFailed>0</NumberOfTasksFailed> | ||||
|  |                 <NumberOfTasksSucceeded>10</NumberOfTasksSucceeded> | ||||
|  |                 <TotalNumberOfTasks>10</TotalNumberOfTasks> | ||||
|  |             </ProgressSummary> | ||||
|  |             <Status>Complete</Status> | ||||
|  |             <TerminationDate>2019-12-19T11:07:21Z</TerminationDate> | ||||
|  |         </member> | ||||
|  |     </Jobs> | ||||
|  |     <NextToken>066d919e-49b9-429e-b844-e17ea7b16421</NextToken> | ||||
|  | </ListJobsResult>`) | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	opt := &BatchListJobsOptions{ | ||||
|  | 		MaxResults: 2, | ||||
|  | 	} | ||||
|  | 	headers := &BatchRequestHeaders{ | ||||
|  | 		XCosAppid: 1250000000, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	ref, _, err := client.Batch.ListJobs(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		t.Fatalf("Batch.DescribeJob returned error: %v", err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	want := &BatchListJobsResult{ | ||||
|  | 		XMLName: xml.Name{Local: "ListJobsResult"}, | ||||
|  | 		Jobs: &BatchListJobs{ | ||||
|  | 			Members: []BatchListJobsMember{ | ||||
|  | 				{ | ||||
|  | 					CreationTime: "2019-12-19T11:05:40Z", | ||||
|  | 					Description:  "example-job", | ||||
|  | 					JobId:        "021140d8-67ca-4e89-8089-0de9a1e40943", | ||||
|  | 					Operation:    "COSPutObjectCopy", | ||||
|  | 					Priority:     10, | ||||
|  | 					ProgressSummary: &BatchProgressSummary{ | ||||
|  | 						NumberOfTasksFailed:    0, | ||||
|  | 						NumberOfTasksSucceeded: 10, | ||||
|  | 						TotalNumberOfTasks:     10, | ||||
|  | 					}, | ||||
|  | 					Status:          "Complete", | ||||
|  | 					TerminationDate: "2019-12-19T11:05:56Z", | ||||
|  | 				}, | ||||
|  | 				{ | ||||
|  | 					CreationTime: "2019-12-19T11:07:05Z", | ||||
|  | 					Description:  "example-job", | ||||
|  | 					JobId:        "066d919e-49b9-429e-b844-e17ea7b16421", | ||||
|  | 					Operation:    "COSPutObjectCopy", | ||||
|  | 					Priority:     10, | ||||
|  | 					ProgressSummary: &BatchProgressSummary{ | ||||
|  | 						NumberOfTasksFailed:    0, | ||||
|  | 						NumberOfTasksSucceeded: 10, | ||||
|  | 						TotalNumberOfTasks:     10, | ||||
|  | 					}, | ||||
|  | 					Status:          "Complete", | ||||
|  | 					TerminationDate: "2019-12-19T11:07:21Z", | ||||
|  | 				}, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 		NextToken: "066d919e-49b9-429e-b844-e17ea7b16421", | ||||
|  | 	} | ||||
|  | 	if !reflect.DeepEqual(ref, want) { | ||||
|  | 		t.Errorf("Batch.ListJobs returned %+v, want %+v", ref, want) | ||||
|  | 	} | ||||
|  | } | ||||
|  | 
 | ||||
|  | func TestBatchService_UpdateJobsPriority(t *testing.T) { | ||||
|  | 	setup() | ||||
|  | 	defer teardown() | ||||
|  | 
 | ||||
|  | 	mux.HandleFunc("/jobs/021140d8-67ca-4e89-8089-0de9a1e40943/priority", func(w http.ResponseWriter, r *http.Request) { | ||||
|  | 		testHeader(t, r, "x-cos-appid", "1250000000") | ||||
|  | 		testMethod(t, r, http.MethodPost) | ||||
|  | 		vs := values{ | ||||
|  | 			"priority": "10", | ||||
|  | 		} | ||||
|  | 		testFormValues(t, r, vs) | ||||
|  | 
 | ||||
|  | 		fmt.Fprint(w, `<?xml version='1.0' encoding='utf-8' ?> | ||||
|  | <UpdateJobPriorityResult> | ||||
|  |     <JobId>021140d8-67ca-4e89-8089-0de9a1e40943</JobId> | ||||
|  |     <Priority>10</Priority> | ||||
|  | </UpdateJobPriorityResult>`) | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	opt := &BatchUpdatePriorityOptions{ | ||||
|  | 		JobId:    "021140d8-67ca-4e89-8089-0de9a1e40943", | ||||
|  | 		Priority: 10, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	headers := &BatchRequestHeaders{ | ||||
|  | 		XCosAppid: 1250000000, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	ref, _, err := client.Batch.UpdateJobPriority(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		t.Fatalf("Batch.UpdateJobPriority returned error: %v", err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	want := &BatchUpdatePriorityResult{ | ||||
|  | 		XMLName:  xml.Name{Local: "UpdateJobPriorityResult"}, | ||||
|  | 		JobId:    "021140d8-67ca-4e89-8089-0de9a1e40943", | ||||
|  | 		Priority: 10, | ||||
|  | 	} | ||||
|  | 	if !reflect.DeepEqual(ref, want) { | ||||
|  | 		t.Errorf("Batch.UpdateJobsPriority returned %+v, want %+v", ref, want) | ||||
|  | 	} | ||||
|  | } | ||||
|  | 
 | ||||
|  | func TestBatchService_UpdateJobsStatus(t *testing.T) { | ||||
|  | 	setup() | ||||
|  | 	defer teardown() | ||||
|  | 
 | ||||
|  | 	mux.HandleFunc("/jobs/021140d8-67ca-4e89-8089-0de9a1e40943/status", func(w http.ResponseWriter, r *http.Request) { | ||||
|  | 		testHeader(t, r, "x-cos-appid", "1250000000") | ||||
|  | 		testMethod(t, r, http.MethodPost) | ||||
|  | 		vs := values{ | ||||
|  | 			"requestedJobStatus": "Ready", | ||||
|  | 			"statusUpdateReason": "to do", | ||||
|  | 		} | ||||
|  | 		testFormValues(t, r, vs) | ||||
|  | 
 | ||||
|  | 		fmt.Fprint(w, `<?xml version='1.0' encoding='utf-8' ?> | ||||
|  | <UpdateJobStatusResult> | ||||
|  |     <JobId>021140d8-67ca-4e89-8089-0de9a1e40943</JobId> | ||||
|  |     <Status>Ready</Status> | ||||
|  |     <StatusUpdateReason>to do</StatusUpdateReason> | ||||
|  | </UpdateJobStatusResult>`) | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	opt := &BatchUpdateStatusOptions{ | ||||
|  | 		JobId:              "021140d8-67ca-4e89-8089-0de9a1e40943", | ||||
|  | 		RequestedJobStatus: "Ready", | ||||
|  | 		StatusUpdateReason: "to do", | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	headers := &BatchRequestHeaders{ | ||||
|  | 		XCosAppid: 1250000000, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	ref, _, err := client.Batch.UpdateJobStatus(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		t.Fatalf("Batch.UpdateJobStatus returned error: %v", err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	want := &BatchUpdateStatusResult{ | ||||
|  | 		XMLName:            xml.Name{Local: "UpdateJobStatusResult"}, | ||||
|  | 		JobId:              "021140d8-67ca-4e89-8089-0de9a1e40943", | ||||
|  | 		Status:             "Ready", | ||||
|  | 		StatusUpdateReason: "to do", | ||||
|  | 	} | ||||
|  | 	if !reflect.DeepEqual(ref, want) { | ||||
|  | 		t.Errorf("Batch.UpdateJobsStatus returned %+v, want %+v", ref, want) | ||||
|  | 	} | ||||
|  | } | ||||
| @ -0,0 +1,99 @@ | |||||
|  | package main | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"net/http" | ||||
|  | 	"net/url" | ||||
|  | 	"os" | ||||
|  | 	"strings" | ||||
|  | 
 | ||||
|  | 	"fmt" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5/debug" | ||||
|  | 	"github.com/google/uuid" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func main() { | ||||
|  | 	test_batch_bucket := "testcd-1259654469" | ||||
|  | 	target_batch_bucket := "targetcd-1259654469" | ||||
|  | 	appid := 1259654469 | ||||
|  | 	uin := "100010805041" | ||||
|  | 	region := "ap-chengdu" | ||||
|  | 
 | ||||
|  | 	// bucket url:<Bucketname-Appid>.cos.<region>.mycloud.com
 | ||||
|  | 	bucketurl, _ := url.Parse("https://" + test_batch_bucket + ".cos." + region + ".myqcloud.com") | ||||
|  | 	// batch url:<uin>.cos-control.<region>.myqcloud.ccom
 | ||||
|  | 	batchurl, _ := url.Parse("https://" + uin + ".cos-control." + region + ".myqcloud.com") | ||||
|  | 
 | ||||
|  | 	b := &cos.BaseURL{BucketURL: bucketurl, BatchURL: batchurl} | ||||
|  | 	c := cos.NewClient(b, &http.Client{ | ||||
|  | 		Transport: &cos.AuthorizationTransport{ | ||||
|  | 			SecretID:  os.Getenv("COS_SECRETID"), | ||||
|  | 			SecretKey: os.Getenv("COS_SECRETKEY"), | ||||
|  | 			Transport: &debug.DebugRequestTransport{ | ||||
|  | 				RequestHeader:  true, | ||||
|  | 				RequestBody:    true, | ||||
|  | 				ResponseHeader: true, | ||||
|  | 				ResponseBody:   true, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	// 创建需要复制的文件
 | ||||
|  | 	source_name := "test/1.txt" | ||||
|  | 	sf := strings.NewReader("batch test content") | ||||
|  | 	_, err := c.Object.Put(context.Background(), source_name, sf, nil) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	// 创建清单文件
 | ||||
|  | 	manifest_name := "test/manifest.csv" | ||||
|  | 	f := strings.NewReader(test_batch_bucket + "," + source_name) | ||||
|  | 	resp, err := c.Object.Put(context.Background(), manifest_name, f, nil) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	etag := resp.Header.Get("ETag") | ||||
|  | 
 | ||||
|  | 	uuid_str := uuid.New().String() | ||||
|  | 	opt := &cos.BatchCreateJobOptions{ | ||||
|  | 		ClientRequestToken:   uuid_str, | ||||
|  | 		ConfirmationRequired: "true", | ||||
|  | 		Description:          "test batch", | ||||
|  | 		Manifest: &cos.BatchJobManifest{ | ||||
|  | 			Location: &cos.BatchJobManifestLocation{ | ||||
|  | 				ETag:      etag, | ||||
|  | 				ObjectArn: "qcs::cos:" + region + "::" + test_batch_bucket + "/" + manifest_name, | ||||
|  | 			}, | ||||
|  | 			Spec: &cos.BatchJobManifestSpec{ | ||||
|  | 				Fields: []string{"Bucket", "Key"}, | ||||
|  | 				Format: "COSBatchOperations_CSV_V1", | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 		Operation: &cos.BatchJobOperation{ | ||||
|  | 			PutObjectCopy: &cos.BatchJobOperationCopy{ | ||||
|  | 				TargetResource: "qcs::cos:" + region + "::" + target_batch_bucket, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 		Priority: 1, | ||||
|  | 		Report: &cos.BatchJobReport{ | ||||
|  | 			Bucket:      "qcs::cos:" + region + "::" + test_batch_bucket, | ||||
|  | 			Enabled:     "true", | ||||
|  | 			Format:      "Report_CSV_V1", | ||||
|  | 			Prefix:      "job-result", | ||||
|  | 			ReportScope: "AllTasks", | ||||
|  | 		}, | ||||
|  | 		RoleArn: "qcs::cam::uin/" + uin + ":roleName/COSBatch_QcsRole", | ||||
|  | 	} | ||||
|  | 	headers := &cos.BatchRequestHeaders{ | ||||
|  | 		XCosAppid: appid, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	res, _, err := c.Batch.CreateJob(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	fmt.Println(res) | ||||
|  | 
 | ||||
|  | } | ||||
| @ -0,0 +1,44 @@ | |||||
|  | package main | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"net/http" | ||||
|  | 	"net/url" | ||||
|  | 	"os" | ||||
|  | 
 | ||||
|  | 	"fmt" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5/debug" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func main() { | ||||
|  | 	uin := "100010805041" | ||||
|  | 	appid := 1259654469 | ||||
|  | 	jobid := "795ad997-5557-4869-9a19-b66ec087d460" | ||||
|  | 	u, _ := url.Parse("https://" + uin + ".cos-control.ap-chengdu.myqcloud.com") | ||||
|  | 	b := &cos.BaseURL{BatchURL: u} | ||||
|  | 	c := cos.NewClient(b, &http.Client{ | ||||
|  | 		Transport: &cos.AuthorizationTransport{ | ||||
|  | 			SecretID:  os.Getenv("COS_SECRETID"), | ||||
|  | 			SecretKey: os.Getenv("COS_SECRETKEY"), | ||||
|  | 			Transport: &debug.DebugRequestTransport{ | ||||
|  | 				RequestHeader:  true, | ||||
|  | 				RequestBody:    true, | ||||
|  | 				ResponseHeader: true, | ||||
|  | 				ResponseBody:   true, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	headers := &cos.BatchRequestHeaders{ | ||||
|  | 		XCosAppid: appid, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	res, _, err := c.Batch.DescribeJob(context.Background(), jobid, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	if res != nil && res.Job != nil { | ||||
|  | 		fmt.Printf("%+v", res.Job) | ||||
|  | 	} | ||||
|  | } | ||||
| @ -0,0 +1,43 @@ | |||||
|  | package main | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"net/http" | ||||
|  | 	"net/url" | ||||
|  | 	"os" | ||||
|  | 
 | ||||
|  | 	"fmt" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5/debug" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func main() { | ||||
|  | 	uin := "100010805041" | ||||
|  | 	appid := 1259654469 | ||||
|  | 	u, _ := url.Parse("https://" + uin + ".cos-control.ap-chengdu.myqcloud.com") | ||||
|  | 	b := &cos.BaseURL{BatchURL: u} | ||||
|  | 	c := cos.NewClient(b, &http.Client{ | ||||
|  | 		Transport: &cos.AuthorizationTransport{ | ||||
|  | 			SecretID:  os.Getenv("COS_SECRETID"), | ||||
|  | 			SecretKey: os.Getenv("COS_SECRETKEY"), | ||||
|  | 			Transport: &debug.DebugRequestTransport{ | ||||
|  | 				RequestHeader:  true, | ||||
|  | 				RequestBody:    true, | ||||
|  | 				ResponseHeader: true, | ||||
|  | 				ResponseBody:   true, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	headers := &cos.BatchRequestHeaders{ | ||||
|  | 		XCosAppid: appid, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	res, _, err := c.Batch.ListJobs(context.Background(), nil, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	if res != nil && res.Jobs != nil { | ||||
|  | 		fmt.Printf("%+v", res.Jobs) | ||||
|  | 	} | ||||
|  | } | ||||
| @ -0,0 +1,48 @@ | |||||
|  | package main | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"net/http" | ||||
|  | 	"net/url" | ||||
|  | 	"os" | ||||
|  | 
 | ||||
|  | 	"fmt" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5/debug" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func main() { | ||||
|  | 	uin := "100010805041" | ||||
|  | 	appid := 1259654469 | ||||
|  | 	jobid := "795ad997-5557-4869-9a19-b66ec087d460" | ||||
|  | 	u, _ := url.Parse("https://" + uin + ".cos-control.ap-chengdu.myqcloud.com") | ||||
|  | 	b := &cos.BaseURL{BatchURL: u} | ||||
|  | 	c := cos.NewClient(b, &http.Client{ | ||||
|  | 		Transport: &cos.AuthorizationTransport{ | ||||
|  | 			SecretID:  os.Getenv("COS_SECRETID"), | ||||
|  | 			SecretKey: os.Getenv("COS_SECRETKEY"), | ||||
|  | 			Transport: &debug.DebugRequestTransport{ | ||||
|  | 				RequestHeader:  true, | ||||
|  | 				RequestBody:    true, | ||||
|  | 				ResponseHeader: true, | ||||
|  | 				ResponseBody:   true, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	opt := &cos.BatchUpdatePriorityOptions{ | ||||
|  | 		JobId:    jobid, | ||||
|  | 		Priority: 3, | ||||
|  | 	} | ||||
|  | 	headers := &cos.BatchRequestHeaders{ | ||||
|  | 		XCosAppid: appid, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	res, _, err := c.Batch.UpdateJobPriority(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	if res != nil { | ||||
|  | 		fmt.Printf("%+v", res) | ||||
|  | 	} | ||||
|  | } | ||||
| @ -0,0 +1,49 @@ | |||||
|  | package main | ||||
|  | 
 | ||||
|  | import ( | ||||
|  | 	"context" | ||||
|  | 	"net/http" | ||||
|  | 	"net/url" | ||||
|  | 	"os" | ||||
|  | 
 | ||||
|  | 	"fmt" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5" | ||||
|  | 	"github.com/tencentyun/cos-go-sdk-v5/debug" | ||||
|  | ) | ||||
|  | 
 | ||||
|  | func main() { | ||||
|  | 	uin := "100010805041" | ||||
|  | 	appid := 1259654469 | ||||
|  | 	jobid := "289b0ea1-5ac5-453d-8a61-7f452dd4a209" | ||||
|  | 	u, _ := url.Parse("https://" + uin + ".cos-control.ap-chengdu.myqcloud.com") | ||||
|  | 	b := &cos.BaseURL{BatchURL: u} | ||||
|  | 	c := cos.NewClient(b, &http.Client{ | ||||
|  | 		Transport: &cos.AuthorizationTransport{ | ||||
|  | 			SecretID:  os.Getenv("COS_SECRETID"), | ||||
|  | 			SecretKey: os.Getenv("COS_SECRETKEY"), | ||||
|  | 			Transport: &debug.DebugRequestTransport{ | ||||
|  | 				RequestHeader:  true, | ||||
|  | 				RequestBody:    true, | ||||
|  | 				ResponseHeader: true, | ||||
|  | 				ResponseBody:   true, | ||||
|  | 			}, | ||||
|  | 		}, | ||||
|  | 	}) | ||||
|  | 
 | ||||
|  | 	opt := &cos.BatchUpdateStatusOptions{ | ||||
|  | 		JobId:              jobid, | ||||
|  | 		RequestedJobStatus: "Ready", // 允许状态转换见 https://cloud.tencent.com/document/product/436/38604
 | ||||
|  | 		StatusUpdateReason: "to test", | ||||
|  | 	} | ||||
|  | 	headers := &cos.BatchRequestHeaders{ | ||||
|  | 		XCosAppid: appid, | ||||
|  | 	} | ||||
|  | 
 | ||||
|  | 	res, _, err := c.Batch.UpdateJobStatus(context.Background(), opt, headers) | ||||
|  | 	if err != nil { | ||||
|  | 		panic(err) | ||||
|  | 	} | ||||
|  | 	if res != nil { | ||||
|  | 		fmt.Printf("%+v", res) | ||||
|  | 	} | ||||
|  | } | ||||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue