diff --git a/request_decision_graph.yml b/request_decision_graph.yml
index fa13eb5..6b2fab3 100644
--- a/request_decision_graph.yml
+++ b/request_decision_graph.yml
@@ -6,8 +6,18 @@ start:
garbage_no_whitespace:
- '{random 10-3000 printable_no_whitespace}'
- '{random 10-1000 binary_no_whitespace}'
+ acl_header:
+ - 'private'
+ - 'public-read'
+ - 'public-read-write'
+ - 'authenticated-read'
+ - 'bucket-owner-read'
+ - 'bucket-owner-full-control'
+ - '{random 3000 letters}'
+ - '{random 100-1000 binary_no_whitespace}'
choices:
- bucket
+ - object
bucket:
set:
@@ -144,17 +154,8 @@ bucket_put_create:
body:
- '2 {garbage}'
- '{random 2-10 binary}'
- acl:
- - 'private'
- - 'public-read'
- - 'public-read-write'
- - 'authenticated-read'
- - 'bucket-owner-read'
- - 'bucket-owner-full-control'
- - '{random 3000 letters}'
- - '{random 100-1000 binary_no_whitespace}'
headers:
- - ['0-1', 'x-amz-acl', '{acl}']
+ - ['0-5', 'x-amz-acl', '{acl_header}']
choices: []
bucket_put_versioning:
@@ -260,3 +261,231 @@ bucket_put_simple:
- '{suffix}'
choices: []
+object:
+ set:
+ urlpath: '/{bucket}/{object}'
+
+ range_header:
+ - null
+ - 'bytes={random 1-2 digits}-{random 1-4 digits}'
+ - 'bytes={random 1-1000 binary_no_whitespace}'
+ if_modified_since_header:
+ - null
+ - '2 {garbage_no_whitespace}'
+ if_match_header:
+ - null
+ - '2 {garbage_no_whitespace}'
+ if_none_match_header:
+ - null
+ - '2 {garbage_no_whitespace}'
+ choices:
+ - object_delete
+ - object_get
+ - object_put
+ - object_head
+ - object_garbage_method
+
+object_garbage_method:
+ set:
+ method:
+ - '{random 1-100 printable}'
+ - '{random 10-100 binary}'
+ bucket:
+ - '{bucket_readable}'
+ - '{bucket_not_readable}'
+ - '{bucket_writable}'
+ - '{bucket_not_writable}'
+ - '2 {garbage_no_whitespace}'
+ object:
+ - '{object_readable}'
+ - '{object_not_readable}'
+ - '{object_writable}'
+ - '{object_not_writable}'
+ - '2 {garbage_no_whitespace}'
+ choices:
+ - object_get_query
+ - object_get_head_simple
+
+object_delete:
+ set:
+ method: DELETE
+ bucket:
+ - '5 {bucket_writable}'
+ - '{bucket_not_writable}'
+ - '{garbage_no_whitespace}'
+ object:
+ - '{object_writable}'
+ - '{object_not_writable}'
+ - '2 {garbage_no_whitespace}'
+ choices: []
+
+object_get:
+ set:
+ method: GET
+ bucket:
+ - '5 {bucket_readable}'
+ - '{bucket_not_readable}'
+ - '{garbage_no_whitespace}'
+ object:
+ - '{object_readable}'
+ - '{object_not_readable}'
+ - '{garbage_no_whitespace}'
+ choices:
+ - 5 object_get_head_simple
+ - 2 object_get_query
+
+object_get_query:
+ set:
+ query:
+ - 'torrent'
+ - 'acl'
+ choices: []
+
+object_get_head_simple:
+ set: {}
+ headers:
+ - ['0-1', 'range', '{range_header}']
+ - ['0-1', 'if-modified-since', '{if_modified_since_header}']
+ - ['0-1', 'if-unmodified-since', '{if_modified_since_header}']
+ - ['0-1', 'if-match', '{if_match_header}']
+ - ['0-1', 'if-none-match', '{if_none_match_header}']
+ choices: []
+
+object_head:
+ set:
+ method: HEAD
+ bucket:
+ - '5 {bucket_readable}'
+ - '{bucket_not_readable}'
+ - '{garbage_no_whitespace}'
+ object:
+ - '{object_readable}'
+ - '{object_not_readable}'
+ - '{garbage_no_whitespace}'
+ choices:
+ - object_get_head_simple
+
+object_put:
+ set:
+ method: PUT
+ bucket:
+ - '5 {bucket_writable}'
+ - '{bucket_not_writable}'
+ - '{garbage_no_whitespace}'
+ object:
+ - '{object_writable}'
+ - '{object_not_writable}'
+ - '{garbage_no_whitespace}'
+ cache_control:
+ - null
+ - '{garbage_no_whitespace}'
+ - 'no-cache'
+ content_disposition:
+ - null
+ - '{garbage_no_whitespace}'
+ content_encoding:
+ - null
+ - '{garbage_no_whitespace}'
+ content_length:
+ - '{random 1-20 digits}'
+ - '{garbage_no_whitespace}'
+ content_md5:
+ - null
+ - '{garbage_no_whitespace}'
+ content_type:
+ - null
+ - 'binary/octet-stream'
+ - '{garbage_no_whitespace}'
+ expect:
+ - null
+ - '100-continue'
+ - '{garbage_no_whitespace}'
+ expires:
+ - null
+ - '{random 1-10000000 digits}'
+ - '{garbage_no_whitespace}'
+ meta_key:
+ - null
+ - 'foo'
+ - '{garbage_no_whitespace}'
+ meta_value:
+ - null
+ - '{garbage_no_whitespace}'
+ choices:
+ - object_put_simple
+ - object_put_acl
+ - object_put_copy
+
+object_put_simple:
+ set: {}
+ headers:
+ - ['0-1', 'cache-control', '{cache_control}']
+ - ['0-1', 'content-disposition', '{content_disposition}']
+ - ['0-1', 'content-encoding', '{content_encoding}']
+ - ['0-1', 'content-length', '{content_length}']
+ - ['0-1', 'content-md5', '{content_md5}']
+ - ['0-1', 'content-type', '{content_type}']
+ - ['0-1', 'expect', '{expect}']
+ - ['0-1', 'expires', '{expires}']
+ - ['0-1', 'x-amz-acl', '{acl_header}']
+ - ['0-6', 'x-amz-meta-{meta_key}', '{meta_value}']
+ choices: []
+
+object_put_acl:
+ set:
+ query: 'acl'
+ body:
+ - null
+ - '2 {garbage}'
+ - '{owner}{acl}'
+ owner:
+ - null
+ - '7 {id}{display_name}'
+ id:
+ - null
+ - '{random 10-200 binary}'
+ - '{random 1000-3000 printable}'
+ display_name:
+ - null
+ - '2 {random 10-200 binary}'
+ - '2 {random 1000-3000 printable}'
+ - '2 {random 10-300 letters}@{random 10-300 letters}.{random 2-4 letters}'
+ acl:
+ - null
+ - '10 {grantee}{permission}'
+ grantee:
+ - null
+ - '7 {id}{display_name}'
+ permission:
+ - null
+ - '7 {permission_value}'
+ permission_value:
+ - '2 {garbage}'
+ - FULL_CONTROL
+ - WRITE
+ - WRITE_ACP
+ - READ
+ - READ_ACP
+ headers:
+ - ['0-1', 'cache-control', '{cache_control}']
+ - ['0-1', 'content-disposition', '{content_disposition}']
+ - ['0-1', 'content-encoding', '{content_encoding}']
+ - ['0-1', 'content-length', '{content_length}']
+ - ['0-1', 'content-md5', '{content_md5}']
+ - ['0-1', 'content-type', '{content_type}']
+ - ['0-1', 'expect', '{expect}']
+ - ['0-1', 'expires', '{expires}']
+ - ['0-1', 'x-amz-acl', '{acl_header}']
+ choices: []
+
+object_put_copy:
+ set: {}
+ headers:
+ - ['1-1', 'x-amz-copy-source', '{source_object}']
+ - ['0-1', 'x-amz-acl', '{acl_header}']
+ - ['0-1', 'x-amz-metadata-directive', '{metadata_directive}']
+ - ['0-1', 'x-amz-copy-source-if-match', '{if_match_header}']
+ - ['0-1', 'x-amz-copy-source-if-none-match', '{if_none_match_header}']
+ - ['0-1', 'x-amz-copy-source-if-modified-since', '{if_modified_since_header}']
+ - ['0-1', 'x-amz-copy-source-if-unmodified-since', '{if_modified_since_header}']
+ choices: []