def main(argv): ## PARAM OVERRIDES dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. #dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. #dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if(ret == -1): sys.exit(2) ## Cross account copy # BUCKETNAME = 'buck668' # userObj = dssSanityLib.getConnection(1) ##pers ## dssSanityLib.cleanupUser(userObj, BUCKETNAME) # b = userObj.create_bucket(BUCKETNAME) # k = Key(b) # k.key = 'tobecopiedobj' # k.set_contents_from_string('I used to be in buck667') # anObj = dssSanityLib.getConnection(0) ##shiv test ## dssSanityLib.cleanupUser(anObj, BUCKETNAME) # c = anObj.create_bucket(BUCKETNAME + 'buckwow18') # l = c.copy_key('dest1', BUCKETNAME, 'tobecopiedobj') # print str(l) ## Bucket create and cross account access BUCKETNAME = 'buck888' userObj = dssSanityLib.getConnection(0) b = userObj.create_bucket(BUCKETNAME) k = Key(b) k.key = 'obj' k.set_contents_from_string('obj which will be downloaded from cross account') user2 = dssSanityLib.getConnection(1) c = user2.get_bucket(BUCKETNAME) # j = Key(c) # j.key = 'obj' # try: # print j.get_contents_as_string() # except: # print "IAM did not validate get object when cross account get bucket is allowed." ## Copy object single user workflow # userObj = dssSanityLib.getConnection() # b = userObj.create_bucket('copysourcebucket') # k = Key(b) # k.key = 'obj500' # k.set_contents_from_string('obj text') # c = userObj.create_bucket('copydestbucket') # l = c.copy_key('newobj', 'copysourcebucket', 'obj500') # print str(l) return
def deleteBucket(targ): if (not targ): print "Need target to delete!" return -1 if (dssSanityLib.CLI_USER): userObj = dssSanityLib.getConnection(int(dssSanityLib.CLI_USER)) else: userObj = dssSanityLib.getConnection() dssSanityLib.cleanupUser(userObj, targ) return
def createObject(num, targ): if (dssSanityLib.CLI_USER): userObj = dssSanityLib.getConnection(int(dssSanityLib.CLI_USER)) else: userObj = dssSanityLib.getConnection() b = userObj.get_bucket(targ) k = Key(b) for i in range(1, int(num) + 1): k.key = 'Obj_' + str(i) k.set_contents_from_string("User data for obj") return
def createBucket(num, targ): pref = dssSanityLib.getsNewBucketName(targ) if (dssSanityLib.CLI_USER): userObj = dssSanityLib.getConnection(int(dssSanityLib.CLI_USER)) else: userObj = dssSanityLib.getConnection() for i in range(1, int(num) + 1): buckname = pref + str(i) dssSanityLib.whisper("Creating bucket " + buckname) userObj.create_bucket(buckname) return
def listBucket(targ): if (dssSanityLib.CLI_USER): userObj = dssSanityLib.getConnection(int(dssSanityLib.CLI_USER)) else: userObj = dssSanityLib.getConnection() if (not targ): dssSanityLib.listBucketNum(userObj, "user") dssSanityLib.listBucket(userObj, "user") else: print "Listing bucket " + str(targ) b = userObj.get_bucket(targ) for k in b.list(): print str(k) return
def main(argv): ## PARAM OVERRIDES #dssSanityLib.MULTIPART_LARGE_FILE = '/boot/initrd.img-3.13.0-24-generic' # Need a large file to upload in multiparts. dssSanityLib.MULTIPART_LARGE_FILE = 'output.dat' # Need a large file to upload in multiparts. dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. ##dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. ##dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if (ret == -1): sys.exit(2) ## TESTCASES dssSanityLib.callTest(bucketSanity(), "Create buckets and objects then delete them") dssSanityLib.callTest(multipartObjectUpload(), "Upload object in Multiparts") #dssSanityLib.callTest(dnsNamesTest(), "Check various DNS name rules") dssSanityLib.callTest(publicUrlTest(), "Public URL test") ## CLEANUP userObj = dssSanityLib.getConnection() #dssSanityLib.cleanupUser(userObj, 'rjilbucketsanity') return
def main(argv): ## PARAM OVERRIDES dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. #dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. #dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if(ret == -1): sys.exit(2) userObj = dssSanityLib.getConnection(1) b = userObj.create_bucket('gangadhar') k = Key(b) k.key = 'lobhaidekhlo' k.set_contents_from_string('obj text') #out = k.get_contents_as_string() #k.set_acl('public-read-write') #k.get_acl() #b.set_acl('private') #b.get_acl() #nuObj = dssSanityLib.getConnection(2) #c = nuObj.get_bucket('twopubbuck') #k = Key(c) #k.key = 'obj500' #k.set_contents_from_string('obj text') return
def main(argv): ## PARAM OVERRIDES dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. #dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. #dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if(ret == -1): sys.exit(2) userObj = dssSanityLib.getConnection(1) b = userObj.create_bucket('gangadhar') #k = Key(b) #k.key = 'obj' #k.set_contents_from_string('obj text') #out = k.get_contents_as_string() #k.set_acl('public-read-write') #k.get_acl() #b.set_acl('private') #b.get_acl() #nuObj = dssSanityLib.getConnection(2) #c = nuObj.get_bucket('twopubbuck') #k = Key(c) #k.key = 'obj500' #k.set_contents_from_string('obj text') return
def print_obj(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.get_bucket(BUCKETNAME) for k in b.list(): print "\nObj name: " + str(k) + "\t Data: " + k.get_contents_as_string() return
def publicUrlTest(): result = 0 userObj = dssSanityLib.getConnection() bucketpref = dssSanityLib.getsNewBucketName() b1 = userObj.create_bucket(bucketpref) k = Key(b1) k.key = 'userObj1' k.set_contents_from_string('Data of URL object') m = Key(b1) m.key = 'userObj1' urlname = m.generate_url(1000) print "\nThe userObj URL is: " + str(urlname) urlname = b1.generate_url(1000) print "\nThe bucket URL is: " + str(urlname) for i in range(1, 3): time.sleep(1) if i % 5 == 0: print str(2 - i) + " Seconds left before Obj deletion" m.delete() print "Object deleted\n" for i in range(1, 3): time.sleep(1) if i % 5 == 0: print str(2 - i) + " Seconds left before bucket deletion" userObj.delete_bucket(bucketpref) print "Bucket deleted\n" return result
def delete_obj(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.get_bucket(BUCKETNAME) for k in b.list(): print "Deleting: " + str(k) k.delete()
def bucketSanity(): ## Create five buckets dssSanityLib.whisper( "Creating five test buckets and putting objects in them...") bucketpref = dssSanityLib.getsNewBucketName() dssSanityLib.createMaxBuckets(12, bucketpref) ## Bucket name conflict during creation #dssSanityLib.whisper("Trying to create a bucket with name conflict...") #userObj = dssSanityLib.getConnection(1) ## Different user #buck_str = bucketpref + '1' #try: #b = userObj.create_bucket(buck_str) #print "Error: Unexpectedly created bucket " + buck_str #return -1 #except: # print "Expected failure: " + str(sys.exc_info()) ## Delete all buckets try: userObj = dssSanityLib.getConnection() dssSanityLib.whisper("Deleting the test buckets...") dssSanityLib.cleanupUser(userObj, bucketpref) except: print "Unexpected failure: " + str(sys.exc_info()) return -1 return 0
def bucketSanity(): ## Create five buckets dssSanityLib.whisper("Creating five test buckets and putting objects in them...") bucketpref = dssSanityLib.getsNewBucketName() dssSanityLib.createMaxBuckets(12, bucketpref) ## Bucket name conflict during creation #dssSanityLib.whisper("Trying to create a bucket with name conflict...") #userObj = dssSanityLib.getConnection(1) ## Different user #buck_str = bucketpref + '1' #try: #b = userObj.create_bucket(buck_str) #print "Error: Unexpectedly created bucket " + buck_str #return -1 #except: # print "Expected failure: " + str(sys.exc_info()) ## Delete all buckets try: userObj = dssSanityLib.getConnection() dssSanityLib.whisper("Deleting the test buckets...") dssSanityLib.cleanupUser(userObj, bucketpref) except: print "Unexpected failure: " + str(sys.exc_info()) return -1 return 0
def main(argv): ## PARAM OVERRIDES dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. # dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. # dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if ret == -1: sys.exit(2) userObj = dssSanityLib.getConnection() # userObj.create_bucket('bucket0'); # userObj.create_bucket('bucket1'); # userObj.create_bucket('bucket2'); # userObj.create_bucket('bucket3'); # userObj.create_bucket('bucket4'); # userObj.create_bucket('bucket5'); # userObj.create_bucket('bucket6'); # userObj.create_bucket('bucket7'); # userObj.create_bucket('bucket8'); # userObj.create_bucket('bucket9'); print userObj.get_all_buckets() return
def multipartObjectUpload(): result = 0 dssSanityLib.whisper("Making bucket and listing...") userObj = dssSanityLib.getConnection() bucketpref = dssSanityLib.getsNewBucketName() b = userObj.create_bucket(bucketpref) #dssSanityLib.listBucket(userObj, "User") source_path = dssSanityLib.MULTIPART_LARGE_FILE source_size = os.stat(source_path).st_size chunk_size = 5242880 ## 5 mb #chunk_size = 1048576 ## 1 mb chunk_count = int(math.ceil(source_size / float(chunk_size))) b1 = userObj.get_bucket(bucketpref) dssSanityLib.whisper("Got bucket: " + str(b1)) try: mp = b1.initiate_multipart_upload(os.path.basename(source_path)) for i in range(chunk_count): dssSanityLib.whisper("Uploading chunk: " + str(i)) offset = chunk_size * i bytes = min(chunk_size, source_size - offset) with FileChunkIO(source_path, 'r', offset=offset, bytes=bytes) as fp: mp.upload_part_from_file(fp, part_num=i + 1) mp.complete_upload() except: print "Unexpected error during multipart upload: ", sys.exc_info() result = -1 dssSanityLib.cleanupUser(userObj, bucketpref) return result
def delete_obj(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.get_bucket(BUCKETNAME) k = Key(b) k.key = 'file33' k.delete() return
def create_stuff(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.create_bucket(BUCKETNAME) k = Key(b) k.key = "videofile.flv" k.set_contents_from_string("obj which will be downloaded") return
def print_obj(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.get_bucket(BUCKETNAME) for k in b.list(): print k print k.get_contents_as_string() return
def create_stuff(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.create_bucket(BUCKETNAME) k = Key(b) k.key = 'videofile.flv' k.set_contents_from_string('obj which will be downloaded') #c = userObj.get_bucket(BUCKETNAME) #l = c.copy_key('newobj', BUCKETNAME, 'audio.mp3') return
def create_obj(): global BUCKETNAME name = dssSanityLib.getsNewBucketName() userObj = dssSanityLib.getConnection() b = userObj.get_bucket(BUCKETNAME) k = Key(b) k.key = name k.set_contents_from_string('obj data') l = Key(b) l.key = name + '_new' l.set_contents_from_string('new obj data') return name
def dnsNamesTest(): userObj = dssSanityLib.getConnection() result = 0 longHundredChars = 'a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789a123456789' longFiftyChars = 'a123456789a123456789a123456789a123456789a123456789' longTFTchars = longHundredChars + longHundredChars + longFiftyChars + 'qwe' try: userObj.create_bucket(longTFTchars) userObj.delete_bucket(longTFTchars) print "Able to create bucket with 253 chars in name" except: print "Failed to create or delete a valid bucket name" print "Unexpected error: ", sys.exc_info() return -1 try: badName = longTFTchars + 'abc' userObj.create_bucket(badName) print "Unexpectedly created bucket with illegally long name" dssSanityLib.listBucketNum(userObj, "user") dssSanityLib.listBucket(userObj, "user") userObj.delete_bucket(badName) result = -1 except: print "Expected failure in creating 256 char bucket name" print "Expected error: ", sys.exc_info() try: badName = 'Abc' userObj.create_bucket(badName) print "Unexpectedly created bucket with capital letter name" dssSanityLib.listBucketNum(userObj, "user") dssSanityLib.listBucket(userObj, "user") userObj.delete_bucket(badName) result = -1 except: print "Expected failure in creating bucket name with CAPS" print "Expected error: ", sys.exc_info() try: badName = 'bc/' userObj.create_bucket(badName) print "Unexpectedly created bucket with slash in name" dssSanityLib.listBucketNum(userObj, "user") dssSanityLib.listBucket(userObj, "user") userObj.delete_bucket(badName) result = -1 except: print "Expected failure in creating bucket name with slash" print "Expected error: ", sys.exc_info() return result
def multipartObjectUpload(): result = 0 dssSanityLib.whisper("Making bucket and listing...") userObj = dssSanityLib.getConnection() bucketpref = dssSanityLib.getsNewBucketName() b = userObj.create_bucket(bucketpref) #b.set_acl('public-read-write') ##dssSanityLib.listBucket(userObj, "User") source_path = dssSanityLib.MULTIPART_LARGE_FILE source_size = os.stat(source_path).st_size chunk_size = 5242880 ## 5 mb #chunk_size = 1048576 ## 1 mb chunk_count = int(math.ceil(source_size / float(chunk_size))) b1 = userObj.get_bucket(bucketpref) dssSanityLib.whisper("Got bucket: " + str(b1)) try: mp = b1.initiate_multipart_upload(os.path.basename(source_path)) for i in range(chunk_count): dssSanityLib.whisper("Uploading chunk: " + str(i)) offset = chunk_size * i bytes = min(chunk_size, source_size - offset) with FileChunkIO(source_path, 'r', offset=offset, bytes=bytes) as fp: mp.upload_part_from_file(fp, part_num=i + 1) time.sleep(2) for i in b1.list_multipart_uploads(): print "list_multipart_uploads: " + str(i) for i in b1.get_all_multipart_uploads(): print "get_all_multipart_uploads: " + str(i) print("\n\nCompleting uploads") mp.complete_upload() #print("\n\nCancelling uploads") #mp.cancel_upload() except: print "Unexpected error during multipart upload: ", sys.exc_info() result = -1 dssSanityLib.cleanupUser(userObj, bucketpref) return result
def main(argv): ## PARAM OVERRIDES dssSanityLib.MULTIPART_LARGE_FILE = '/boot/initrd.img-3.19.0-25-generic' # Need a large file to upload in multiparts. dssSanityLib.GLOBAL_DEBUG = 1 # The lib supresses debug logs by default. Override here. ##dssSanityLib.RADOSHOST = '127.0.0.1' # The lib points to DSS staging endpoint by default. Override here. ##dssSanityLib.RADOSPORT = 7480 # The lib points to DSS staging endpoint by default. Override here. ret = dssSanityLib.fetchArgs(argv) if(ret == -1): sys.exit(2) ## TESTCASES dssSanityLib.callTest(bucketSanity(), "Create buckets and objects then delete them") dssSanityLib.callTest(multipartObjectUpload(), "Upload object in Multiparts") dssSanityLib.callTest(dnsNamesTest(), "Check various DNS name rules") dssSanityLib.callTest(publicUrlTest(), "Public URL test") ## CLEANUP userObj = dssSanityLib.getConnection() dssSanityLib.cleanupUser(userObj, 'rjilbucketsanity') return
def publicUrlTest(): result = 0 userObj = dssSanityLib.getConnection() bucketpref = dssSanityLib.getsNewBucketName() b1 = userObj.create_bucket(bucketpref) #print "Setting ACL on bucket" #b1.set_acl('public-read') k = Key(b1) k.key = 'userObj1' k.set_contents_from_string('Data of URL object') #print "Setting ACL on obj" #k.set_acl('public-read') m = Key(b1) m.key = 'userObj1' urlname = m.generate_url(1000) print "\nThe userObj URL is: " + str(urlname) urlname = b1.generate_url(10000) print "\nThe bucket URL is: " + str(urlname) #for i in range(1, 21): # time.sleep(1) # if i % 5 == 0: # print str(20 - i) + " Seconds left before Obj deletion" #m.delete() #print "Object deleted\n" #for i in range(1, 21): # time.sleep(1) # if i % 5 == 0: # print str(20 - i) + " Seconds left before bucket deletion" #userObj.delete_bucket(bucketpref) #print "Bucket deleted\n" return result
def create_bucket(): global BUCKETNAME userObj = dssSanityLib.getConnection() b = userObj.create_bucket(BUCKETNAME) return
def crossAccountInSanity(): x=randint(0,1000) # specify the bucket name of the third account buckName='buck264' userObj = dssSanityLib.getConnection(1) userObj2 = dssSanityLib.getConnection(2) #userObj.create_bucket(buckName) try: b=userObj2.get_bucket(buckName) except: print "Expected failure as permissions are not yet given to User2" print "Expected error: ", sys.exc_info() os.system("cd jcsclient") #os.system("source openrc_raj1_Staging") dssSanityLib.sourceCLI(1) try: command ="jcs iam CreateResourceBasedPolicy --PolicyDocument \"{\\\"name\\\": \\\"DeleteBucket"+str(x)+"\\\", \\\"statement\\\": [{\\\"action\\\": [\\\"jrn:jcs:dss:ListBucket\\\"], \\\"principle\\\": [\\\"jrn:jcs:iam:713268835218:User:rajat\\\"], \\\"effect\\\": \\\"allow\\\"}]}\"" print "executed command is:: "+command ret = os.popen(command).read() print ret pairs=ret.split(",") #print pairs[3] values=pairs[2].split("\"") print values[3] policyId=values[3] command="jcs iam AttachPolicyToResource --PolicyId "+policyId+" --Resource \"{\\\"resource\\\": [\\\"jrn:jcs:dss:319505121107:Bucket:"+buckName+"\\\"]}\"" print "executed command is:: "+command ret = os.popen(command).read() except: print "Unexpected error in creating a policy and attaching resource to it" return -1 #userObj = dssSanityLib.getConnection(2) try: b=userObj2.get_bucket(buckName) except: print "Not able to get bucket despite giving permissions" return -1 print ret try: command="jcs iam DeleteResourceBasedPolicy --Id "+policyId print "executed command is:: "+command ret = os.popen(command).read() print ret except: print "Error in deleting the resourceBasedPolicy" return -1 bucks=userObj.get_all_buckets() for bucket in bucks: print "Checking for "+bucket.name #userObj.delete_bucket(bucket.name) if (bucket.name == buckName): print "Bucket still present despite being deleted by the second account" os.system("cd ..") return 0
def crossAccountSanity(): x=randint(0,1000) buckName='buck'+str(x) userObj = dssSanityLib.getConnection(1) userObj2 = dssSanityLib.getConnection(2) userObj.create_bucket(buckName) try: userObj2.delete_bucket(buckName) except: print "Expected failure as permissions are not yet given to User2" print "Expected error: ", sys.exc_info() os.system("cd jcsclient") #os.system("source openrc_raj1_Staging") dssSanityLib.sourceCLI(1) try: command = dssSanityLib.getCreateResourcePolicyCommand(2,x) ret = os.popen(command).read() print ret pairs=ret.split(",") #print pairs[3] values=pairs[2].split("\"") print values[3] policyId=values[3] command = dssSanityLib.getAttachPolicyToResourceCommand(1,buckName,policyId) ret = os.popen(command).read() except: print "Unexpected error in creating a policy and attaching resource to it" return -1 dssSanityLib.sourceCLI(2) command = dssSanityLib.getCreateUserPolicyCommand(1,x, buckName) ret = os.popen(command).read() print ret pairs=ret.split(",") #print pairs[3] values=pairs[2].split("\"") print values[3] policyId1=values[3] command = dssSanityLib.getAttachPolicyToUserCommand(2,policyId1) print "executed command is:: "+command ret = os.popen(command).read() try: userObj2.delete_bucket(buckName) except: print "Not able to delete bucket despite giving permissions" return -1 print ret try: print "cleaning up" command="jcs iam DeletePolicy --Id "+policyId1 print "executed command is:: "+command ret = os.popen(command).read() print ret dssSanityLib.sourceCLI(1) command="jcs iam DeleteResourceBasedPolicy --Id "+policyId print "executed command is:: "+command ret = os.popen(command).read() print ret except: print "Error in deleting the resourceBasedPolicy" return -1 bucks=userObj.get_all_buckets() for bucket in bucks: print "Checking for "+bucket.name #userObj.delete_bucket(bucket.name) if (bucket.name == buckName): print "Bucket still present despite being deleted by the second account" return -1 os.system("cd ..") return 0