diff --git a/tools/testClient/asyncJobMgr.py b/tools/testClient/asyncJobMgr.py index 8800b17a124..297ae1d0a7d 100644 --- a/tools/testClient/asyncJobMgr.py +++ b/tools/testClient/asyncJobMgr.py @@ -20,21 +20,25 @@ class jobStatus(object): self.jobId = None self.responsecls = None class workThread(threading.Thread): - def __init__(self, in_queue, outqueue, apiClient, db=None): + def __init__(self, in_queue, outqueue, apiClient, db=None, lock=None): threading.Thread.__init__(self) self.inqueue = in_queue self.output = outqueue - self.connection = copy.copy(apiClient.connection) + self.connection = apiClient.connection self.db = None + self.lock = lock def queryAsynJob(self, job): if job.jobId is None: return job try: + self.lock.acquire() result = self.connection.pollAsyncJob(job.jobId, job.responsecls).jobresult except cloudstackException.cloudstackAPIException, e: result = str(e) + finally: + self.lock.release() job.result = result return job @@ -45,8 +49,11 @@ class workThread(threading.Thread): jobstatus = jobStatus() jobId = None try: - if not cmd.isAsync: + self.lock.acquire() + + if cmd.isAsync == "false": jobstatus.startTime = time.time() + result = self.connection.make_request(cmd) jobstatus.result = result jobstatus.endTime = time.time() @@ -69,6 +76,9 @@ class workThread(threading.Thread): except: jobstatus.status = False jobstatus.result = sys.exc_info() + finally: + self.lock.release() + return jobstatus def run(self): @@ -146,11 +156,11 @@ class asyncJobMgr(object): def waitForComplete(self, workers=10): self.inqueue.join() - + lock = threading.Lock() resultQueue = Queue.Queue() '''intermediate result is stored in self.outqueue''' for i in range(workers): - worker = workThread(self.outqueue, resultQueue, self.apiClient, self.db) + worker = workThread(self.outqueue, resultQueue, self.apiClient, self.db, lock) worker.start() self.outqueue.join() @@ -166,9 +176,9 @@ class asyncJobMgr(object): '''put commands into a queue at first, then start workers numbers threads to execute this commands''' def submitCmdsAndWait(self, cmds, workers=10): self.submitCmds(cmds) - + lock = threading.Lock() for i in range(workers): - worker = workThread(self.inqueue, self.outqueue, self.apiClient, self.db) + worker = workThread(self.inqueue, self.outqueue, self.apiClient, self.db, lock) worker.start() return self.waitForComplete(workers) diff --git a/tools/testClient/cloudstackConnection.py b/tools/testClient/cloudstackConnection.py index fa42c5bc7ba..3d341418665 100644 --- a/tools/testClient/cloudstackConnection.py +++ b/tools/testClient/cloudstackConnection.py @@ -114,7 +114,7 @@ class cloudConnection(object): i = i + 1 if self.logging is not None: - self.logging.debug("sending command: " + str(requests)) + self.logging.debug("sending command: %s %s"%(commandName, str(requests))) result = None if self.auth: result = self.make_request_with_auth(commandName, requests) diff --git a/tools/testClient/testcase/test_1.py b/tools/testClient/testcase/test_1.py index bba55febc2e..c31c8569e17 100644 --- a/tools/testClient/testcase/test_1.py +++ b/tools/testClient/testcase/test_1.py @@ -1,7 +1,7 @@ from cloudstackTestCase import * class TestCase1(cloudstackTestCase): - + @unittest.skip("demonstrating skipping") def test_cloudstackapi(self): apiClient = self.testClient.getApiClient() listtmcmd = listTemplates.listTemplatesCmd() diff --git a/tools/testClient/testcase/test_2.py b/tools/testClient/testcase/test_2.py index f9937b83e72..ec11e22d8cb 100644 --- a/tools/testClient/testcase/test_2.py +++ b/tools/testClient/testcase/test_2.py @@ -7,5 +7,18 @@ class TestCase2(cloudstackTestCase): listtmcmd.id = 10 listtmcmd.zoneid = 1 listtmcmd.templatefilter = "featured" - listtmresponse = apiClient.listTemplates(listtmcmd) - self.debug(listtmresponse[0].isready) + #listtmresponse = apiClient.listTemplates(listtmcmd) + #self.debug(listtmresponse[0].isready) + + listhostcmd=listHosts.listHostsCmd() + listhostcmd.zoneid=1 + listhostcmd.type="Routing" + + asyncJobResult=self.testClient.submitCmdsAndWait([listhostcmd],1) + listVMresponse = asyncJobResult[0].result + self.debug("Total Number of Hosts: " + str(len(listVMresponse))) + + ''' + for i in listhostresponse: + self.debug("id: " + i.id +" pod id: " + i.podid +" host tag: " + i.hosttags) + ''' \ No newline at end of file diff --git a/tools/testClient/testcase/test_3.py b/tools/testClient/testcase/test_3.py index 6b4b9379033..699ad3d6236 100644 --- a/tools/testClient/testcase/test_3.py +++ b/tools/testClient/testcase/test_3.py @@ -25,7 +25,8 @@ class TestCase1(cloudstackTestCase): self.templateId = tmpl.id self.zoneId = tmpl.zoneid break - + + @unittest.skip("demonstrating skipping") def test_cloudstackapi(self): apiClient = self.testClient.getApiClient() @@ -73,7 +74,7 @@ class TestCase1(cloudstackTestCase): createvm.zoneid = self.zoneId vmcmds.append(createvm) - result = self.testClient.submitCmdsAndWait(vmcmds) + result = self.testClient.submitCmdsAndWait(vmcmds, 5) for jobstatus in result: if jobstatus.status == 1: self.debug(jobstatus.result.id)