This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new c955729  HDDS-4194. Create a script to check AWS S3 compatibility 
(#1383)
c955729 is described below

commit c955729c3c134d1a3e28eca7850c44f001d486ad
Author: Elek, Márton <[email protected]>
AuthorDate: Thu Sep 24 21:43:58 2020 +0200

    HDDS-4194. Create a script to check AWS S3 compatibility (#1383)
---
 .../src/main/smoketest/s3/MultipartUpload.robot    | 130 ++++++++++-----------
 .../dist/src/main/smoketest/s3/commonawslib.robot  |   5 +
 .../dist/src/main/smoketest/s3/objectcopy.robot    |  23 ++--
 .../dist/src/main/smoketest/s3/objectdelete.robot  |  28 ++---
 .../src/main/smoketest/s3/objectmultidelete.robot  |  24 ++--
 .../dist/src/main/smoketest/s3/objectputget.robot  |  40 +++----
 .../src/main/smoketest/s3/s3_compatbility_check.sh |  47 ++++++++
 7 files changed, 173 insertions(+), 124 deletions(-)

diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/MultipartUpload.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/MultipartUpload.robot
index 8f86a67..e05a706 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/MultipartUpload.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/MultipartUpload.robot
@@ -21,13 +21,13 @@ Resource            ../commonlib.robot
 Resource            commonawslib.robot
 Test Timeout        5 minutes
 Suite Setup         Setup s3 tests
+Test Setup          Generate random prefix
 
 *** Keywords ***
 Create Random file
     [arguments]             ${size_in_megabytes}
     Execute                 dd if=/dev/urandom of=/tmp/part1 bs=1048576 
count=${size_in_megabytes}
 
-
 *** Variables ***
 ${ENDPOINT_URL}       http://s3g:9878
 ${BUCKET}             generated
@@ -35,16 +35,16 @@ ${BUCKET}             generated
 *** Test Cases ***
 
 Test Multipart Upload
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 # initiate again
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey
     ${nextUploadID} =   Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
                         Should Not Be Equal     ${uploadID}  ${nextUploadID}
 
@@ -54,149 +54,149 @@ Test Multipart Upload
 # multipart upload, uploading each part as 5MB file, exception is for last part
 
     Run Keyword         Create Random file      5
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey --part-number 1 --body /tmp/part1 --upload-id ${nextUploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey --part-number 1 --body /tmp/part1 --upload-id 
${nextUploadID}
                         Should contain          ${result}    ETag
 # override part
     Run Keyword         Create Random file      5
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey --part-number 1 --body /tmp/part1 --upload-id ${nextUploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey --part-number 1 --body /tmp/part1 --upload-id 
${nextUploadID}
                         Should contain          ${result}    ETag
 
 
 Test Multipart Upload Complete
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey1
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey1
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 
 #upload parts
     Run Keyword         Create Random file      5
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey1 --part-number 1 --body /tmp/part1 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey1 --part-number 1 --body /tmp/part1 --upload-id 
${uploadID}
     ${eTag1} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
                         Execute                 echo "Part2" > /tmp/part2
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey1 --part-number 2 --body /tmp/part2 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey1 --part-number 2 --body /tmp/part2 --upload-id 
${uploadID}
     ${eTag2} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
 #complete multipart upload
-    ${result} =         Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key multipartKey1 
--multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'
+    ${result} =         Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key ${PREFIX}/multipartKey1 
--multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey1
+                        Should contain          ${result}    
${PREFIX}/multipartKey1
                         Should contain          ${result}    ETag
 
 #read file and check the key
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key multipartKey1 /tmp/multipartKey1.result
-                                Execute                    cat /tmp/part1 
/tmp/part2 > /tmp/multipartKey1
-    Compare files               /tmp/multipartKey1         
/tmp/multipartKey1.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/multipartKey1 /tmp/${PREFIX}-multipartKey1.result
+                                Execute                    cat /tmp/part1 
/tmp/part2 > /tmp/${PREFIX}-multipartKey1
+    Compare files               /tmp/${PREFIX}-multipartKey1         
/tmp/${PREFIX}-multipartKey1.result
 
 Test Multipart Upload Complete Entity too small
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey2
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey2
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 
 #upload parts
                         Execute                 echo "Part1" > /tmp/part1
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey2 --part-number 1 --body /tmp/part1 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey2 --part-number 1 --body /tmp/part1 --upload-id 
${uploadID}
     ${eTag1} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
                         Execute                 echo "Part2" > /tmp/part2
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey2 --part-number 2 --body /tmp/part2 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey2 --part-number 2 --body /tmp/part2 --upload-id 
${uploadID}
     ${eTag2} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
 #complete multipart upload
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey2 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey2 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'    255
                         Should contain          ${result}    EntityTooSmall
 
 
 Test Multipart Upload Complete Invalid part errors and complete mpu with few 
parts
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey3
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey3
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 
 #complete multipart upload when no parts uploaded
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
                         Should contain          ${result}    InvalidPart
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=2},{ETag=etag2,PartNumber=1}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=2},{ETag=etag2,PartNumber=1}]'    255
                         Should contain          ${result}    InvalidPart
 #upload parts
                         Run Keyword             Create Random file      5
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey3 --part-number 1 --body /tmp/part1 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey3 --part-number 1 --body /tmp/part1 --upload-id 
${uploadID}
     ${eTag1} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
 
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey3 --part-number 2 --body /tmp/part1 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey3 --part-number 2 --body /tmp/part1 --upload-id 
${uploadID}
     ${eTag2} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
                         Execute                 echo "Part3" > /tmp/part3
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey3 --part-number 3 --body /tmp/part3 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey3 --part-number 3 --body /tmp/part3 --upload-id 
${uploadID}
     ${eTag3} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
 #complete multipart upload
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey3 --multipart-upload 
'Parts=[{ETag=etag1,PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
                         Should contain          ${result}    InvalidPart
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey3 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey3 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=etag2,PartNumber=2}]'    255
                         Should contain          ${result}    InvalidPart
-    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
multipartKey3 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=4},{ETag=etag2,PartNumber=2}]'    255
+    ${result} =         Execute AWSS3APICli and checkrc  
complete-multipart-upload --upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/multipartKey3 --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=4},{ETag=etag2,PartNumber=2}]'    255
                         Should contain          ${result}    InvalidPartOrder
 #complete multipart upload(merge with few parts)
-    ${result} =         Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key multipartKey3 
--multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag3},PartNumber=3}]'
+    ${result} =         Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key ${PREFIX}/multipartKey3 
--multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag3},PartNumber=3}]'
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey3
+                        Should contain          ${result}    
${PREFIX}/multipartKey3
                         Should contain          ${result}    ETag
 
-    ${result} =         Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key multipartKey3 /tmp/multipartKey3.result
-                        Execute                    cat /tmp/part1 /tmp/part3 > 
/tmp/multipartKey3
-    Compare files       /tmp/multipartKey3         /tmp/multipartKey3.result
+    ${result} =         Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/multipartKey3 /tmp/${PREFIX}-multipartKey3.result
+                        Execute                    cat /tmp/part1 /tmp/part3 > 
/tmp/${PREFIX}-multipartKey3
+    Compare files       /tmp/${PREFIX}-multipartKey3         
/tmp/${PREFIX}-multipartKey3.result
 
 Test abort Multipart upload
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey4 --storage-class REDUCED_REDUNDANCY
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey4 --storage-class 
REDUCED_REDUNDANCY
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 
-    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key multipartKey4 --upload-id 
${uploadID}    0
+    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key ${PREFIX}/multipartKey4 
--upload-id ${uploadID}    0
 
 Test abort Multipart upload with invalid uploadId
-    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key multipartKey5 --upload-id 
"random"    255
+    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key ${PREFIX}/multipartKey5 
--upload-id "random"    255
 
 Upload part with Incorrect uploadID
                         Execute                 echo "Multipart upload" > 
/tmp/testfile
-        ${result} =     Execute AWSS3APICli and checkrc     upload-part 
--bucket ${BUCKET} --key multipartKey --part-number 1 --body /tmp/testfile 
--upload-id "random"  255
+        ${result} =     Execute AWSS3APICli and checkrc     upload-part 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey --part-number 1 --body 
/tmp/testfile --upload-id "random"  255
                         Should contain          ${result}    NoSuchUpload
 
 Test list parts
 #initiate multipart upload
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key multipartKey5
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/multipartKey5
     ${uploadID} =       Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    multipartKey
+                        Should contain          ${result}    
${PREFIX}/multipartKey
                         Should contain          ${result}    UploadId
 
 #upload parts
     Run Keyword         Create Random file      5
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey5 --part-number 1 --body /tmp/part1 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey5 --part-number 1 --body /tmp/part1 --upload-id 
${uploadID}
     ${eTag1} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
                         Execute                 echo "Part2" > /tmp/part2
-    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key multipartKey5 --part-number 2 --body /tmp/part2 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli     upload-part --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey5 --part-number 2 --body /tmp/part2 --upload-id 
${uploadID}
     ${eTag2} =          Execute and checkrc     echo '${result}' | jq -r 
'.ETag'   0
                         Should contain          ${result}    ETag
 
 #list parts
-    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key multipartKey5 --upload-id ${uploadID}
+    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey5 --upload-id ${uploadID}
     ${part1} =          Execute and checkrc    echo '${result}' | jq -r 
'.Parts[0].ETag'  0
     ${part2} =          Execute and checkrc    echo '${result}' | jq -r 
'.Parts[1].ETag'  0
                         Should Be equal       ${part1}    ${eTag1}
@@ -204,19 +204,19 @@ Test list parts
                         Should contain        ${result}    STANDARD
 
 #list parts with max-items and next token
-    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key multipartKey5 --upload-id ${uploadID} --max-items 1
+    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey5 --upload-id ${uploadID} --max-items 1
     ${part1} =          Execute and checkrc    echo '${result}' | jq -r 
'.Parts[0].ETag'  0
     ${token} =          Execute and checkrc    echo '${result}' | jq -r 
'.NextToken'  0
                         Should Be equal       ${part1}    ${eTag1}
                         Should contain        ${result}   STANDARD
 
-    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key multipartKey5 --upload-id ${uploadID} --max-items 1 --starting-token 
${token}
+    ${result} =         Execute AWSS3APICli   list-parts --bucket ${BUCKET} 
--key ${PREFIX}/multipartKey5 --upload-id ${uploadID} --max-items 1 
--starting-token ${token}
     ${part2} =          Execute and checkrc    echo '${result}' | jq -r 
'.Parts[0].ETag'  0
                        Should Be equal       ${part2}    ${eTag2}
                        Should contain        ${result}   STANDARD
 
 #finally abort it
-    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key multipartKey5 --upload-id 
${uploadID}    0
+    ${result} =         Execute AWSS3APICli and checkrc    
abort-multipart-upload --bucket ${BUCKET} --key ${PREFIX}/multipartKey5 
--upload-id ${uploadID}    0
 
 Test Multipart Upload with the simplified aws s3 cp API
                         Create Random file      22
@@ -227,67 +227,67 @@ Test Multipart Upload with the simplified aws s3 cp API
 
 Test Multipart Upload Put With Copy
     Run Keyword         Create Random file      5
-    ${result} =         Execute AWSS3APICli     put-object --bucket ${BUCKET} 
--key copytest/source --body /tmp/part1
+    ${result} =         Execute AWSS3APICli     put-object --bucket ${BUCKET} 
--key ${PREFIX}/copytest/source --body /tmp/part1
 
 
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key copytest/destination
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/copytest/destination
 
     ${uploadID} =       Execute and checkrc      echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain           ${result}    ${BUCKET}
                         Should contain           ${result}    UploadId
 
-    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key copytest/destination --upload-id ${uploadID} --part-number 1 
--copy-source ${BUCKET}/copytest/source
+    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key ${PREFIX}/copytest/destination --upload-id ${uploadID} 
--part-number 1 --copy-source ${BUCKET}/${PREFIX}/copytest/source
                         Should contain           ${result}    ETag
                         Should contain           ${result}    LastModified
     ${eTag1} =          Execute and checkrc      echo '${result}' | jq -r 
'.CopyPartResult.ETag'   0
 
 
-                        Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key copytest/destination 
--multipart-upload 'Parts=[{ETag=${eTag1},PartNumber=1}]'
-                        Execute AWSS3APICli     get-object --bucket ${BUCKET} 
--key copytest/destination /tmp/part-result
+                        Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key ${PREFIX}/copytest/destination 
--multipart-upload 'Parts=[{ETag=${eTag1},PartNumber=1}]'
+                        Execute AWSS3APICli     get-object --bucket ${BUCKET} 
--key ${PREFIX}/copytest/destination /tmp/part-result
 
                         Compare files           /tmp/part1        
/tmp/part-result
 
 Test Multipart Upload Put With Copy and range
     Run Keyword         Create Random file      10
-    ${result} =         Execute AWSS3APICli     put-object --bucket ${BUCKET} 
--key copyrange/source --body /tmp/part1
+    ${result} =         Execute AWSS3APICli     put-object --bucket ${BUCKET} 
--key ${PREFIX}/copyrange/source --body /tmp/part1
 
 
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key copyrange/destination
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/copyrange/destination
 
     ${uploadID} =       Execute and checkrc      echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain           ${result}    ${BUCKET}
                         Should contain           ${result}    UploadId
 
-    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key copyrange/destination --upload-id ${uploadID} --part-number 1 
--copy-source ${BUCKET}/copyrange/source --copy-source-range bytes=0-10485757
+    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key ${PREFIX}/copyrange/destination --upload-id ${uploadID} 
--part-number 1 --copy-source ${BUCKET}/${PREFIX}/copyrange/source 
--copy-source-range bytes=0-10485757
                         Should contain           ${result}    ETag
                         Should contain           ${result}    LastModified
     ${eTag1} =          Execute and checkrc      echo '${result}' | jq -r 
'.CopyPartResult.ETag'   0
 
-    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key copyrange/destination --upload-id ${uploadID} --part-number 2 
--copy-source ${BUCKET}/copyrange/source --copy-source-range 
bytes=10485758-10485759
+    ${result} =         Execute AWSS3APICli      upload-part-copy --bucket 
${BUCKET} --key ${PREFIX}/copyrange/destination --upload-id ${uploadID} 
--part-number 2 --copy-source ${BUCKET}/${PREFIX}/copyrange/source 
--copy-source-range bytes=10485758-10485759
                         Should contain           ${result}    ETag
                         Should contain           ${result}    LastModified
     ${eTag2} =          Execute and checkrc      echo '${result}' | jq -r 
'.CopyPartResult.ETag'   0
 
 
-                        Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key copyrange/destination 
--multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'
-                        Execute AWSS3APICli     get-object --bucket ${BUCKET} 
--key copyrange/destination /tmp/part-result
+                        Execute AWSS3APICli     complete-multipart-upload 
--upload-id ${uploadID} --bucket ${BUCKET} --key 
${PREFIX}/copyrange/destination --multipart-upload 
'Parts=[{ETag=${eTag1},PartNumber=1},{ETag=${eTag2},PartNumber=2}]'
+                        Execute AWSS3APICli     get-object --bucket ${BUCKET} 
--key ${PREFIX}/copyrange/destination /tmp/part-result
 
                         Compare files           /tmp/part1        
/tmp/part-result
 
 Test Multipart Upload list
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key listtest/key1
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/listtest/key1
     ${uploadID1} =      Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    listtest/key1
+                        Should contain          ${result}    
${PREFIX}/listtest/key1
                         Should contain          ${result}    UploadId
 
-    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key listtest/key2
+    ${result} =         Execute AWSS3APICli     create-multipart-upload 
--bucket ${BUCKET} --key ${PREFIX}/listtest/key2
     ${uploadID2} =      Execute and checkrc     echo '${result}' | jq -r 
'.UploadId'    0
                         Should contain          ${result}    ${BUCKET}
-                        Should contain          ${result}    listtest/key2
+                        Should contain          ${result}    
${PREFIX}/listtest/key2
                         Should contain          ${result}    UploadId
 
-    ${result} =         Execute AWSS3APICli     list-multipart-uploads 
--bucket ${BUCKET} --prefix listtest
+    ${result} =         Execute AWSS3APICli     list-multipart-uploads 
--bucket ${BUCKET} --prefix ${PREFIX}/listtest
                         Should contain          ${result}    ${uploadID1}
                         Should contain          ${result}    ${uploadID2}
 
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot
index 74dba38..505e0d1 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/commonawslib.robot
@@ -91,6 +91,7 @@ Create bucket with name
                          Should contain              ${result}         
${ENDPOINT_URL}/${bucket}
 
 Setup s3 tests
+    Run Keyword        Generate random prefix
     Run Keyword        Install aws cli
     Run Keyword if    '${OZONE_S3_SET_CREDENTIALS}' == 'true'    Setup v4 
headers
     ${BUCKET} =        Run Keyword if                            '${BUCKET}' 
== 'generated'            Create bucket
@@ -109,3 +110,7 @@ Create link
     [arguments]       ${bucket}
     Execute           ozone sh bucket link 
o3://${OM_SERVICE_ID}/legacy/source-bucket o3://${OM_SERVICE_ID}/s3v/${bucket}
     [return]          ${bucket}
+
+Generate random prefix
+    ${random} =          Generate Random String  5  [NUMBERS]
+                         Set Suite Variable  ${PREFIX}  ${random}
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/objectcopy.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/objectcopy.robot
index c1b4953..588ead7 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/objectcopy.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/objectcopy.robot
@@ -27,41 +27,38 @@ ${ENDPOINT_URL}       http://s3g:9878
 ${BUCKET}             generated
 ${DESTBUCKET}         generated1
 
-
 *** Keywords ***
 Create Dest Bucket
-
     ${postfix} =         Generate Random String  5  [NUMBERS]
     Set Suite Variable   ${DESTBUCKET}             destbucket-${postfix}
     Execute AWSS3APICli  create-bucket --bucket ${DESTBUCKET}
 
-
 *** Test Cases ***
 Copy Object Happy Scenario
     Run Keyword if    '${DESTBUCKET}' == 'generated1'    Create Dest Bucket
                         Execute                    date > /tmp/copyfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key copyobject/f1 --body /tmp/copyfile
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix copyobject/
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/copyobject/f1 --body /tmp/copyfile
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/copyobject/
                         Should contain             ${result}         f1
 
-    ${result} =         Execute AWSS3ApiCli        copy-object --bucket 
${DESTBUCKET} --key copyobject/f1 --copy-source ${BUCKET}/copyobject/f1
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${DESTBUCKET} --prefix copyobject/
+    ${result} =         Execute AWSS3ApiCli        copy-object --bucket 
${DESTBUCKET} --key ${PREFIX}/copyobject/f1 --copy-source 
${BUCKET}/${PREFIX}/copyobject/f1
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${DESTBUCKET} --prefix ${PREFIX}/copyobject/
                         Should contain             ${result}         f1
     #copying again will not throw error
-    ${result} =         Execute AWSS3ApiCli        copy-object --bucket 
${DESTBUCKET} --key copyobject/f1 --copy-source ${BUCKET}/copyobject/f1
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${DESTBUCKET} --prefix copyobject/
+    ${result} =         Execute AWSS3ApiCli        copy-object --bucket 
${DESTBUCKET} --key ${PREFIX}/copyobject/f1 --copy-source 
${BUCKET}/${PREFIX}/copyobject/f1
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${DESTBUCKET} --prefix ${PREFIX}/copyobject/
                         Should contain             ${result}         f1
 
 Copy Object Where Bucket is not available
-    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket dfdfdfdfdfnonexistent --key copyobject/f1 --copy-source 
${BUCKET}/copyobject/f1      255
+    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket dfdfdfdfdfnonexistent --key ${PREFIX}/copyobject/f1 --copy-source 
${BUCKET}/${PREFIX}/copyobject/f1      255
                         Should contain             ${result}        
NoSuchBucket
-    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket ${DESTBUCKET} --key copyobject/f1 --copy-source 
dfdfdfdfdfnonexistent/copyobject/f1  255
+    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket ${DESTBUCKET} --key ${PREFIX}/copyobject/f1 --copy-source 
dfdfdfdfdfnonexistent/${PREFIX}/copyobject/f1  255
                         Should contain             ${result}        
NoSuchBucket
 
 Copy Object Where both source and dest are same with change to storageclass
-     ${result} =         Execute AWSS3APICli        copy-object 
--storage-class REDUCED_REDUNDANCY --bucket ${DESTBUCKET} --key copyobject/f1 
--copy-source ${DESTBUCKET}/copyobject/f1
+     ${result} =         Execute AWSS3APICli        copy-object 
--storage-class REDUCED_REDUNDANCY --bucket ${DESTBUCKET} --key 
${PREFIX}/copyobject/f1 --copy-source ${DESTBUCKET}/${PREFIX}/copyobject/f1
                          Should contain             ${result}        ETag
 
 Copy Object Where Key not available
-    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket ${DESTBUCKET} --key copyobject/f1 --copy-source 
${BUCKET}/nonnonexistentkey       255
+    ${result} =         Execute AWSS3APICli and checkrc        copy-object 
--bucket ${DESTBUCKET} --key ${PREFIX}/copyobject/f1 --copy-source 
${BUCKET}/nonnonexistentkey       255
                         Should contain             ${result}        NoSuchKey
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/objectdelete.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/objectdelete.robot
index b3faf7e..ca3a5a4 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/objectdelete.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/objectdelete.robot
@@ -29,11 +29,11 @@ ${BUCKET}             generated
 *** Test Cases ***
 Delete file with s3api
                         Execute                    date > /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key deletetestapi/f1 --body /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix deletetestapi/
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapi/f1 --body /tmp/testfile
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/deletetestapi/
                         Should contain             ${result}         f1
-    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key deletetestapi/f1
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix deletetestapi/
+    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapi/f1
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/deletetestapi/
                         Should not contain         ${result}         f1
 #In case of HTTP 500, the error code is printed out to the console.
                         Should not contain         ${result}         500
@@ -47,24 +47,24 @@ Delete file with s3api, file doesn't exist
 
 Delete dir with s3api
                         Execute                    date > /tmp/testfile
-    ${result} =         Execute AWSS3Cli           cp /tmp/testfile 
s3://${BUCKET}/deletetestapidir/f1
-    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/deletetestapidir/
+    ${result} =         Execute AWSS3Cli           cp /tmp/testfile 
s3://${BUCKET}/${PREFIX}/deletetestapidir/f1
+    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/${PREFIX}/deletetestapidir/
                         Should contain             ${result}         f1
-    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key deletetestapidir/
-    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/deletetestapidir/
+    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapidir/
+    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/${PREFIX}/deletetestapidir/
                         Should contain             ${result}         f1
-    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key deletetestapidir/f1
+    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapidir/f1
 
 
 Delete file with s3api, file doesn't exist, prefix of a real file
                         Execute                    date > /tmp/testfile
-    ${result} =         Execute AWSS3Cli           cp /tmp/testfile 
s3://${BUCKET}/deletetestapiprefix/filefile
-    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/deletetestapiprefix/
+    ${result} =         Execute AWSS3Cli           cp /tmp/testfile 
s3://${BUCKET}/${PREFIX}/deletetestapiprefix/filefile
+    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/${PREFIX}/deletetestapiprefix/
                         Should contain             ${result}         filefile
-    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key deletetestapiprefix/file
-    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/deletetestapiprefix/
+    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapiprefix/file
+    ${result} =         Execute AWSS3Cli           ls 
s3://${BUCKET}/${PREFIX}/deletetestapiprefix/
                         Should contain             ${result}         filefile
-    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key deletetestapiprefix/filefile
+    ${result} =         Execute AWSS3APICli        delete-object --bucket 
${BUCKET} --key ${PREFIX}/deletetestapiprefix/filefile
 
 
 
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/objectmultidelete.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/objectmultidelete.robot
index 6e22d4c..cc49129 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/objectmultidelete.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/objectmultidelete.robot
@@ -30,20 +30,20 @@ ${BUCKET}             generated
 
 Delete file with multi delete
                         Execute                    date > /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key multidelete/f1 --body /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key multidelete/f2 --body /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key multidelete/f3 --body /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix multidelete/
-                        Should contain             ${result}         
multidelete/f1
-                        Should contain             ${result}         
multidelete/f2
-                        Should contain             ${result}         
multidelete/f3
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/multidelete/f1 --body /tmp/testfile
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/multidelete/f2 --body /tmp/testfile
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/multidelete/f3 --body /tmp/testfile
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/multidelete/
+                        Should contain             ${result}         
${PREFIX}/multidelete/f1
+                        Should contain             ${result}         
${PREFIX}/multidelete/f2
+                        Should contain             ${result}         
${PREFIX}/multidelete/f3
                         Should contain             ${result}         STANDARD
                         Should not contain         ${result}         
REDUCED_REDUNDANCY
-    ${result} =         Execute AWSS3APICli        delete-objects --bucket 
${BUCKET} --delete 
'Objects=[{Key=multidelete/f1},{Key=multidelete/f2},{Key=multidelete/f4}]'
+    ${result} =         Execute AWSS3APICli        delete-objects --bucket 
${BUCKET} --delete 
'Objects=[{Key=${PREFIX}/multidelete/f1},{Key=${PREFIX}/multidelete/f2},{Key=${PREFIX}/multidelete/f4}]'
                         Should not contain         ${result}         Error
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix multidelete/
-                        Should not contain         ${result}         
multidelete/f1
-                        Should not contain         ${result}         
multidelete/f2
-                        Should contain             ${result}         
multidelete/f3
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/multidelete/
+                        Should not contain         ${result}         
${PREFIX}/multidelete/f1
+                        Should not contain         ${result}         
${PREFIX}/multidelete/f2
+                        Should contain             ${result}         
${PREFIX}/multidelete/f3
                         Should contain             ${result}         STANDARD
                         Should not contain         ${result}         
REDUCED_REDUNDANCY
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/objectputget.robot 
b/hadoop-ozone/dist/src/main/smoketest/s3/objectputget.robot
index 40bcccb..e1896e2 100644
--- a/hadoop-ozone/dist/src/main/smoketest/s3/objectputget.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/objectputget.robot
@@ -31,22 +31,22 @@ ${BUCKET}             generated
 
 Put object to s3
                         Execute                    echo "Randomtext" > 
/tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key putobject/f1 --body /tmp/testfile
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix putobject/
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --body /tmp/testfile
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/putobject/
                         Should contain             ${result}         f1
 
                         Execute                    touch -f /tmp/zerobyte
-    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key putobject/zerobyte --body /tmp/zerobyte
-    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix putobject/
+    ${result} =         Execute AWSS3ApiCli        put-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/zerobyte --body /tmp/zerobyte
+    ${result} =         Execute AWSS3ApiCli        list-objects --bucket 
${BUCKET} --prefix ${PREFIX}/putobject/
                         Should contain             ${result}         zerobyte
 
 #This test depends on the previous test case. Can't be executes alone
 Get object from s3
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 /tmp/testfile.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 /tmp/testfile.result
     Compare files               /tmp/testfile              /tmp/testfile.result
 
 Get Partial object from s3 with both start and endoffset
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=0-4 /tmp/testfile1.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=0-4 /tmp/testfile1.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 0-4/11
                                 Should contain             ${result}        
AcceptRanges
@@ -54,7 +54,7 @@ Get Partial object from s3 with both start and endoffset
     ${actualData} =             Execute                    cat 
/tmp/testfile1.result
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=2-4 /tmp/testfile1.result1
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=2-4 /tmp/testfile1.result1
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 2-4/11
                                 Should contain             ${result}        
AcceptRanges
@@ -63,7 +63,7 @@ Get Partial object from s3 with both start and endoffset
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 # end offset greater than file size and start with in file length
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=2-1000 /tmp/testfile1.result2
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=2-1000 
/tmp/testfile1.result2
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 2-10/11
                                 Should contain             ${result}        
AcceptRanges
@@ -72,12 +72,12 @@ Get Partial object from s3 with both start and endoffset
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Get Partial object from s3 with both start and endoffset(start offset and 
endoffset is greater than file size)
-    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key putobject/f1 --range bytes=10000-10000 
/tmp/testfile2.result   255
+    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key ${PREFIX}/putobject/f1 --range 
bytes=10000-10000 /tmp/testfile2.result   255
                                 Should contain             ${result}        
InvalidRange
 
 
 Get Partial object from s3 with both start and endoffset(end offset is greater 
than file size)
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=0-10000 /tmp/testfile2.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=0-10000 
/tmp/testfile2.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 0-10/11
                                 Should contain             ${result}        
AcceptRanges
@@ -86,7 +86,7 @@ Get Partial object from s3 with both start and endoffset(end 
offset is greater t
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Get Partial object from s3 with only start offset
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=0- /tmp/testfile3.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=0- /tmp/testfile3.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 0-10/11
                                 Should contain             ${result}        
AcceptRanges
@@ -95,7 +95,7 @@ Get Partial object from s3 with only start offset
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Get Partial object from s3 with both start and endoffset which are equal
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=0-0 /tmp/testfile4.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=0-0 /tmp/testfile4.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 0-0/11
                                 Should contain             ${result}        
AcceptRanges
@@ -103,7 +103,7 @@ Get Partial object from s3 with both start and endoffset 
which are equal
     ${actualData} =             Execute                    cat 
/tmp/testfile4.result
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=4-4 /tmp/testfile5.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=4-4 /tmp/testfile5.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 4-4/11
                                 Should contain             ${result}        
AcceptRanges
@@ -112,7 +112,7 @@ Get Partial object from s3 with both start and endoffset 
which are equal
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Get Partial object from s3 to get last n bytes
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=-4 /tmp/testfile6.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=-4 /tmp/testfile6.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 7-10/11
                                 Should contain             ${result}        
AcceptRanges
@@ -121,7 +121,7 @@ Get Partial object from s3 to get last n bytes
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 # if end is greater than file length, returns whole file
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=-10000 /tmp/testfile7.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=-10000 
/tmp/testfile7.result
                                 Should contain             ${result}        
ContentRange
                                 Should contain             ${result}        
bytes 0-10/11
                                 Should contain             ${result}        
AcceptRanges
@@ -130,14 +130,14 @@ Get Partial object from s3 to get last n bytes
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Incorrect values for end and start offset
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=-11-10000 /tmp/testfile8.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=-11-10000 
/tmp/testfile8.result
                                 Should not contain         ${result}        
ContentRange
                                 Should contain             ${result}        
AcceptRanges
     ${expectedData} =           Execute                    cat /tmp/testfile
     ${actualData} =             Execute                    cat 
/tmp/testfile8.result
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
-    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key putobject/f1 --range bytes=11-8 /tmp/testfile9.result
+    ${result} =                 Execute AWSS3ApiCli        get-object --bucket 
${BUCKET} --key ${PREFIX}/putobject/f1 --range bytes=11-8 /tmp/testfile9.result
                                 Should not contain         ${result}        
ContentRange
                                 Should contain             ${result}        
AcceptRanges
     ${expectedData} =           Execute                    cat /tmp/testfile
@@ -145,11 +145,11 @@ Incorrect values for end and start offset
                                 Should Be Equal            ${expectedData}     
       ${actualData}
 
 Zero byte file
-    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key putobject/zerobyte --range bytes=0-0 
/tmp/testfile2.result   255
+    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key ${PREFIX}/putobject/zerobyte --range 
bytes=0-0 /tmp/testfile2.result   255
                                 Should contain             ${result}        
InvalidRange
 
-    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key putobject/zerobyte --range bytes=0-1 
/tmp/testfile2.result   255
+    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key ${PREFIX}/putobject/zerobyte --range 
bytes=0-1 /tmp/testfile2.result   255
                                 Should contain             ${result}        
InvalidRange
 
-    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key putobject/zerobyte --range bytes=0-10000 
/tmp/testfile2.result   255
+    ${result} =                 Execute AWSS3APICli and checkrc        
get-object --bucket ${BUCKET} --key ${PREFIX}/putobject/zerobyte --range 
bytes=0-10000 /tmp/testfile2.result   255
                                 Should contain             ${result}        
InvalidRange
\ No newline at end of file
diff --git a/hadoop-ozone/dist/src/main/smoketest/s3/s3_compatbility_check.sh 
b/hadoop-ozone/dist/src/main/smoketest/s3/s3_compatbility_check.sh
new file mode 100755
index 0000000..3153bd7
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/smoketest/s3/s3_compatbility_check.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# shellcheck disable=SC2086
+
+set -e
+
+# This script helps to execute S3 robot test against real AWS s3 endpoint
+# To make sure that all of our defined tests cases copies the behavior of AWS
+
+: ${OZONE_TEST_S3_BUCKET1:?Please define test bucket}
+: ${OZONE_TEST_S3_BUCKET2:?Please define second test bucket}
+: ${OZONE_TEST_S3_REGION:?Please define the S3 region for test buckets}
+
+run_robot_test() {
+   TEST_NAME=$1
+   robot \
+       --nostatusrc \
+       -v ENDPOINT_URL:https://s3.$OZONE_TEST_S3_REGION.amazonaws.com \
+       -v BUCKET:$OZONE_TEST_S3_BUCKET1 \
+       -v DESTBUCKET:$OZONE_TEST_S3_BUCKET2 \
+       -v OZONE_S3_SET_CREDENTIALS:false \
+       -o results/$TEST_NAME.xml \
+       $TEST_NAME.robot
+}
+
+mkdir -p results
+
+run_robot_test objectputget
+run_robot_test objectdelete
+run_robot_test objectcopy
+run_robot_test objectmultidelete
+run_robot_test MultipartUpload
+
+rebot --outputdir results/ results/*.xml


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to