def usermodify(c,username): # only status and display name are to be modified. Failflag=False newdisplayname=random_key(31) userdata=SendCmd(c,"user -u "+username) if "Enabled" in userdata: SendCmd(c,"user -a mod -u "+username+" -s "+"\"status=disable,name="+newdisplayname+"\"") res=SendCmd(c,"user -v -u "+username) if "Disabled" in res and newdisplayname in res: tolog("Modified user %s info successfully." %username) else: Failflag=True tolog("Modified user %s info failed." % username) else: SendCmd(c, "user -a mod -u " + username + " -s " + "\"status=enable,name=" + newdisplayname + "\"") res = SendCmd(c, "user -v -u " + username) if "Enabled" in res and newdisplayname in res: tolog("Modified user %s info successfully." % username) else: Failflag = True tolog("Modified user %s info failed." % username) if Failflag: tolog(Fail) else: tolog(Pass)
def usercreate(c,usertype,privilegetype): username=random_key(31) displayname = random_key(31) department=random_key(31) phone=random_key(31) emailaddress=address_generator() privilege=("Super","Power","Maintenance","View") type= ("mgmt","snmp","ds") auth= ("md5","sha") priv=("des", "aes") # test 1 # user type: mgmt if usertype=="mgmt": if privilegetype!="": userinfo = {"username": username, "displayname": displayname, "emailaddress": emailaddress, "privilege": privilegetype} else: userinfo = {"username": username, "displayname": displayname, "emailaddress": emailaddress, "privilege": random.choice(privilege)} settings = " -u " + userinfo["username"] + " -p " + userinfo[ "privilege"] + " -t " + usertype + " -s " + "\"name=" + userinfo["displayname"] + ",email=" + userinfo[ "emailaddress"] + "\"" # print settings # create users SendCmd(c, "user -a add " + settings) # verify the created users userverify(c, userinfo) # modify the status and name of the above users # and verify the modified users usermodify(c,userinfo["username"]) # test 2 # user type: snmp if usertype=="snmp": pass # test 2 # user type: snmp if usertype=="ds": pass
def poolcreatewithallsettings_invalid_parameters(): Failflag = False name = random_key(30) stripesettings = ["64kb", "128kb", "256kb", "512kb", "1mb"] sectorsettings = ["512b", "1kb", "2kb", "4kb"] force_syncsettings = [0, 1] stripemap = {"64kb": "64 KB", "128kb": "128 KB", "256kb": "256 KB", "512kb": "512 KB", "1mb": "1 MB"} force_syncmap = {0: "Disabled", 1: "Enabled"} raidmap = {"RAID0": 0, "RAID1": 1, "RAID5": 5, "RAID6": 6, "RAID10": 10, "RAID50": 50, "RAID60": 60} raids = ["RAID0","RAID1","RAID5","RAID6","RAID10","RAID50","RAID60"] availpdlist = getavailpd() for raidlevel in raids: for stripe in stripesettings: for sector in sectorsettings: for force_sync in force_syncsettings: if raidlevel=="RAID0": availpdlist=random.sample(availpdlist,2) parameters = { "name": name, "pds": availpdlist, "raid_level": raidlevel, "ctrl_id": 1, "stripe": stripe, "sector": sector, "force_sync": force_sync} #server.webapiurlbody("post","pool",body=parameters) #print parameters createobj("pool",parameters) res=json.loads(viewobj("pool",0))[0] getpdstr=str(res["pds"]).replace("u","") parapdstr=str(parameters["pds"]).replace("[","").replace("]","").replace(" ","") if res["name"]==parameters["name"] and getpdstr==parapdstr and res["stripe"]==stripemap[parameters["stripe"]]\ and res["sector"]==sectormap[parameters["sector"]] and res["force_sync"]==force_syncmap[parameters["force_sync"]] and \ res["raid_level"]==raidmap[parameters["raid_level"]]: tolog("Succesfully created pool with parameters %s" %(str(parameters))) else: Failflag=True tolog("Failed to create pool with parameters %s" % (str(parameters))) deleteobj("pool",0) if Failflag: tolog(Fail) else: tolog(Pass)
def SetControllerSetting(): Failflag = False ctrlinfo=Controllerinfo() print ctrlinfo for ctrl in ctrlinfo: aliasname=ctrl[0]["alias"] tolog("Old alias is %s" %aliasname.decode().encode('utf-8')) ctrlid=ctrl[0]["id"] urlpara=str(ctrlid)+"/setting" newname=random_key(10) body={"alias":newname} res=server.webapiurlbody("put", "ctrl", urlpara,body) tolog(str(res["response"])) ctrlinfo=Controllerinfo() for ctrl1 in ctrlinfo: if ctrlid==ctrl1[0]["id"]: if ctrl1[0]["is_present"]==0: if ctrl1[0]["alias"]!=newname: # Failflag=True # tolog("Change ctrlid %s alias failed" %ctrlid) # break pass else: Failflag = True # tolog("Change ctrlid %s alias successfully." %ctrlid) else: if ctrl1[0]["alias"]!=newname: Failflag=True tolog("Change ctrlid %s alias failed" %ctrlid) break else: tolog("Change ctrlid %s alias successfully." %ctrlid) if Failflag: tolog(Fail) else: tolog(Pass)
def verifyCtrlMod(c): FailFlag = False tolog("Verify ctrl -a mod") result = SendCmd(c, "ctrl") for index in [4, 5]: row = result.split("\r\n")[index] if row.split()[-2] == "OK": CtrlID = row.split()[0] tolog("verify ctrl -a mod -i " + str(CtrlID) + " -s <list of settings>") # verify alias for values in [ 'test_12', '12_test', 'test 12', '_', '123', 'test' ]: setting = "\"alias = " + values + "\"" SendCmd(c, "ctrl -a mod -i " + str(CtrlID) + " -s " + setting) result = SendCmd(c, "ctrl -v -i " + str(CtrlID)) if "Alias: " + values not in result: FailFlag = True tolog("Fail: " + "ctrl -a mod -i " + str(CtrlID) + " -s %s" % setting) # verify the values of enable or disable for values in ['disable', 'enable']: option = [ "SMART = " + values, "AdaptiveWBCache = " + values, "HostCacheFlushing = " + values, "ForcedReadAhead = " + values, "SSDTrimSupport = " + values, # "VAAIsupport = " + values, "Coercion = " + values, # to be confirmed "Coercion = enable" ] for Op in option: SendCmd( c, "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + Op + '"') result = SendCmd(c, "ctrl -v -i " + str(CtrlID)) if Op.split()[0] + ': ' + Op.split()[-1].capitalize( ) + 'd' not in result: FailFlag = True tolog("Fail: " + "ctrl -a mod -s " + '"' + Op + '"') # verify the values of times option -- boundary value testing for option in [ "powersavingidletime", "powersavingstandbytime", "powersavingstoppedtime" ]: for values in [0, 1, 1439, 1440]: # print "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"' result = SendCmd( c, "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"') if "Error" in result: FailFlag = True tolog("Fail:" + "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"') # Failed the test for values in ['123']: option = [ "SMART = " + values, "AdaptiveWBCache = " + values, "HostCacheFlushing = " + values, "ForcedReadAhead = " + values, "SSDTrimSupport = " + values, # "VAAIsupport = " + values, "Coercion = " + values, ] for Op in option: result = SendCmd( c, "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + Op + '"') # result = SendCmd(c, "ctrl -v -i " + str(CtrlID)) if "Error" not in result or "Invalid setting parameters" not in result: FailFlag = True tolog("Fail: ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + Op + '"') for option in [ "powersavingidletime", "powersavingstandbytime", "powersavingstoppedtime" ]: for values in [-1, 1441]: # print "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"' result = SendCmd( c, "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"') if "Error" not in result or "Invalid setting parameters" not in result: FailFlag = True tolog("Fail:" + "ctrl -a mod -i " + str(CtrlID) + " -s " + '"' + option + " = " + str(values) + '"') from pool import random_key aliasname = random_key(49) for values in [' ', aliasname]: result = SendCmd( c, "ctrl -a mod -i " + str(CtrlID) + " -s " + '"alias = ' + values + '"') if "Error" not in result: FailFlag = True tolog("Fail: " + "ctrl -a mod -i " + str(CtrlID) + " -s alias = " + values + '"') result = SendCmd(c, "ctrl -a mod -i " + str(CtrlID) + " -x ") if "Error" not in result or "Invalid option" not in result: FailFlag = True tolog("Fail: ctrl -a mod -i " + str(CtrlID) + " -x ") result = SendCmd(c, "ctrl -a mod -i 3 -s " + '"alias = test"') if "Error" not in result or "Invalid setting parameters" not in result: FailFlag = True tolog("Fail: ctrl -a mod -i 3 -s " + '"alias = test"') if FailFlag: tolog(Fail) else: tolog(Pass)
def CloneCreateListModifyDelete(sourceid): Failflag = False name = random_key(10) volumelistview = server.webapiurlbody("get", "volume") volumeview = json.loads(volumelistview["text"]) # create snapshot for each volume type=random.choice({"volume","filesystem"}) # do not support filesysrtem # as to 2017-5-15 type="volume" parameters=dict() parameters = { "name": name, "source_id": sourceid,"type":type} volumecreateres = server.webapiurlbody("post", "snapshot", body=parameters) if volumecreateres["text"] != "": tolog("Creating snapshot %s failed" % name) Failflag = True else: tolog("Creating snapshot %s successfully" % name) snapshotlistview = server.webapi("get", "snapshot") # server.webapiurl("delete", "pool", "0?force=0") snapshotview = json.loads(snapshotlistview["text"]) volumeid = "" for snapshot in snapshotview: if snapshot["name"] == name: snapshotid = str(snapshot["id"]) if snapshot["type"] != type or snapshot["source_id"] != sourceid: tolog("Verifying the created snapshot %s failed" % name) Failflag = True else: tolog("Verifying the created snapshot %s sucessfully by api view." % name) if snapshot["status"]=="Exported": tolog("Verifying snapshot unexport") urlpara=snapshotid+"/unexport" unexportres=server.webapiurlbody("post","snapshot",urlparameter=urlpara) #unexportres = json.loads(unexportres["text"]) if unexportres["text"]!="": tolog("Verifying snapshot unexport failed.") Failflag=True else: tolog("Verifying volume unexport successfully.") elif snapshot["status"]=="Un-exported": tolog("Verifying snapshot export") urlpara = snapshotid + "/export" exportres = server.webapiurlbody("post", "snapshot", urlparameter=urlpara) # unexportres = json.loads(unexportres["text"]) if exportres["text"] != "": tolog("Verifying snapshot export failed.") Failflag = True if snapshot["status"]=="Un-exported": tolog("Verifying snapshot export") urlpara=volumeid+"/export" unexportres=server.webapiurlbody("post","snapshot",urlparameter=urlpara) #unexportres = json.loads(unexportres["text"]) if unexportres["text"]!="": tolog("Verifying snapshot export failed.") Failflag=True else: tolog("Verifying snapshot export successfully.") elif snapshot["status"]=="Exported": tolog("Verifying snapshot unexport") urlpara = snapshotid + "/unexport" exportres = server.webapiurlbody("post", "snapshot", urlparameter=urlpara) # unexportres = json.loads(unexportres["text"]) if exportres["text"] != "": tolog("Verifying snapshot unexport failed.") Failflag = True if snapshot["status"]=="Exported": tolog("Verifying snapshot unexport") urlpara=snapshotid+"/unexport" unexportres=server.webapiurlbody("post","snapshot",urlparameter=urlpara) #unexportres = json.loads(unexportres["text"]) if unexportres["text"]!="": tolog("Verifying snapshot unexport failed.") Failflag=True else: tolog("Verifying volume unexport successfully.") elif snapshot["status"]=="Un-exported": tolog("Verifying snapshot export") urlpara = snapshotid + "/export" exportres = server.webapiurlbody("post", "snapshot", urlparameter=urlpara) # unexportres = json.loads(unexportres["text"]) if exportres["text"] != "": tolog("Verifying snapshot export failed.") Failflag = True if snapshot["status"]=="Un-exported": tolog("Verifying snapshot export") urlpara=volumeid+"/export" unexportres=server.webapiurlbody("post","snapshot",urlparameter=urlpara) #unexportres = json.loads(unexportres["text"]) if unexportres["text"]!="": tolog("Verifying snapshot export failed.") Failflag=True else: tolog("Verifying snapshot export successfully.") elif snapshot["status"]=="Exported": tolog("Verifying snapshot unexport") urlpara = snapshotid + "/unexport" exportres = server.webapiurlbody("post", "snapshot", urlparameter=urlpara) # unexportres = json.loads(unexportres["text"]) if exportres["text"] != "": tolog("Verifying snapshot unexport failed.") Failflag = True newname = {"name": random_key(20)} tolog("Verifying modify the snapshot name from %s to %sby api view." %(name,newname)) urlpara =snapshotid renameres = server.webapiurlbody("put", "snapshot", urlparameter=urlpara) if renameres["text"] != "": Failflag = True tolog("snapshot rename failed by api") else: # To be added 2017-5-15 # Body Parameters # # Body paramemters urlpara=snapshotid renameres=server.webapiurlbody("get","snapshot",urlparameter=urlpara) renameres=json.loads(renameres) if renameres["name"]!=newname: Failflag = True tolog("snapshot rename failed by api") else: tolog("snapshot rename successfully by api") tolog("Verifying snapshot delete.") urlparameter = snapshotid + "?force=1" deleteres = server.webapiurlbody("delete", "snapshot", urlparameter=urlparameter) if deleteres["text"] != "": Failflag = True tolog("snapshot delete failed by api delete.") else: tolog("snapshot delete sucessfully by api delete.") if Failflag: tolog(Fail) else: tolog(Pass)
def CI_VolumeCreateListExtendModifyDelete(poolid): Failflag = False name = random_key(10) poollistview = server.webapiurlbody("get", "pool") poolview = json.loads(poollistview["text"]) # create volume for each pool blocksizelst = ["512b", "1kb", "2kb", "4kb", "8kb", "16kb", "32kb", "64kb", "128kb"] sectorsizelst = ["512b", "1kb", "2kb", "4kb"] mincapacity = 1 maxcapacity = 10 compresslst=["off", "lzjb","gzip","gzip1","gzip2","gzip3","gzip4","gzip5","gzip6","gzip7","gzip8","gzip9","zle","lz4"] synclst=["standard","always","disabled"] thin_provlst=[0,1] blocksizemap={"512b":"512 Bytes", "1kb":"1 KB", "2kb":"2 KB", "4kb":"4 KB", "8kb":"8 KB", "16kb":"16 KB", "32kb": "32 KB", "64kb":"64 KB", "128kb":"128 KB"} thinmap={0:"Disabled",1: "Enabled"} #for pool in poolview: blocksize = random.choice(blocksizelst) sectorsize = random.choice(sectorsizelst) capacity = str(random.randint(mincapacity, maxcapacity)) + "GB" compress = random.choice(compresslst) compress="off" sync = random.choice(synclst) thin_prov = random.choice(thin_provlst) parameters=dict() parameters = { "name": name, "pool_id": poolid, "capacity": capacity, "block": blocksize, "sector": sectorsize, #"compress": compress, "sync": sync, "thin_prov": thin_prov} volumecreateres = server.webapiurlbody("post", "volume", body=parameters) if volumecreateres["text"] != "": tolog("Creating volume %s failed" % name) Failflag = True else: tolog("Creating volume %s successfully" % name) volumelistview = server.webapiurlbody("get", "volume") # server.webapiurl("delete", "pool", "0?force=0") volumeview = json.loads(volumelistview["text"]) volumeid = "" for volume in volumeview: if volume["name"] == name: volumeid = str(volume["id"]) # print volume #{u'sector': u'512 Bytes', u'create_date': u'2017-05-11 07:48:16', u'logbias': u'latency', u'sync': u'disabled', # u'snapshots': [], u'redundant_md': u'all', u'id': 1, u'ctrl_id': 2, u'export_id': 1, u'operational_status': # u'OK, Synchronizing', u'copies': 1, u'thin_prov': u'Enabled', u'used_capacity': 8192, u'written_capacity': # u'8.19 KB', u'status': u'Exported', u'pool_name': u'subsystem', u'snapshot_count': u'0', u'used_snapshot': u'0 Byte', # u'export_wwn': u'2237000155d6f1dd', u'name': u'xqWrYK8NOL', # u'total_capacity': 528594999999488, u'max_snapshot_count': u'1024', u'pool_id': 0, u'used_child': u'0 Byte', u'pool_avail': u'140.42 GB', u'block': u'1 KB'} if volume["sector"] != sectormap[sectorsize] or volume["block"] != blocksizemap[blocksize] or volume["sync"] != sync: tolog("Verifying the created volume %s failed" % name) Failflag = True else: tolog("Verifying the created volume %s sucessfully by api view." % name) for i in range(2): volumelistview = server.webapiurlbody("get", "volume") volumeview = json.loads(volumelistview["text"]) for volume1 in volumeview: if volume1["status"]=="Exported": tolog("Verifying volume unexport") urlpara=volumeid+"/unexport" server.webapiurlbody("post","volume",urlparameter=urlpara) #unexportres = json.loads(unexportres["text"]) volumelistview = server.webapiurlbody("get", "volume") volumeview = json.loads(volumelistview["text"]) for volume2 in volumeview: # print volume1 if volume2["name"] == volume["name"] and volume2["status"]=="Un-Exported": tolog("Verifying volume unexport successfully.") else: tolog("Verifying volume unexport failed.") Failflag=True elif volume1["status"]=="Un-Exported": tolog("Verifying volume export") urlpara = volumeid + "/export" server.webapiurlbody("post", "volume", urlparameter=urlpara) volumelistview = server.webapiurlbody("get", "volume") volumeview = json.loads(volumelistview["text"]) for volume2 in volumeview: if volume2["name"] == volume["name"] and volume2["status"] == "Exported": tolog("Verifying volume export successfully.") else: tolog("Verifying volume export failed.") Failflag = True newname = {"name": random_key(20)} tolog("Verifying modify the volume name from %s to %s by api view." %(name,newname["name"])) urlpara =volumeid server.webapiurlbody("put", "volume", urlparameter=urlpara,body=newname) # To be added 2017-5-15 urlpara = volumeid volumerenameres = server.webapiurlbody("get", "volume", urlparameter=urlpara) volumerenameres = json.loads(volumerenameres["text"]) if volumerenameres[0]["name"] != newname: Failflag = True tolog("Volume rename failed by api") else: tolog("Volume rename successfully by api") tolog("Verifying volume delete.") urlparameter = volumeid + "?force=1" volumedeleteres = server.webapiurlbody("delete", "volume", urlparameter=urlparameter) if volumedeleteres["text"] != "": Failflag = True tolog("volume delete failed by api delete.") else: tolog("volume delete sucessfully by api delete.") return Failflag
def PoolCreateListExtendModifyDelete(): Failflag = False name = random_key(10) availpdlist = getavailpd() pdnum = len(availpdlist) stripe = random.choice(["64kb", "128kb", "256kb", "512kb", "1mb"]) sector = random.choice(["512b", "1kb", "2kb", "4kb"]) raidlevel="" force_sync = random.choice([0, 1]) stripemap = {"64kb": "64 KB", "128kb": "128 KB", "256kb": "256 KB", "512kb": "512 KB", "1mb": "1 MB"} force_syncmap = {0: "Disabled", 1: "Enabled"} #raidmap = {"RAID0": 0,"RAID1": 1, "RAID5": 5, "RAID6": 6} # new raidlevel will be added soon # 2017 -5 -15 # 2017-6-2 raidmap = {"RAID0": 0, "RAID1": 1, "RAID5": 5, "RAID6": 6,"RAID10": 10, "RAID50": 50, "RAID60": 60} if pdnum >= 1: if len(availpdlist)==1: raidlevel="RAID0" if len(availpdlist) == 2: raidlevel = "RAID1" elif len(availpdlist) == 3: raidlevel = "RAID5" elif len(availpdlist) >= 4: raidlevel = random.choice(["RAID5", "RAID6"]) elif len(availpdlist) >= 6: raidlevel = "RAID50" elif len(availpdlist) >= 8: raidlevel = random.choice(["RAID50", "RAID60"]) pds = random.choice(availpdlist) parameters = { "name": name, "pds": availpdlist, "raid_level": raidlevel, "ctrl_id": 1, "stripe": stripe, "sector": sector, "force_sync": force_sync} poolcreateres = server.webapiurlbody("post", "pool", body=parameters) if poolcreateres["text"] != "": tolog("Creating pool %s with pds %s, raidlevel %s, stripe %s, sector %s, force_sync %s failed" % ( name, str(availpdlist), raidlevel, stripe, sector, force_sync)) Failflag = True else: tolog("Creating pool %s with pds %s, raidlevel %s, stripe %s, sector %s, force_sync %s sucessfully" % ( name, str(availpdlist), raidlevel, stripe, sector, force_sync)) poollistview = server.webapiurlbody("get", "pool") # server.webapiurl("delete", "pool", "0?force=0") poolview = json.loads(poollistview["text"]) poolid = "" for pool in poolview: if pool["name"] == name: poolid = str(pool["id"]) Failflag=CI_VolumeCreateListExtendModifyDelete(pool["id"]) if pool["sector"] != sectormap[sector] or pool["stripe"] != stripemap[stripe] or pool["raid_level"] != \ raidmap[raidlevel] or pool["force_sync"] != force_syncmap[force_sync]: tolog("Verifying the created pool %s failed" % name) Failflag = True else: tolog("Verifying the created pool %s sucessfully by api view." % name) # June 23,2017, remove the transfer pool feature # tolog("Verifying transfer the pool %s to different controller by api view.." % name) # transferpara =poolid+ "/transfer" # pooltransferres = server.webapiurlbody("put", "pool", urlparameter=transferpara) # if pooltransferres["text"] != "": # Failflag = True # tolog("Pool Transfer failed by api transfer") # else: # tolog("Pool Transfer successfully by api transfer") newname = {"name":random_key(20)} renameurl = poolid + "/rename" server.webapiurlbody("put", "pool", urlparameter=renameurl,body=newname) poolrenameres = server.webapiurlbody("get", "pool") poolrenameres=json.loads(poolrenameres["text"]) #print poolrenameres,poolrenameres["name"] if poolrenameres[0]["name"]!= newname["name"]: Failflag = True tolog("Pool rename failed by api rename") else: tolog("Pool rename successfully by api rename") urlparameter = poolid + "?force=1" pooldeleteres = server.webapiurlbody("delete", "pool", urlparameter=urlparameter) if pooldeleteres["text"] != "": Failflag = True tolog("Pool delete failed by api delete.") else: tolog("Pool delete sucessfully by api delete.") tolog("Verifying extend the pool %s." % name) # 2017-5-12 # need create a pool with less disk # extend to more disks # verify the pds in the pool before and after the extend operation else: tolog("You should have at least one disk to create a pool") if Failflag: tolog(Fail) else: tolog(Pass)