Skip to content

Commit f184d83

Browse files
yangzong18huiguangjun
authored andcommitted
add bucket replication api
1 parent 6048a5f commit f184d83

11 files changed

+3260
-0
lines changed

oss/api_op_bucket_replication.go

Lines changed: 469 additions & 0 deletions
Large diffs are not rendered by default.

oss/api_op_bucket_replication_test.go

Lines changed: 977 additions & 0 deletions
Large diffs are not rendered by default.

oss/client_integration_test.go

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7196,3 +7196,216 @@ func TestBucketStyle(t *testing.T) {
71967196
assert.Equal(t, "0015-00000101", serr.EC)
71977197
assert.NotEmpty(t, serr.RequestID)
71987198
}
7199+
7200+
func TestBucketReplication(t *testing.T) {
7201+
after := before(t)
7202+
defer after(t)
7203+
//TODO
7204+
bucketName := bucketNamePrefix + randLowStr(6)
7205+
request := &PutBucketRequest{
7206+
Bucket: Ptr(bucketName),
7207+
}
7208+
client := getDefaultClient()
7209+
_, err := client.PutBucket(context.TODO(), request)
7210+
assert.Nil(t, err)
7211+
7212+
targetBucketName := bucketNamePrefix + "-target-" + randLowStr(6)
7213+
request = &PutBucketRequest{
7214+
Bucket: Ptr(targetBucketName),
7215+
}
7216+
client1 := getClient("cn-beijing", "http://oss-cn-beijing.aliyuncs.com")
7217+
_, err = client1.PutBucket(context.TODO(), request)
7218+
assert.Nil(t, err)
7219+
7220+
putRequest := &PutBucketReplicationRequest{
7221+
Bucket: Ptr(bucketName),
7222+
ReplicationConfiguration: &ReplicationConfiguration{
7223+
[]ReplicationRule{
7224+
{
7225+
RTC: &ReplicationTimeControl{
7226+
Status: Ptr("enabled"),
7227+
},
7228+
Destination: &ReplicationDestination{
7229+
Bucket: Ptr(targetBucketName),
7230+
Location: Ptr("oss-cn-beijing"),
7231+
TransferType: TransferTypeInternal,
7232+
},
7233+
HistoricalObjectReplication: HistoricalObjectReplicationEnabled,
7234+
SourceSelectionCriteria: &ReplicationSourceSelectionCriteria{
7235+
&SseKmsEncryptedObjects{
7236+
Status: StatusEnabled,
7237+
},
7238+
},
7239+
},
7240+
},
7241+
},
7242+
}
7243+
putResult, err := client.PutBucketReplication(context.TODO(), putRequest)
7244+
assert.Nil(t, err)
7245+
assert.Equal(t, 200, putResult.StatusCode)
7246+
assert.NotEmpty(t, putResult.Headers.Get("X-Oss-Request-Id"))
7247+
time.Sleep(1 * time.Second)
7248+
7249+
getRequest := &GetBucketReplicationRequest{
7250+
Bucket: Ptr(bucketName),
7251+
}
7252+
getResult, err := client.GetBucketReplication(context.TODO(), getRequest)
7253+
assert.Nil(t, err)
7254+
assert.Equal(t, 200, getResult.StatusCode)
7255+
assert.Equal(t, 1, len(getResult.ReplicationConfiguration.Rules))
7256+
time.Sleep(1 * time.Second)
7257+
7258+
getLocationRequest := &GetBucketReplicationLocationRequest{
7259+
Bucket: Ptr(bucketName),
7260+
}
7261+
getLocationResult, err := client.GetBucketReplicationLocation(context.TODO(), getLocationRequest)
7262+
assert.Nil(t, err)
7263+
assert.Equal(t, 200, getLocationResult.StatusCode)
7264+
time.Sleep(1 * time.Second)
7265+
7266+
getProgressRequest := &GetBucketReplicationProgressRequest{
7267+
Bucket: Ptr(bucketName),
7268+
RuleId: getResult.ReplicationConfiguration.Rules[0].ID,
7269+
}
7270+
getProgressResult, err := client.GetBucketReplicationProgress(context.TODO(), getProgressRequest)
7271+
assert.Nil(t, err)
7272+
assert.Equal(t, 200, getProgressResult.StatusCode)
7273+
assert.Equal(t, 1, len(getProgressResult.ReplicationProgress.Rules))
7274+
time.Sleep(1 * time.Second)
7275+
7276+
rtcRequest := &PutBucketRtcRequest{
7277+
Bucket: Ptr(bucketName),
7278+
RtcConfiguration: &RtcConfiguration{
7279+
RTC: &ReplicationTimeControl{
7280+
Status: Ptr("disabled"),
7281+
},
7282+
ID: getResult.ReplicationConfiguration.Rules[0].ID,
7283+
},
7284+
}
7285+
rtcResult, err := client.PutBucketRtc(context.TODO(), rtcRequest)
7286+
assert.Nil(t, err)
7287+
assert.Equal(t, 200, rtcResult.StatusCode)
7288+
assert.NotEmpty(t, rtcResult.Headers.Get("X-Oss-Request-Id"))
7289+
time.Sleep(1 * time.Second)
7290+
7291+
delRequest := &DeleteBucketReplicationRequest{
7292+
Bucket: Ptr(bucketName),
7293+
ReplicationRules: &ReplicationRules{
7294+
[]string{*getResult.ReplicationConfiguration.Rules[0].ID},
7295+
},
7296+
}
7297+
delResult, err := client.DeleteBucketReplication(context.TODO(), delRequest)
7298+
assert.Nil(t, err)
7299+
assert.Equal(t, 200, delResult.StatusCode)
7300+
time.Sleep(1 * time.Second)
7301+
7302+
var serr *ServiceError
7303+
bucketNameNotExist := bucketName + "-not-exist"
7304+
putRequest = &PutBucketReplicationRequest{
7305+
Bucket: Ptr(bucketNameNotExist),
7306+
ReplicationConfiguration: &ReplicationConfiguration{
7307+
[]ReplicationRule{
7308+
{
7309+
RTC: &ReplicationTimeControl{
7310+
Status: Ptr("enabled"),
7311+
},
7312+
Destination: &ReplicationDestination{
7313+
Bucket: Ptr(targetBucketName),
7314+
Location: Ptr("oss-cn-cn-hangzhou"),
7315+
TransferType: TransferTypeOssAcc,
7316+
},
7317+
HistoricalObjectReplication: HistoricalObjectReplicationEnabled,
7318+
SourceSelectionCriteria: &ReplicationSourceSelectionCriteria{
7319+
&SseKmsEncryptedObjects{
7320+
Status: StatusEnabled,
7321+
},
7322+
},
7323+
},
7324+
},
7325+
},
7326+
}
7327+
putResult, err = client.PutBucketReplication(context.TODO(), putRequest)
7328+
assert.NotNil(t, err)
7329+
errors.As(err, &serr)
7330+
assert.Equal(t, int(404), serr.StatusCode)
7331+
assert.Equal(t, "NoSuchBucket", serr.Code)
7332+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7333+
assert.Equal(t, "0015-00000101", serr.EC)
7334+
assert.NotEmpty(t, serr.RequestID)
7335+
time.Sleep(1 * time.Second)
7336+
7337+
getRequest = &GetBucketReplicationRequest{
7338+
Bucket: Ptr(bucketNameNotExist),
7339+
}
7340+
_, err = client.GetBucketReplication(context.TODO(), getRequest)
7341+
assert.NotNil(t, err)
7342+
serr = &ServiceError{}
7343+
errors.As(err, &serr)
7344+
assert.Equal(t, int(404), serr.StatusCode)
7345+
assert.Equal(t, "NoSuchBucket", serr.Code)
7346+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7347+
assert.Equal(t, "0015-00000101", serr.EC)
7348+
assert.NotEmpty(t, serr.RequestID)
7349+
7350+
getLocationRequest = &GetBucketReplicationLocationRequest{
7351+
Bucket: Ptr(bucketNameNotExist),
7352+
}
7353+
getLocationResult, err = client.GetBucketReplicationLocation(context.TODO(), getLocationRequest)
7354+
assert.NotNil(t, err)
7355+
serr = &ServiceError{}
7356+
errors.As(err, &serr)
7357+
assert.Equal(t, int(404), serr.StatusCode)
7358+
assert.Equal(t, "NoSuchBucket", serr.Code)
7359+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7360+
assert.Equal(t, "0015-00000101", serr.EC)
7361+
assert.NotEmpty(t, serr.RequestID)
7362+
7363+
getProgressRequest = &GetBucketReplicationProgressRequest{
7364+
Bucket: Ptr(bucketNameNotExist),
7365+
RuleId: getResult.ReplicationConfiguration.Rules[0].ID,
7366+
}
7367+
getProgressResult, err = client.GetBucketReplicationProgress(context.TODO(), getProgressRequest)
7368+
assert.NotNil(t, err)
7369+
serr = &ServiceError{}
7370+
errors.As(err, &serr)
7371+
assert.Equal(t, int(404), serr.StatusCode)
7372+
assert.Equal(t, "NoSuchBucket", serr.Code)
7373+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7374+
assert.Equal(t, "0015-00000101", serr.EC)
7375+
assert.NotEmpty(t, serr.RequestID)
7376+
7377+
rtcRequest = &PutBucketRtcRequest{
7378+
Bucket: Ptr(bucketNameNotExist),
7379+
RtcConfiguration: &RtcConfiguration{
7380+
RTC: &ReplicationTimeControl{
7381+
Status: Ptr("disabled"),
7382+
},
7383+
ID: getResult.ReplicationConfiguration.Rules[0].ID,
7384+
},
7385+
}
7386+
rtcResult, err = client.PutBucketRtc(context.TODO(), rtcRequest)
7387+
assert.NotNil(t, err)
7388+
serr = &ServiceError{}
7389+
errors.As(err, &serr)
7390+
assert.Equal(t, int(404), serr.StatusCode)
7391+
assert.Equal(t, "NoSuchBucket", serr.Code)
7392+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7393+
assert.Equal(t, "0015-00000101", serr.EC)
7394+
assert.NotEmpty(t, serr.RequestID)
7395+
7396+
delRequest = &DeleteBucketReplicationRequest{
7397+
Bucket: Ptr(bucketNameNotExist),
7398+
ReplicationRules: &ReplicationRules{
7399+
[]string{*getResult.ReplicationConfiguration.Rules[0].ID},
7400+
},
7401+
}
7402+
delResult, err = client.DeleteBucketReplication(context.TODO(), delRequest)
7403+
assert.NotNil(t, err)
7404+
serr = &ServiceError{}
7405+
errors.As(err, &serr)
7406+
assert.Equal(t, int(404), serr.StatusCode)
7407+
assert.Equal(t, "NoSuchBucket", serr.Code)
7408+
assert.Equal(t, "The specified bucket does not exist.", serr.Message)
7409+
assert.Equal(t, "0015-00000101", serr.EC)
7410+
assert.NotEmpty(t, serr.RequestID)
7411+
}

0 commit comments

Comments
 (0)