mirror of
https://github.com/ceph/s3-tests.git
synced 2025-01-22 19:43:50 +00:00
S3 Fuzzer: Write Decision Graph
Start writing the decision graph describing the fuzzer's attack surface in earnest.
This commit is contained in:
parent
62bd05a390
commit
bb7111a0d1
3 changed files with 124 additions and 10 deletions
|
@ -1,22 +1,133 @@
|
||||||
start:
|
start:
|
||||||
set: {}
|
set: {}
|
||||||
choice:
|
choices:
|
||||||
- bucket
|
- bucket
|
||||||
|
|
||||||
bucket:
|
bucket:
|
||||||
set:
|
set:
|
||||||
urlpath: /{bucket}
|
urlpath: /{bucket}
|
||||||
choice:
|
choices:
|
||||||
- bucket_get
|
- 13 bucket_get
|
||||||
- bucket_put
|
- 8 bucket_put
|
||||||
- bucket_delete
|
- 5 bucket_delete
|
||||||
|
- bucket_garbage
|
||||||
|
|
||||||
|
garbage_method:
|
||||||
|
set:
|
||||||
|
method:
|
||||||
|
- {random 1-100 printable}
|
||||||
|
- {random 10-100 binary}
|
||||||
|
urlpath:
|
||||||
|
- /{bucket}
|
||||||
|
- /{bucket}/{object}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
choices:
|
||||||
|
- bucket_get_simple
|
||||||
|
- bucket_get_filtered
|
||||||
|
- bucket_get_uploads
|
||||||
|
- bucket_put_create
|
||||||
|
- bucket_put_versioning
|
||||||
|
- bucket_put_simple
|
||||||
|
|
||||||
bucket_delete:
|
bucket_delete:
|
||||||
set:
|
set:
|
||||||
method: DELETE
|
method: DELETE
|
||||||
|
bucket:
|
||||||
|
- {bucket_writable}
|
||||||
|
- {bucket_not_writable}
|
||||||
|
- {random 10-3000 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
query:
|
query:
|
||||||
- null
|
- null
|
||||||
- policy
|
- policy
|
||||||
- website
|
- website
|
||||||
choice: []
|
- {random 2-20 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
choices: []
|
||||||
|
|
||||||
|
bucket_get:
|
||||||
|
set:
|
||||||
|
method: GET
|
||||||
|
bucket:
|
||||||
|
- {bucket_readable}
|
||||||
|
- {bucket_not_readable}
|
||||||
|
- {random 10-3000 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
choices:
|
||||||
|
- 11 bucket_get_simple
|
||||||
|
- bucket_get_filtered
|
||||||
|
- bucket_get_uploads
|
||||||
|
|
||||||
|
bucket_get_simple:
|
||||||
|
set:
|
||||||
|
query:
|
||||||
|
- acl
|
||||||
|
- policy
|
||||||
|
- location
|
||||||
|
- logging
|
||||||
|
- notification
|
||||||
|
- versions
|
||||||
|
- requestPayment
|
||||||
|
- versioning
|
||||||
|
- website
|
||||||
|
- {random 2-20 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
choices: []
|
||||||
|
|
||||||
|
bucket_get_uploads:
|
||||||
|
set:
|
||||||
|
query:
|
||||||
|
-
|
||||||
|
choices: []
|
||||||
|
|
||||||
|
bucket_get_filtered:
|
||||||
|
set:
|
||||||
|
delimiter:
|
||||||
|
- 'delimiter={random 10-50 binary}'
|
||||||
|
- 'delimiter={random 1000-3000 printable}'
|
||||||
|
prefix:
|
||||||
|
- 'prefix={random 10-50 binary}'
|
||||||
|
- 'prefix={random 100-3000 printable}'
|
||||||
|
marker:
|
||||||
|
- 'marker={object_readable}'
|
||||||
|
- 'marker={object_not_readable}'
|
||||||
|
- 'marker={invalid_key}'
|
||||||
|
- 'marker={random 100-1000 printable}'
|
||||||
|
max_keys:
|
||||||
|
- 'max-keys={random 1-5 binary}'
|
||||||
|
- 'max-keys={random 1-1000 digits}'
|
||||||
|
query:
|
||||||
|
- null
|
||||||
|
- '{delimiter}&{prefix}'
|
||||||
|
- '{max-keys}&{marker}'
|
||||||
|
- {random 10-1000 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
choices: []
|
||||||
|
|
||||||
|
bucket_put:
|
||||||
|
set:
|
||||||
|
bucket:
|
||||||
|
- {bucket_writable}
|
||||||
|
- {bucket_not_writable}
|
||||||
|
- {random 10-3000 printable}
|
||||||
|
- {random 10-1000 binary}
|
||||||
|
method: PUT
|
||||||
|
choices:
|
||||||
|
- bucket_put_simple
|
||||||
|
- bucket_put_create
|
||||||
|
- bucket_put_versioning
|
||||||
|
|
||||||
|
bucket_put_create:
|
||||||
|
set:
|
||||||
|
body:
|
||||||
|
- {random 3000 printable}
|
||||||
|
- {random 10-3000 binary}
|
||||||
|
- '<CreateBucketConfiguration><LocationConstraint>{random 2-10 binary}</LocationConstraint></CreateBucketConfiguration>'
|
||||||
|
acl:
|
||||||
|
- private
|
||||||
|
- {random 3000 letters}
|
||||||
|
- {random 100-1000 binary}
|
||||||
|
headers:
|
||||||
|
- ['0-1', 'x-amz-acl', '{acl}']
|
||||||
|
choices: []
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,7 @@ def test_SpecialVariables_dict():
|
||||||
eq(tester['foo'], 'bar')
|
eq(tester['foo'], 'bar')
|
||||||
eq(tester['random 10-15 printable'], '[/pNI$;92@')
|
eq(tester['random 10-15 printable'], '[/pNI$;92@')
|
||||||
|
|
||||||
|
|
||||||
def test_SpecialVariables_binary():
|
def test_SpecialVariables_binary():
|
||||||
prng = random.Random(1)
|
prng = random.Random(1)
|
||||||
tester = SpecialVariables({}, prng)
|
tester = SpecialVariables({}, prng)
|
||||||
|
|
|
@ -126,7 +126,8 @@ class SpecialVariables(dict):
|
||||||
'binary': 'binary',
|
'binary': 'binary',
|
||||||
'printable': string.printable,
|
'printable': string.printable,
|
||||||
'punctuation': string.punctuation,
|
'punctuation': string.punctuation,
|
||||||
'whitespace': string.whitespace
|
'whitespace': string.whitespace,
|
||||||
|
'digits': string.digits
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, orig_dict, prng):
|
def __init__(self, orig_dict, prng):
|
||||||
|
@ -168,7 +169,6 @@ class SpecialVariables(dict):
|
||||||
return tmpstring.replace('{', '{{').replace('}', '}}')
|
return tmpstring.replace('{', '{{').replace('}', '}}')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def parse_options():
|
def parse_options():
|
||||||
parser = OptionParser()
|
parser = OptionParser()
|
||||||
parser.add_option('-O', '--outfile', help='write output to FILE. Defaults to STDOUT', metavar='FILE')
|
parser.add_option('-O', '--outfile', help='write output to FILE. Defaults to STDOUT', metavar='FILE')
|
||||||
|
@ -210,11 +210,13 @@ def _main():
|
||||||
|
|
||||||
constants = {
|
constants = {
|
||||||
'bucket_readable': 'TODO',
|
'bucket_readable': 'TODO',
|
||||||
|
'bucket_not_readable': 'TODO',
|
||||||
'bucket_writable' : 'TODO',
|
'bucket_writable' : 'TODO',
|
||||||
'bucket_nonexistant' : 'TODO',
|
'bucket_not_writable' : 'TODO',
|
||||||
'object_readable' : 'TODO',
|
'object_readable' : 'TODO',
|
||||||
|
'object_not_readable' : 'TODO',
|
||||||
'object_writable' : 'TODO',
|
'object_writable' : 'TODO',
|
||||||
'object_nonexistant' : 'TODO'
|
'object_not_writable' : 'TODO',
|
||||||
}
|
}
|
||||||
|
|
||||||
for request_seed in request_seeds:
|
for request_seed in request_seeds:
|
||||||
|
|
Loading…
Reference in a new issue