@@ -3946,3 +3946,99 @@ def test_bucket_replicaion_reject_objectlock_identical():
39463946 }]
39473947 })
39483948 assert e .response ['ResponseMetadata' ]['HTTPStatusCode' ] == 400
3949+
3950+ @allow_bucket_replication
3951+ def test_bucket_replication_non_versioned_to_versioned ():
3952+ zonegroup = realm .master_zonegroup ()
3953+ zonegroup_conns = ZonegroupConns (zonegroup )
3954+
3955+ source = zonegroup_conns .non_account_rw_zones [0 ]
3956+ dest = zonegroup_conns .non_account_rw_zones [1 ]
3957+
3958+ source_bucket = source .create_bucket (gen_bucket_name ())
3959+ dest_bucket = dest .create_bucket (gen_bucket_name ())
3960+ zonegroup_meta_checkpoint (zonegroup )
3961+
3962+ # create replication configuration
3963+ response = source .s3_client .put_bucket_replication (
3964+ Bucket = source_bucket .name ,
3965+ ReplicationConfiguration = {
3966+ 'Role' : '' ,
3967+ 'Rules' : [
3968+ {
3969+ 'ID' : 'rule1' ,
3970+ 'Status' : 'Enabled' ,
3971+ 'Destination' : {
3972+ 'Bucket' : f'arn:aws:s3:::{ dest_bucket .name } ' ,
3973+ }
3974+ }
3975+ ]
3976+ }
3977+ )
3978+ assert response ['ResponseMetadata' ]['HTTPStatusCode' ] == 200
3979+ zonegroup_meta_checkpoint (zonegroup )
3980+
3981+ # enable versioning on destination bucket
3982+ dest .s3_client .put_bucket_versioning (
3983+ Bucket = dest_bucket .name ,
3984+ VersioningConfiguration = {'Status' : 'Enabled' }
3985+ )
3986+ zonegroup_meta_checkpoint (zonegroup )
3987+
3988+ # upload an object and wait for sync.
3989+ objname = 'dummy'
3990+ k = new_key (source , source_bucket , objname )
3991+ k .set_contents_from_string ('foo' )
3992+ zone_data_checkpoint (dest .zone , source .zone )
3993+
3994+ # check that object not exists in destination bucket
3995+ e = assert_raises (ClientError , dest .s3_client .get_object , Bucket = dest_bucket .name , Key = objname )
3996+ assert e .response ['Error' ]['Code' ] == 'NoSuchKey'
3997+
3998+ @allow_bucket_replication
3999+ def test_bucket_replication_versioned_to_non_versioned ():
4000+ zonegroup = realm .master_zonegroup ()
4001+ zonegroup_conns = ZonegroupConns (zonegroup )
4002+
4003+ source = zonegroup_conns .non_account_rw_zones [0 ]
4004+ dest = zonegroup_conns .non_account_rw_zones [1 ]
4005+
4006+ source_bucket = source .create_bucket (gen_bucket_name ())
4007+ dest_bucket = dest .create_bucket (gen_bucket_name ())
4008+ zonegroup_meta_checkpoint (zonegroup )
4009+
4010+ # create replication configuration
4011+ response = source .s3_client .put_bucket_replication (
4012+ Bucket = source_bucket .name ,
4013+ ReplicationConfiguration = {
4014+ 'Role' : '' ,
4015+ 'Rules' : [
4016+ {
4017+ 'ID' : 'rule1' ,
4018+ 'Status' : 'Enabled' ,
4019+ 'Destination' : {
4020+ 'Bucket' : f'arn:aws:s3:::{ dest_bucket .name } ' ,
4021+ }
4022+ }
4023+ ]
4024+ }
4025+ )
4026+ assert response ['ResponseMetadata' ]['HTTPStatusCode' ] == 200
4027+ zonegroup_meta_checkpoint (zonegroup )
4028+
4029+ # enable versioning on source bucket
4030+ source .s3_client .put_bucket_versioning (
4031+ Bucket = source_bucket .name ,
4032+ VersioningConfiguration = {'Status' : 'Enabled' }
4033+ )
4034+ zonegroup_meta_checkpoint (zonegroup )
4035+
4036+ # upload an object and wait for sync.
4037+ objname = 'dummy'
4038+ k = new_key (source , source_bucket , objname )
4039+ k .set_contents_from_string ('foo' )
4040+ zone_data_checkpoint (dest .zone , source .zone )
4041+
4042+ # check that object not exists in destination bucket
4043+ e = assert_raises (ClientError , dest .s3_client .get_object , Bucket = dest_bucket .name , Key = objname )
4044+ assert e .response ['Error' ]['Code' ] == 'NoSuchKey'
0 commit comments