def METHOD_NAME(self):
    key = KEY_PREFIX + random_string(16)
    init_tag_set = generate_tag_set()
    result = self.s3.put_object(Bucket=env.BUCKET, Key=key, Tagging=encode_tag_set(init_tag_set))
    self.assert_put_object_result(result=result)
    etag = result['ETag']
    self.assert_head_object_result(
        result=self.s3.head_object(Bucket=env.BUCKET, Key=key),
        etag=etag,
        content_length=0)
    self.assert_get_tagging_result(
        result=self.s3.get_object_tagging(Bucket=env.BUCKET, Key=key),
        expect_tag_set=init_tag_set)
    def run():
        tag_set = generate_tag_set(size=4, key_length=8, value_length=16)
        self.assert_put_tagging_result(
            result=self.s3.put_object_tagging(
                Bucket=env.BUCKET,
                Key=key,
                Tagging={'TagSet': tag_set}))
        self.assert_get_tagging_result(
            result=self.s3.get_object_tagging(Bucket=env.BUCKET, Key=key),
            expect_tag_set=tag_set)
        self.assert_delete_tagging_result(
            result=self.s3.delete_object_tagging(Bucket=env.BUCKET, Key=key))
        self.assert_get_tagging_result(
            result=self.s3.get_object_tagging(Bucket=env.BUCKET, Key=key),
            expect_tag_set=empty_tag_set)
    test_count = 0
    count = 0
    while count < test_count:
        run()
        count += 1
    # Clean up test data
    self.assert_delete_objects_result(
        result=self.s3.delete_objects(
            Bucket=env.BUCKET,
            Delete={
                'Objects': [
                    {'Key': key},
                    {'Key': KEY_PREFIX}
                ]
            }
        )
    )