溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

lifecycle功能測(cè)試方法是什么

發(fā)布時(shí)間:2021-12-30 16:38:46 來源:億速云 閱讀:125 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“l(fā)ifecycle功能測(cè)試方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“l(fā)ifecycle功能測(cè)試方法是什么”吧!

lifecycle功能測(cè)試

功能描述:
1.目前從k版本開始支持lifecycle,且僅支持Expired,既過期對(duì)象刪除。
2.AWS4認(rèn)證下無法進(jìn)行l(wèi)ifecycle的修改操作,HTTP層面會(huì)出現(xiàn)501錯(cuò)誤。
3.boto和boto3可以支持AWS2認(rèn)證下的get和put操作,測(cè)試功能可用。
4.測(cè)試發(fā)現(xiàn)先對(duì)bucket進(jìn)行g(shù)et_lifecycle操作,如果返回404,則對(duì)應(yīng)的response的內(nèi)容不完整,之后的一次request請(qǐng)求中的response會(huì)被污染。

get_bucket_lifecycle 測(cè)試用例
boto3用例
import boto3
from botocore.client import Config

aws_access_key_id = ''
aws_secret_access_key = ''
bucket_name = 'test1'

# aws4
s3 = boto3.client('s3', region_name='CN',
                  use_ssl=False,
                  endpoint_url='http://ceph.work',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key,
                  config=Config(signature_version='s3v4',
                                s3={'addressing_style': 'virtual'}))

# aws2
s3 = boto3.client('s3', region_name=None,
                  use_ssl=False,
                  endpoint_url='http://ceph.work',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key,
                  config=Config(s3={'addressing_style': 'virtual'}))


print s3.get_bucket_lifecycle(Bucket=bucket_name)
print s3.get_bucket_lifecycle_configuration(Bucket=bucket_name)
boto用例
from boto.s3.connection import S3Connection
import boto

# import os
# os.environ['S3_USE_SIGV4'] = 'True' #use aws4


access_key = ''
secret_key = ''
host = 'ceph.work'
bucket_name = 'test1'

conn = boto.connect_s3(
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    host=host,
    is_secure=False,
    calling_format=boto.s3.connection.SubdomainCallingFormat(),
    validate_certs=True,
)

bucket = conn.get_bucket(bucket_name)
config = bucket.get_lifecycle_config()
for i in config:
    print i.endElement
    print i.expiration
    print i.id
    print i.startElement
    print i.to_xml()
put_bucket_lifecycle 測(cè)試用例
boto3用例
import boto3
from botocore.client import Config
import datetime

aws_access_key_id = ''
aws_secret_access_key = ''
bucket_name = 'test1'

#aws2 可用
s3 = boto3.client('s3', region_name=None,
                  use_ssl=False,
                  endpoint_url='http://ceph.work',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key,
                  config=Config(s3={'addressing_style': 'virtual'}))


#aws4 錯(cuò)誤,返回501
s3 = boto3.client('s3', region_name='CN',
                  use_ssl=False,
                  endpoint_url='http://ceph.work',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key,
                  config=Config(signature_version='s3v4',
                                s3={'addressing_style': 'virtual'}))

print s3.put_bucket_lifecycle(
    Bucket=bucket_name,
    LifecycleConfiguration={
        'Rules': [
            {
                'Expiration': {
                    'Date': datetime.datetime(2015, 3, 15),
                    'Days': 123,
                    'ExpiredObjectDeleteMarker': True|False
                },
                'ID': 'demo1',
                'Prefix': '/abc',
                'Status': 'Enabled',
                'Transition': {
                    'Date': datetime.datetime(2017, 3, 15),
                    'Days': 123,
                    'StorageClass': 'STANDARD_IA'
                },
                'NoncurrentVersionTransition': {
                    'NoncurrentDays': 123,
                    'StorageClass': 'STANDARD_IA'
                },
                'NoncurrentVersionExpiration': {
                    'NoncurrentDays': 123
                },
                'AbortIncompleteMultipartUpload': {
                    'DaysAfterInitiation': 123
                }
            },
        ]
    }
)

501錯(cuò)誤提示,應(yīng)該是官方還沒完成該部分特性。

<?xml version="1.0" encoding="UTF-8"?><Error><Code>NotImplemented</Code><RequestId>tx000000000000000000056-0058d0d70b-10b2-default</RequestId><HostId>10b2-default-default</HostId></Error>
boto用例
from boto.s3.connection import S3Connection
import boto
import boto.s3.lifecycle
import os
# os.environ['S3_USE_SIGV4'] = 'True' #use aws4

from boto.s3.lifecycle import (
    Lifecycle,
    Expiration,
)

access_key = ''
secret_key = ''
host = 'ceph.work'
bucket_name = 'test1'

conn = boto.connect_s3(
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    host=host,
    is_secure=False,
    calling_format=boto.s3.connection.SubdomainCallingFormat(),
    validate_certs=True,
)
bucket = conn.get_bucket(bucket_name)

#type 1
lifecycle_config = boto.s3.lifecycle.Lifecycle()
lifecycle_config.add_rule('lc_rule_1', 'del/', 'Enabled', 1)
lifecycle_config.add_rule('lc_rule_2', '/abc', 'Enabled', 10)
bucket.configure_lifecycle(lifecycle_config)


#type 2
lifecycle = Lifecycle()
lifecycle.add_rule('lc_rule_1', prefix='del/', status='Enable', expiration=Expiration(days=1))
lifecycle.add_rule('lc_rule_2', prefix='data/', status='Enabled', expiration=Expiration(days=10))
bucket.configure_lifecycle(lifecycle)

get_bucket_lifecycled的bug

from boto.s3.connection import S3Connection
import boto

access_key = ''
secret_key = ''
host = 'ceph.work'
bucket_name = 'test1'

conn = boto.connect_s3(
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    host=host,
    is_secure=False,
    calling_format=boto.s3.connection.SubdomainCallingFormat(),
    validate_certs=True,
)

bucket = conn.get_bucket(bucket_name)
print bucket.get_lifecycle_config() #未設(shè)置bucket的lifecycle,返回404,報(bào)以下錯(cuò)誤

錯(cuò)誤提示

Traceback (most recent call last):
  File "/Users/Diluga/SourceCode/PycharmProjects/kv_server/boto_demo/demo1.py", line 56, in <module>
    print bucket.get_lifecycle_config()
  File "/Users/Diluga/lwc/lib/python2.7/site-packages/boto/s3/bucket.py", line 1387, in get_lifecycle_config
    response.status, response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 404 Not Found
<?xml version="1.0" encoding="UTF-8"?><Error><Code>NoSuchLifecycleConfiguration</Code><BucketName>snappy-test</BucketName><RequestId>tx00000000000000000008f-0058d0dc3b-10b2-default</RequestId><HostId>10b2-default-default</HostId></Error>
#xml未結(jié)束,下一個(gè)request請(qǐng)求所返回的response會(huì)被污染

s3cmd同樣報(bào)錯(cuò)

DEBUG: signature-v4 headers: {'x-amz-content-sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'Authorization': 'AWS4-HMAC-SHA256 Credential=W7L3YC842AGADI1T8BV9/20170321/CN/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=d0a6ca337af207d00d170f5bb999782f49928b01395494c96d3dd31f88d987c7', 'x-amz-date': '20170321T075840Z'}
DEBUG: Processing request, please wait...
DEBUG: get_hostname(snappy-test): snappy-test.ceph.work
DEBUG: ConnMan.get(): re-using connection: http://snappy-test.ceph.work#2
DEBUG: format_uri(): /?lifecycle
DEBUG: Sending request method_string='GET', uri='/?lifecycle', headers={'x-amz-content-sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'Authorization': 'AWS4-HMAC-SHA256 Credential=W7L3YC842AGADI1T8BV9/20170321/CN/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=d0a6ca337af207d00d170f5bb999782f49928b01395494c96d3dd31f88d987c7', 'x-amz-date': '20170321T075840Z'}, body=(0 bytes)
DEBUG: Response: {'status': 404, 'headers': {'date': 'Tue, 21 Mar 2017 07:58:40 GMT', 'content-length': '237', 'x-amz-request-id': 'tx000000000000000000092-0058d0dd30-10b2-default', 'content-type': 'application/xml', 'accept-ranges': 'bytes'}, 'reason': 'Not Found', 'data': '<?xml version="1.0" encoding="UTF-8"?><Error><Code>NoSuchLifecycleConfiguration</Code><BucketName>snappy-test</BucketName><RequestId>tx000000000000000000092-0058d0dd30-10b2-default</RequestId><HostId>10b2-default-default</HostId></Error>'}
DEBUG: ConnMan.put(): connection put back to pool (http://snappy-test.ceph.work#3)
DEBUG: S3Error: 404 (Not Found)
DEBUG: HttpHeader: date: Tue, 21 Mar 2017 07:58:40 GMT
DEBUG: HttpHeader: content-length: 237
DEBUG: HttpHeader: x-amz-request-id: tx000000000000000000092-0058d0dd30-10b2-default
DEBUG: HttpHeader: content-type: application/xml
DEBUG: HttpHeader: accept-ranges: bytes
DEBUG: ErrorXML: Code: 'NoSuchLifecycleConfiguration'
DEBUG: ErrorXML: BucketName: 'snappy-test'
DEBUG: ErrorXML: RequestId: 'tx000000000000000000092-0058d0dd30-10b2-default'
DEBUG: ErrorXML: HostId: '10b2-default-default'
DEBUG: Could not get /?lifecycle - lifecycle probably not configured for this bucket
   Expiration Rule: none
DEBUG: CreateRequest: resource[uri]=/?acl
DEBUG: Using signature v4
DEBUG: get_hostname(snappy-test): snappy-test.ceph.work
DEBUG: canonical_headers = host:snappy-test.ceph.work
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20170321T075840Z

DEBUG: Canonical Request:
GET
/
acl=
host:snappy-test.ceph.work
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
x-amz-date:20170321T075840Z

host;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
----------------------
DEBUG: signature-v4 headers: {'x-amz-content-sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'Authorization': 'AWS4-HMAC-SHA256 Credential=W7L3YC842AGADI1T8BV9/20170321/CN/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=03386b844b8600b0cdd28d38d8a6e528fa75385cab056771f9148266905a33dd', 'x-amz-date': '20170321T075840Z'}
DEBUG: Processing request, please wait...
DEBUG: get_hostname(snappy-test): snappy-test.ceph.work
DEBUG: ConnMan.get(): re-using connection: http://snappy-test.ceph.work#3
DEBUG: format_uri(): /?acl
DEBUG: Sending request method_string='GET', uri='/?acl', headers={'x-amz-content-sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', 'Authorization': 'AWS4-HMAC-SHA256 Credential=W7L3YC842AGADI1T8BV9/20170321/CN/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=03386b844b8600b0cdd28d38d8a6e528fa75385cab056771f9148266905a33dd', 'x-amz-date': '20170321T075840Z'}, body=(0 bytes)
DEBUG: Response: {'status': 200, 'headers': {}, 'reason': '', 'data': '<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"></LifecycleConfiguration>HTTP/1.1 200 OK\r\nx-amz-request-id: tx000000000000000000093-0058d0dd30-10b2-default\r\nContent-Type: application/xml\r\nContent-Length: 441\r\nDate: Tue, 21 Mar 2017 07:58:40 GMT\r\n\r\n<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>u-gfn2636</ID><DisplayName>u-gfn2636</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>u-gfn2636</ID><DisplayName>u-gfn2636</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>'}
DEBUG: ConnMan.put(): connection put back to pool (http://snappy-test.ceph.work#4)
ERROR: Error parsing xml: not well-formed (invalid token): line 1, column 101
ERROR: <LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"></LifecycleConfiguration>HTTP/1.1 200 OK
x-amz-request-id: tx000000000000000000093-0058d0dd30-10b2-default
Content-Type: application/xml
Content-Length: 441
Date: Tue, 21 Mar 2017 07:58:40 GMT

<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>u-gfn2636</ID><DisplayName>u-gfn2636</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>u-gfn2636</ID><DisplayName>u-gfn2636</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>

到此,相信大家對(duì)“l(fā)ifecycle功能測(cè)試方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI