diff --git a/oss/api_op_bucket_antiddos.go b/oss/api_op_bucket_antiddos.go new file mode 100644 index 0000000..7c0ff0d --- /dev/null +++ b/oss/api_op_bucket_antiddos.go @@ -0,0 +1,366 @@ +package oss + +import ( + "context" +) + +type BucketAntiDDOSConfiguration struct { + // The custom domain names that you want to protect. + Domains []string `xml:"Cnames>Domain"` +} + +type BucketAntiDDOSInfo struct { + // The ID of the bucket owner. + Owner *string `xml:"Owner"` + + // The time when the Anti-DDoS instance was created. The value is a timestamp. + Ctime *int64 `xml:"Ctime"` + + // The status of the Anti-DDoS instance. Valid values:* Init* Defending* HaltDefending + Status *string `xml:"Status"` + + // The custom domain names. + Domains []string `xml:"Cnames>Domain"` + + // The ID of the Anti-DDoS instance. + InstanceId *string `xml:"InstanceId"` + + // The name of the bucket for which the Anti-DDoS instance is created. + Bucket *string `xml:"Bucket"` + + // The time when the Anti-DDoS instance was last updated. The value is a timestamp. + Mtime *int64 `xml:"Mtime"` + + // The time when the Anti-DDoS instance was activated. The value is a timestamp. + ActiveTime *int64 `xml:"ActiveTime"` + + // The type of the Anti-DDoS instance. Valid value: AntiDDos Premimum. + Type *string `xml:"Type"` +} + +type UserAntiDDOSInfo struct { + // The time when the Anti-DDoS instance was created. The value is a timestamp. + Ctime *int64 `xml:"Ctime"` + + // The time when the Anti-DDoS instance was last updated. The value is a timestamp. + Mtime *int64 `xml:"Mtime"` + + // The time when the Anti-DDoS instance was activated. The value is a timestamp. + ActiveTime *int64 `xml:"ActiveTime"` + + // The status of the Anti-DDoS instance. Valid values:* Init* Defending* HaltDefending + Status *string `xml:"Status"` + + // The ID of the Anti-DDoS instance. + InstanceId *string `xml:"InstanceId"` + + // The ID of the owner of the Anti-DDoS instance. + Owner *string `xml:"Owner"` +} + +type AntiDDOSListConfiguration struct { + // The Anti-DDoS instances whose names are alphabetically after the specified marker. + Marker *string `xml:"Marker"` + + // Indicates whether all Anti-DDoS instances are returned.- true: All Anti-DDoS instances are returned.- false: Not all Anti-DDoS instances are returned. + IsTruncated *bool `xml:"IsTruncated"` + + // The container that stores information about the Anti-DDoS instance. + AntiDDOSConfigurations []BucketAntiDDOSInfo `xml:"AntiDDOSConfiguration"` +} + +type UpdateUserAntiDDosInfoRequest struct { + // The Anti-DDoS instance ID. + DefenderInstance *string `input:"header,x-oss-defender-instance,required"` + + // The new status of the Anti-DDoS instance. Set the value to HaltDefending, which indicates that the Anti-DDos protection is disabled for a bucket. + DefenderStatus *string `input:"header,x-oss-defender-status,required"` + + RequestCommon +} + +type UpdateUserAntiDDosInfoResult struct { + ResultCommon +} + +// UpdateUserAntiDDosInfo Modifies the status of an Anti-DDoS instance. +func (c *Client) UpdateUserAntiDDosInfo(ctx context.Context, request *UpdateUserAntiDDosInfoRequest, optFns ...func(*Options)) (*UpdateUserAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &UpdateUserAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "UpdateUserAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &UpdateUserAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} + +type UpdateBucketAntiDDosInfoRequest struct { + // The name of the bucket. + Bucket *string `input:"host,bucket,required"` + + // The Anti-DDoS instance ID. + DefenderInstance *string `input:"header,x-oss-defender-instance,required"` + + // The new status of the Anti-DDoS instance. Valid values:* Init: You must specify the custom domain name that you want to protect.* Defending: You can select whether to specify the custom domain name that you want to protect.* HaltDefending: You do not need to specify the custom domain name that you want to protect. + DefenderStatus *string `input:"header,x-oss-defender-status,required"` + + // The request body schema. + BucketAntiDDOSConfiguration *BucketAntiDDOSConfiguration `input:"body,AntiDDOSConfiguration,xml"` + + RequestCommon +} + +type UpdateBucketAntiDDosInfoResult struct { + ResultCommon +} + +// UpdateBucketAntiDDosInfo Updates the status of an Anti-DDoS instance of a bucket. +func (c *Client) UpdateBucketAntiDDosInfo(ctx context.Context, request *UpdateBucketAntiDDosInfoRequest, optFns ...func(*Options)) (*UpdateBucketAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &UpdateBucketAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "UpdateBucketAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &UpdateBucketAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} + +type ListBucketAntiDDosInfoRequest struct { + // The name of the Anti-DDoS instance from which the list starts. The Anti-DDoS instances whose names are alphabetically after the value of marker are returned. You can set marker to an empty string in the first request. If IsTruncated is returned in the response and the value of IsTruncated is true, you must use the value of Marker in the response as the value of marker in the next request. + Marker *string `input:"query,marker"` + + // The maximum number of Anti-DDoS instances that can be returned.Valid values: 1 to 100.Default value: 100. + MaxKeys *string `input:"query,max-keys"` + + RequestCommon +} + +type ListBucketAntiDDosInfoResult struct { + // The container that stores the protection list of an Anti-DDoS instance of a bucket. + AntiDDOSListConfiguration *AntiDDOSListConfiguration `output:"body,AntiDDOSListConfiguration,xml"` + + ResultCommon +} + +// ListBucketAntiDDosInfo Queries the protection list of an Anti-DDoS instance of a bucket. +func (c *Client) ListBucketAntiDDosInfo(ctx context.Context, request *ListBucketAntiDDosInfoRequest, optFns ...func(*Options)) (*ListBucketAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &ListBucketAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "ListBucketAntiDDosInfo", + Method: "GET", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "bucketAntiDDos": "", + }, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &ListBucketAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} + +type InitUserAntiDDosInfoRequest struct { + RequestCommon +} + +type InitUserAntiDDosInfoResult struct { + // The ID of the Anti-DDoS instance. + DefenderInstance *string `output:"header,x-oss-defender-instance"` + + ResultCommon +} + +// InitUserAntiDDosInfo Creates an Anti-DDoS instance. +func (c *Client) InitUserAntiDDosInfo(ctx context.Context, request *InitUserAntiDDosInfoRequest, optFns ...func(*Options)) (*InitUserAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &InitUserAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "InitUserAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &InitUserAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} + +type InitBucketAntiDDosInfoRequest struct { + // The name of the bucket. + Bucket *string `input:"host,bucket,required"` + + // The ID of the Anti-DDoS instance. + DefenderInstance *string `input:"header,x-oss-defender-instance,required"` + + // The type of the Anti-DDoS instance. Set the value to AntiDDos Premimum. + DefenderType *string `input:"header,x-oss-defender-type,required"` + + // The request body schema. + BucketAntiDDOSConfiguration *BucketAntiDDOSConfiguration `input:"body,AntiDDOSConfiguration,xml"` + + RequestCommon +} + +type InitBucketAntiDDosInfoResult struct { + // The ID of the Anti-DDoS instance. + DefenderInstance *string `output:"header,x-oss-defender-instance"` + + ResultCommon +} + +// InitBucketAntiDDosInfo Initializes an Anti-DDoS instance for a bucket. +func (c *Client) InitBucketAntiDDosInfo(ctx context.Context, request *InitBucketAntiDDosInfoRequest, optFns ...func(*Options)) (*InitBucketAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &InitBucketAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "InitBucketAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &InitBucketAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} + +type GetUserAntiDDosInfoRequest struct { + RequestCommon +} + +type GetUserAntiDDosInfoResult struct { + // The container that stores information about the Anti-DDoS instance. + AntiDDOSConfigurations []UserAntiDDOSInfo `xml:"AntiDDOSConfiguration"` + + ResultCommon +} + +// GetUserAntiDDosInfo Queries the information about an Anti-DDoS instance of an Alibaba Cloud account. +func (c *Client) GetUserAntiDDosInfo(ctx context.Context, request *GetUserAntiDDosInfoRequest, optFns ...func(*Options)) (*GetUserAntiDDosInfoResult, error) { + var err error + if request == nil { + request = &GetUserAntiDDosInfoRequest{} + } + input := &OperationInput{ + OpName: "GetUserAntiDDosInfo", + Method: "GET", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + if err = c.marshalInput(request, input, updateContentMd5); err != nil { + return nil, err + } + output, err := c.invokeOperation(ctx, input, optFns) + if err != nil { + return nil, err + } + + result := &GetUserAntiDDosInfoResult{} + + if err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix); err != nil { + return nil, c.toClientError(err, "UnmarshalOutputFail", output) + } + + return result, err +} diff --git a/oss/api_op_bucket_antiddos_test.go b/oss/api_op_bucket_antiddos_test.go new file mode 100644 index 0000000..e11091f --- /dev/null +++ b/oss/api_op_bucket_antiddos_test.go @@ -0,0 +1,777 @@ +package oss + +import ( + "bytes" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestMarshalInput_InitUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *InitUserAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &InitUserAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "InitUserAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_InitUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "x-oss-defender-instance": {"cbcac8d2-4f75-4d6d-9f2e-c3447f73****"}, + }, + } + result := &InitUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, *result.DefenderInstance, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &InitUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body := ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &InitUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} + +func TestMarshalInput_UpdateUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *UpdateUserAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &UpdateUserAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "UpdateUserAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderInstance") + + request = &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + } + input = &OperationInput{ + OpName: "UpdateUserAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderStatus") + + request = &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("HaltDefending"), + } + input = &OperationInput{ + OpName: "UpdateUserAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_UpdateUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + }, + } + result := &UpdateUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &UpdateUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body := ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &UpdateUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} + +func TestMarshalInput_GetUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *GetUserAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &GetUserAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "GetUserAntiDDosInfo", + Method: "GET", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + } + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_GetUserAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + body := ` + + + cbcac8d2-4f75-4d6d-9f2e-c3447f73**** + 114893010724**** + 12345667 + 12345667 + 12345680 + Init + + ` + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + }, + } + result := &GetUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, len(result.AntiDDOSConfigurations), 1) + assert.Equal(t, *result.AntiDDOSConfigurations[0].InstanceId, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + assert.Equal(t, *result.AntiDDOSConfigurations[0].Owner, "114893010724****") + assert.Equal(t, *result.AntiDDOSConfigurations[0].Ctime, int64(12345667)) + assert.Equal(t, *result.AntiDDOSConfigurations[0].Mtime, int64(12345667)) + assert.Equal(t, *result.AntiDDOSConfigurations[0].ActiveTime, int64(12345680)) + assert.Equal(t, *result.AntiDDOSConfigurations[0].Status, "Init") + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &GetUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body = ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &GetUserAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} + +func TestMarshalInput_InitBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *InitBucketAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &InitBucketAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "InitBucketAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, Bucket.") + + request = &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + } + input = &OperationInput{ + OpName: "InitBucketAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderInstance.") + + request = &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + } + input = &OperationInput{ + OpName: "InitBucketAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderType.") + + request = &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + } + input = &OperationInput{ + OpName: "InitBucketAntiDDosInfo", + Method: "PUT", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_InitBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "x-oss-defender-instance": {"cbcac8d2-4f75-4d6d-9f2e-c3447f73****"}, + }, + } + result := &InitBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, *result.DefenderInstance, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + + output = &OperationOutput{ + StatusCode: 404, + Status: "NoSuchBucket", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &InitBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 404) + assert.Equal(t, result.Status, "NoSuchBucket") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &InitBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body := ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &InitBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalHeader, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} + +func TestMarshalInput_UpdateBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *UpdateBucketAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &UpdateBucketAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "UpdateBucketAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, Bucket.") + + request = &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + } + input = &OperationInput{ + OpName: "UpdateBucketAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderInstance.") + + request = &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + } + input = &OperationInput{ + OpName: "UpdateBucketAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + err = c.marshalInput(request, input, updateContentMd5) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "missing required field, DefenderStatus.") + + request = &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + } + input = &OperationInput{ + OpName: "UpdateBucketAntiDDosInfo", + Method: "POST", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "antiDDos": "", + }, + Bucket: request.Bucket, + } + + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_UpdateBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + }, + } + result := &UpdateBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + + output = &OperationOutput{ + StatusCode: 404, + Status: "NoSuchBucket", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &UpdateBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 404) + assert.Equal(t, result.Status, "NoSuchBucket") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &UpdateBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body := ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &UpdateBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} + +func TestMarshalInput_ListBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var request *ListBucketAntiDDosInfoRequest + var input *OperationInput + var err error + + request = &ListBucketAntiDDosInfoRequest{} + input = &OperationInput{ + OpName: "ListBucketAntiDDosInfo", + Method: "GET", + Headers: map[string]string{ + HTTPHeaderContentType: contentTypeXML, + }, + Parameters: map[string]string{ + "bucketAntiDDos": "", + }, + } + err = c.marshalInput(request, input, updateContentMd5) + assert.Nil(t, err) +} + +func TestUnmarshalOutput_ListBucketAntiDDosInfo(t *testing.T) { + c := Client{} + assert.NotNil(t, c) + var output *OperationOutput + var err error + body := ` + + nextMarker + true + + cbcac8d2-4f75-4d6d-9f2e-c3447f73**** + 114893010724**** + examplebucket + 1626769503 + 1626769840 + 1626769845 + Defending + AntiDDosPremimum + + abc1.example.cn + abc2.example.cn + + + + cbcae8u6-4f75-4d6d-9f2e-c3446g89**** + 1148930107246818 + test-antiddos2 + 1626769993 + 1626769993 + 0 + Init + AntiDDosPremimum + + abc3.example.cn + abc4.example.cn + + +` + output = &OperationOutput{ + StatusCode: 200, + Status: "OK", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + }, + } + result := &ListBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 200) + assert.Equal(t, result.Status, "OK") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.True(t, *result.AntiDDOSListConfiguration.IsTruncated) + assert.Equal(t, *result.AntiDDOSListConfiguration.Marker, "nextMarker") + assert.Equal(t, len(result.AntiDDOSListConfiguration.AntiDDOSConfigurations), 2) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].InstanceId, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Owner, "114893010724****") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Bucket, "examplebucket") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Ctime, int64(1626769503)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Mtime, int64(1626769840)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].ActiveTime, int64(1626769845)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Status, "Defending") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Type, "AntiDDosPremimum") + assert.Equal(t, len(result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains), 2) + assert.Equal(t, result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[0], "abc1.example.cn") + assert.Equal(t, result.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[1], "abc2.example.cn") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].InstanceId, "cbcae8u6-4f75-4d6d-9f2e-c3446g89****") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Owner, "1148930107246818") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Bucket, "test-antiddos2") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Ctime, int64(1626769993)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Mtime, int64(1626769993)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].ActiveTime, int64(0)) + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Status, "Init") + assert.Equal(t, *result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Type, "AntiDDosPremimum") + assert.Equal(t, len(result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains), 2) + assert.Equal(t, result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains[0], "abc3.example.cn") + assert.Equal(t, result.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains[1], "abc4.example.cn") + + output = &OperationOutput{ + StatusCode: 400, + Status: "InvalidArgument", + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &ListBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 400) + assert.Equal(t, result.Status, "InvalidArgument") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") + + body = ` + + AccessDenied + AccessDenied + 568D5566F2D0F89F5C0E**** + test.oss.aliyuncs.com +` + output = &OperationOutput{ + StatusCode: 403, + Status: "AccessDenied", + Body: io.NopCloser(bytes.NewReader([]byte(body))), + Headers: http.Header{ + "X-Oss-Request-Id": {"534B371674E88A4D8906****"}, + "Content-Type": {"application/xml"}, + }, + } + result = &ListBucketAntiDDosInfoResult{} + err = c.unmarshalOutput(result, output, unmarshalBodyXmlMix) + assert.Nil(t, err) + assert.Equal(t, result.StatusCode, 403) + assert.Equal(t, result.Status, "AccessDenied") + assert.Equal(t, result.Headers.Get("X-Oss-Request-Id"), "534B371674E88A4D8906****") + assert.Equal(t, result.Headers.Get("Content-Type"), "application/xml") +} diff --git a/oss/client_integration_test.go b/oss/client_integration_test.go index 9b52fec..92c2816 100644 --- a/oss/client_integration_test.go +++ b/oss/client_integration_test.go @@ -7882,3 +7882,112 @@ func TestBucketPublicAccessBlock(t *testing.T) { assert.Equal(t, "0002-00000902", serr.EC) assert.NotEmpty(t, serr.RequestID) } + +func TestAntiDDosInfo(t *testing.T) { + after := before(t) + defer after(t) + //TODO + bucketName := bucketNamePrefix + randLowStr(6) + request := &PutBucketRequest{ + Bucket: Ptr(bucketName), + } + client := getDefaultClient() + _, err := client.PutBucket(context.TODO(), request) + assert.Nil(t, err) + + initUserResult, err := client.InitUserAntiDDosInfo(context.TODO(), &InitUserAntiDDosInfoRequest{}) + assert.Nil(t, err) + assert.Equal(t, 200, initUserResult.StatusCode) + assert.NotEmpty(t, initUserResult.Headers.Get("X-Oss-Request-Id")) + assert.NotEmpty(t, *initUserResult.DefenderInstance) + time.Sleep(1 * time.Second) + + getUserResult, err := client.GetUserAntiDDosInfo(context.TODO(), &GetUserAntiDDosInfoRequest{}) + assert.Nil(t, err) + assert.Equal(t, 200, getUserResult.StatusCode) + assert.NotEmpty(t, getUserResult.Headers.Get("X-Oss-Request-Id")) + assert.True(t, len(getUserResult.AntiDDOSConfigurations) > 0) + time.Sleep(1 * time.Second) + + listResult, err := client.ListBucketAntiDDosInfo(context.TODO(), &ListBucketAntiDDosInfoRequest{}) + assert.Nil(t, err) + assert.Equal(t, 200, listResult.StatusCode) + assert.NotEmpty(t, listResult.Headers.Get("X-Oss-Request-Id")) + assert.True(t, len(listResult.AntiDDOSListConfiguration.AntiDDOSConfigurations) == 0) + time.Sleep(1 * time.Second) + + updateUserResult, err := client.UpdateUserAntiDDosInfo(context.TODO(), &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: initUserResult.DefenderInstance, + DefenderStatus: Ptr("HaltDefending"), + }) + assert.Nil(t, err) + assert.Equal(t, 200, updateUserResult.StatusCode) + assert.NotEmpty(t, updateUserResult.Headers.Get("X-Oss-Request-Id")) + time.Sleep(1 * time.Second) + + var serr *ServiceError + clientErr := getClientWithCredentialsProvider(region_, endpoint_, credentials.NewStaticCredentialsProvider("not_exist_id", "not_exist_secret")) + _, err = clientErr.InitUserAntiDDosInfo(context.TODO(), &InitUserAntiDDosInfoRequest{}) + assert.NotNil(t, err) + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) + + getUserResult, err = clientErr.GetUserAntiDDosInfo(context.TODO(), &GetUserAntiDDosInfoRequest{}) + assert.NotNil(t, err) + serr = &ServiceError{} + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) + + _, err = clientErr.InitBucketAntiDDosInfo(context.TODO(), &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr(bucketName), + DefenderInstance: initUserResult.DefenderInstance, + DefenderType: Ptr("AntiDDosPremimum"), + }) + assert.NotNil(t, err) + serr = &ServiceError{} + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) + + listResult, err = clientErr.ListBucketAntiDDosInfo(context.TODO(), &ListBucketAntiDDosInfoRequest{}) + assert.NotNil(t, err) + serr = &ServiceError{} + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) + + _, err = clientErr.UpdateBucketAntiDDosInfo(context.TODO(), &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr(bucketName), + DefenderInstance: initUserResult.DefenderInstance, + DefenderStatus: Ptr("HaltDefending"), + }) + assert.NotNil(t, err) + serr = &ServiceError{} + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) + + updateUserResult, err = clientErr.UpdateUserAntiDDosInfo(context.TODO(), &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: initUserResult.DefenderInstance, + DefenderStatus: Ptr("HaltDefending"), + }) + assert.NotNil(t, err) + serr = &ServiceError{} + errors.As(err, &serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.NotEmpty(t, serr.RequestID) +} diff --git a/oss/client_mock_test.go b/oss/client_mock_test.go index 22fe729..1e9b0b4 100644 --- a/oss/client_mock_test.go +++ b/oss/client_mock_test.go @@ -26925,3 +26925,1278 @@ func TestMockDeleteBucketPublicAccessBlock_Error(t *testing.T) { c.CheckOutputFn(t, output, err) } } + +var testMockInitUserAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *InitUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *InitUserAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + "x-oss-defender-instance": "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &InitUserAntiDDosInfoRequest{}, + func(t *testing.T, o *InitUserAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", *o.DefenderInstance) + }, + }, +} + +func TestMockInitUserAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockInitUserAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.InitUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockInitUserAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *InitUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *InitUserAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + DuplicateActiveDefender + The defender is already actived. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 5C3D8D2A0ACA54D87B43**** +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &InitUserAntiDDosInfoRequest{}, + func(t *testing.T, o *InitUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "DuplicateActiveDefender", serr.Code) + assert.Equal(t, "The defender is already actived.", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + d + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &InitUserAntiDDosInfoRequest{}, + func(t *testing.T, o *InitUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, +} + +func TestMockInitUserAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockInitUserAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.InitUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockUpdateUserAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *UpdateUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "HaltDefending", r.Header.Get("x-oss-defender-status")) + + }, + &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("HaltDefending"), + }, + func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + }, + }, +} + +func TestMockUpdateUserAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockUpdateUserAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.UpdateUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockUpdateUserAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *UpdateUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidArgument + Invalid Argument + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + Status + Init + 0038-00000006 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + }, + func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "InvalidArgument", serr.Code) + assert.Equal(t, "Invalid Argument", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + assert.Equal(t, "0038-00000006", serr.EC) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("HaltDefending"), + }, + func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 404, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + NoSuchDefender + No such defender exist. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 5C3D8D2A0ACA54D87B43**** +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &UpdateUserAntiDDosInfoRequest{ + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("HaltDefending"), + }, + func(t *testing.T, o *UpdateUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(404), serr.StatusCode) + assert.Equal(t, "NoSuchDefender", serr.Code) + assert.Equal(t, "No such defender exist.", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, +} + +func TestMockUpdateUserAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockUpdateUserAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.UpdateUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockGetUserAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *GetUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + cbcac8d2-4f75-4d6d-9f2e-c3447f73**** + 114893010724**** + 12345667 + 12345667 + 12345680 + Init + + `), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &GetUserAntiDDosInfoRequest{}, + func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.Equal(t, len(o.AntiDDOSConfigurations), 1) + assert.Equal(t, *o.AntiDDOSConfigurations[0].InstanceId, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + assert.Equal(t, *o.AntiDDOSConfigurations[0].Owner, "114893010724****") + assert.Equal(t, *o.AntiDDOSConfigurations[0].Ctime, int64(12345667)) + assert.Equal(t, *o.AntiDDOSConfigurations[0].Mtime, int64(12345667)) + assert.Equal(t, *o.AntiDDOSConfigurations[0].ActiveTime, int64(12345680)) + assert.Equal(t, *o.AntiDDOSConfigurations[0].Status, "Init") + }, + }, +} + +func TestMockGetUserAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockGetUserAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.GetUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockGetUserAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *GetUserAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidArgument + Invalid Argument + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + Status + Init + 0038-00000006 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &GetUserAntiDDosInfoRequest{}, + func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "InvalidArgument", serr.Code) + assert.Equal(t, "Invalid Argument", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + assert.Equal(t, "0038-00000006", serr.EC) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &GetUserAntiDDosInfoRequest{}, + func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 200, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(`StrField1>StrField1StrField2<`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?antiDDos", urlStr) + }, + &GetUserAntiDDosInfoRequest{}, + func(t *testing.T, o *GetUserAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "execute GetUserAntiDDosInfo fail") + }, + }, +} + +func TestMockGetUserAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockGetUserAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.GetUserAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockInitBucketAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *InitBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + "x-oss-defender-instance": "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "AntiDDosPremimum", r.Header.Get("x-oss-defender-type")) + }, + &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + }, + func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", *o.DefenderInstance) + }, + }, + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + "x-oss-defender-instance": "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "AntiDDosPremimum", r.Header.Get("x-oss-defender-type")) + body, _ := io.ReadAll(r.Body) + assert.Equal(t, string(body), "abc1.example.cnabc2.example.cn") + }, + &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + BucketAntiDDOSConfiguration: &BucketAntiDDOSConfiguration{ + []string{ + "abc1.example.cn", + "abc2.example.cn", + }, + }, + }, + func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", *o.DefenderInstance) + }, + }, +} + +func TestMockInitBucketAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockInitBucketAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.InitBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockInitBucketAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *InitBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidArgument + Invalid Argument + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 0038-00000006 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "AntiDDosPremimum", r.Header.Get("x-oss-defender-type")) + }, + &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + }, + func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "InvalidArgument", serr.Code) + assert.Equal(t, "Invalid Argument", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + assert.Equal(t, "0038-00000006", serr.EC) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + d + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "AntiDDosPremimum", r.Header.Get("x-oss-defender-type")) + }, + &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + }, + func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 404, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + NoSuchDefender + No such defender exist. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 5C3D8D2A0ACA54D87B43**** +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "AntiDDosPremimum", r.Header.Get("x-oss-defender-type")) + }, + &InitBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderType: Ptr("AntiDDosPremimum"), + }, + func(t *testing.T, o *InitBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(404), serr.StatusCode) + assert.Equal(t, "NoSuchDefender", serr.Code) + assert.Equal(t, "No such defender exist.", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, +} + +func TestMockInitBucketAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockInitBucketAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.InitBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockUpdateBucketAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *UpdateBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "Init", r.Header.Get("x-oss-defender-status")) + }, + &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + }, + func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + }, + }, + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + "x-oss-defender-instance": "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", + }, + []byte(``), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "Init", r.Header.Get("x-oss-defender-status")) + body, _ := io.ReadAll(r.Body) + assert.Equal(t, string(body), "abc1.example.cnabc2.example.cn") + }, + &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + BucketAntiDDOSConfiguration: &BucketAntiDDOSConfiguration{ + []string{ + "abc1.example.cn", + "abc2.example.cn", + }, + }, + }, + func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + }, + }, +} + +func TestMockUpdateBucketAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockUpdateBucketAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.UpdateBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockUpdateBucketAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *UpdateBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidArgument + Invalid Argument + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 0038-00000006 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "Init", r.Header.Get("x-oss-defender-status")) + }, + &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + }, + func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "InvalidArgument", serr.Code) + assert.Equal(t, "Invalid Argument", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + assert.Equal(t, "0038-00000006", serr.EC) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + d + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "Init", r.Header.Get("x-oss-defender-status")) + }, + &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + }, + func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 404, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + NoSuchDefender + No such defender exist. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 5C3D8D2A0ACA54D87B43**** +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "POST", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/bucket/?antiDDos", urlStr) + assert.Equal(t, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", r.Header.Get("x-oss-defender-instance")) + assert.Equal(t, "Init", r.Header.Get("x-oss-defender-status")) + }, + &UpdateBucketAntiDDosInfoRequest{ + Bucket: Ptr("bucket"), + DefenderInstance: Ptr("cbcac8d2-4f75-4d6d-9f2e-c3447f73****"), + DefenderStatus: Ptr("Init"), + }, + func(t *testing.T, o *UpdateBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(404), serr.StatusCode) + assert.Equal(t, "NoSuchDefender", serr.Code) + assert.Equal(t, "No such defender exist.", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, +} + +func TestMockUpdateBucketAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockUpdateBucketAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.UpdateBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockListBucketAntiDDosInfoSuccessCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *ListBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) +}{ + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + nextMarker + true + + cbcac8d2-4f75-4d6d-9f2e-c3447f73**** + 114893010724**** + examplebucket + 1626769503 + 1626769840 + 1626769845 + Defending + AntiDDosPremimum + + abc1.example.cn + abc2.example.cn + + + + cbcae8u6-4f75-4d6d-9f2e-c3446g89**** + 1148930107246818 + test-antiddos2 + 1626769993 + 1626769993 + 0 + Init + AntiDDosPremimum + + abc3.example.cn + abc4.example.cn + + +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?bucketAntiDDos", urlStr) + }, + &ListBucketAntiDDosInfoRequest{}, + func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.True(t, *o.AntiDDOSListConfiguration.IsTruncated) + assert.Equal(t, *o.AntiDDOSListConfiguration.Marker, "nextMarker") + assert.Equal(t, len(o.AntiDDOSListConfiguration.AntiDDOSConfigurations), 2) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].InstanceId, "cbcac8d2-4f75-4d6d-9f2e-c3447f73****") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Owner, "114893010724****") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Bucket, "examplebucket") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Ctime, int64(1626769503)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Mtime, int64(1626769840)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].ActiveTime, int64(1626769845)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Status, "Defending") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Type, "AntiDDosPremimum") + assert.Equal(t, len(o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains), 2) + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[0], "abc1.example.cn") + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[1], "abc2.example.cn") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].InstanceId, "cbcae8u6-4f75-4d6d-9f2e-c3446g89****") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Owner, "1148930107246818") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Bucket, "test-antiddos2") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Ctime, int64(1626769993)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Mtime, int64(1626769993)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].ActiveTime, int64(0)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Status, "Init") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Type, "AntiDDosPremimum") + assert.Equal(t, len(o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains), 2) + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains[0], "abc3.example.cn") + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[1].Domains[1], "abc4.example.cn") + }, + }, + { + 200, + map[string]string{ + "x-oss-request-id": "534B371674E88A4D8906****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + "x-oss-defender-instance": "cbcac8d2-4f75-4d6d-9f2e-c3447f73****", + }, + []byte(` + nextMarker + true + + cbcae8u6-4f75-4d6d-9f2e-c3446g89**** + 1148930107246818 + test-antiddos2 + 1626769993 + 1626769993 + 0 + Init + AntiDDosPremimum + + abc3.example.cn + abc4.example.cn + + +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?bucketAntiDDos&marker=marker&max-keys=1", urlStr) + }, + &ListBucketAntiDDosInfoRequest{ + Marker: Ptr("marker"), + MaxKeys: Ptr("1"), + }, + func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) { + assert.Equal(t, 200, o.StatusCode) + assert.Equal(t, "200 OK", o.Status) + assert.Equal(t, "534B371674E88A4D8906****", o.Headers.Get("x-oss-request-id")) + assert.Equal(t, "Fri, 24 Feb 2017 03:15:40 GMT", o.Headers.Get("Date")) + assert.True(t, *o.AntiDDOSListConfiguration.IsTruncated) + assert.Equal(t, *o.AntiDDOSListConfiguration.Marker, "nextMarker") + assert.Equal(t, len(o.AntiDDOSListConfiguration.AntiDDOSConfigurations), 1) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].InstanceId, "cbcae8u6-4f75-4d6d-9f2e-c3446g89****") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Owner, "1148930107246818") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Bucket, "test-antiddos2") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Ctime, int64(1626769993)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Mtime, int64(1626769993)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].ActiveTime, int64(0)) + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Status, "Init") + assert.Equal(t, *o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Type, "AntiDDosPremimum") + assert.Equal(t, len(o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains), 2) + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[0], "abc3.example.cn") + assert.Equal(t, o.AntiDDOSListConfiguration.AntiDDOSConfigurations[0].Domains[1], "abc4.example.cn") + }, + }, +} + +func TestMockListBucketAntiDDosInfo_Success(t *testing.T) { + for _, c := range testMockListBucketAntiDDosInfoSuccessCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.ListBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} + +var testMockListBucketAntiDDosInfoErrorCases = []struct { + StatusCode int + Headers map[string]string + Body []byte + CheckRequestFn func(t *testing.T, r *http.Request) + Request *ListBucketAntiDDosInfoRequest + CheckOutputFn func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) +}{ + { + 400, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidArgument + Invalid Argument + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + 0038-00000006 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?bucketAntiDDos", urlStr) + }, + &ListBucketAntiDDosInfoRequest{}, + func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(400), serr.StatusCode) + assert.Equal(t, "InvalidArgument", serr.Code) + assert.Equal(t, "Invalid Argument", serr.Message) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + assert.Equal(t, "0038-00000006", serr.EC) + }, + }, + { + 403, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(` + + InvalidAccessKeyId + The OSS Access Key Id you provided does not exist in our records. + 5C3D8D2A0ACA54D87B43**** + oss-cn-hangzhou.aliyuncs.com + d + 0002-00000902 +`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?bucketAntiDDos", urlStr) + }, + &ListBucketAntiDDosInfoRequest{}, + func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + var serr *ServiceError + errors.As(err, &serr) + assert.NotNil(t, serr) + assert.Equal(t, int(403), serr.StatusCode) + assert.Equal(t, "InvalidAccessKeyId", serr.Code) + assert.Equal(t, "The OSS Access Key Id you provided does not exist in our records.", serr.Message) + assert.Equal(t, "0002-00000902", serr.EC) + assert.Equal(t, "5C3D8D2A0ACA54D87B43****", serr.RequestID) + }, + }, + { + 200, + map[string]string{ + "Content-Type": "application/xml", + "x-oss-request-id": "5C3D8D2A0ACA54D87B43****", + "Date": "Fri, 24 Feb 2017 03:15:40 GMT", + }, + []byte(`StrField1>StrField1StrField2<`), + func(t *testing.T, r *http.Request) { + assert.Equal(t, "GET", r.Method) + urlStr := sortQuery(r) + assert.Equal(t, "/?bucketAntiDDos", urlStr) + }, + &ListBucketAntiDDosInfoRequest{}, + func(t *testing.T, o *ListBucketAntiDDosInfoResult, err error) { + assert.Nil(t, o) + assert.NotNil(t, err) + assert.Contains(t, err.Error(), "execute ListBucketAntiDDosInfo fail") + }, + }, +} + +func TestMockListBucketAntiDDosInfo_Error(t *testing.T) { + for _, c := range testMockListBucketAntiDDosInfoErrorCases { + server := testSetupMockServer(t, c.StatusCode, c.Headers, c.Body, c.CheckRequestFn) + defer server.Close() + assert.NotNil(t, server) + + cfg := LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewAnonymousCredentialsProvider()). + WithRegion("cn-hangzhou"). + WithEndpoint(server.URL) + + client := NewClient(cfg) + assert.NotNil(t, c) + output, err := client.ListBucketAntiDDosInfo(context.TODO(), c.Request) + c.CheckOutputFn(t, output, err) + } +} diff --git a/sample/get_user_anti_ddos_info.go b/sample/get_user_anti_ddos_info.go new file mode 100644 index 0000000..c46cbbe --- /dev/null +++ b/sample/get_user_anti_ddos_info.go @@ -0,0 +1,40 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") +} + +func main() { + flag.Parse() + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.GetUserAntiDDosInfoRequest{} + result, err := client.GetUserAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to get user anti ddos info %v", err) + } + + log.Printf("init get anti ddos info result:%#v\n", result) +} diff --git a/sample/init_bucket_anti_ddos_info.go b/sample/init_bucket_anti_ddos_info.go new file mode 100644 index 0000000..4056926 --- /dev/null +++ b/sample/init_bucket_anti_ddos_info.go @@ -0,0 +1,54 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string + bucketName string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") + flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.") +} + +func main() { + flag.Parse() + var ( + instanceId = "defender instance id" + ) + if len(bucketName) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, bucket name required") + } + + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.InitBucketAntiDDosInfoRequest{ + Bucket: oss.Ptr(bucketName), + DefenderInstance: oss.Ptr(instanceId), + DefenderType: oss.Ptr("AntiDDosPremimum"), + } + result, err := client.InitBucketAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to init bucket anti ddos info %v", err) + } + + log.Printf("init bucket anti ddos info result:%#v\n", result) +} diff --git a/sample/init_user_anti_ddos_info.go b/sample/init_user_anti_ddos_info.go new file mode 100644 index 0000000..5ae15f5 --- /dev/null +++ b/sample/init_user_anti_ddos_info.go @@ -0,0 +1,40 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") +} + +func main() { + flag.Parse() + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.InitUserAntiDDosInfoRequest{} + result, err := client.InitUserAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to init user anti ddos info %v", err) + } + + log.Printf("init user anti ddos info result:%#v\n", result) +} diff --git a/sample/list_bucket_anti_ddos_info.go b/sample/list_bucket_anti_ddos_info.go new file mode 100644 index 0000000..5e7dd6e --- /dev/null +++ b/sample/list_bucket_anti_ddos_info.go @@ -0,0 +1,40 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") +} + +func main() { + flag.Parse() + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.ListBucketAntiDDosInfoRequest{} + result, err := client.ListBucketAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to list bucket anti ddos info %v", err) + } + + log.Printf("list bucket anti ddos info result:%#v\n", result) +} diff --git a/sample/update_bucket_anti_ddos_info.go b/sample/update_bucket_anti_ddos_info.go new file mode 100644 index 0000000..7788abc --- /dev/null +++ b/sample/update_bucket_anti_ddos_info.go @@ -0,0 +1,54 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string + bucketName string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") + flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.") +} + +func main() { + flag.Parse() + var ( + instanceId = "defender instance id" + ) + if len(bucketName) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, bucket name required") + } + + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.UpdateBucketAntiDDosInfoRequest{ + Bucket: oss.Ptr(bucketName), + DefenderInstance: oss.Ptr(instanceId), + DefenderStatus: oss.Ptr("Init"), + } + result, err := client.UpdateBucketAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to update bucket anti ddos info %v", err) + } + + log.Printf("update bucket anti ddos info result:%#v\n", result) +} diff --git a/sample/update_user_anti_ddos_info.go b/sample/update_user_anti_ddos_info.go new file mode 100644 index 0000000..aca58c7 --- /dev/null +++ b/sample/update_user_anti_ddos_info.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "flag" + "log" + + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" + "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" +) + +var ( + region string +) + +func init() { + flag.StringVar(®ion, "region", "", "The region in which the bucket is located.") +} + +func main() { + flag.Parse() + var ( + instanceId = "defender instance id" + ) + if len(bucketName) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, bucket name required") + } + + if len(region) == 0 { + flag.PrintDefaults() + log.Fatalf("invalid parameters, region required") + } + + cfg := oss.LoadDefaultConfig(). + WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). + WithRegion(region) + + client := oss.NewClient(cfg) + + request := &oss.UpdateUserAntiDDosInfoRequest{ + DefenderInstance: oss.Ptr(instanceId), + DefenderStatus: oss.Ptr("HaltDefending"), + } + result, err := client.UpdateUserAntiDDosInfo(context.TODO(), request) + if err != nil { + log.Fatalf("failed to update user anti ddos info %v", err) + } + + log.Printf("update user anti ddos info result:%#v\n", result) +}