summaryrefslogtreecommitdiffstats
path: root/loadtest/TestController.py
diff options
context:
space:
mode:
Diffstat (limited to 'loadtest/TestController.py')
-rw-r--r--loadtest/TestController.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/loadtest/TestController.py b/loadtest/TestController.py
new file mode 100644
index 0000000..751b13a
--- /dev/null
+++ b/loadtest/TestController.py
@@ -0,0 +1,80 @@
+'''
+Created on Apr 7, 2017
+
+@author: jf9860
+'''
+import time
+import os
+from loadtest.RunEte import RunEte
+from loadtest.TestConfig import TestConfig
+import logging
+
+class TestController(object):
+ '''
+ classdocs
+ '''
+
+ threads = {}
+ threadid = 0
+ soaksubfolder = 'soak_' + str(os.getpid())
+ test_number = 0
+
+ def __init__(self, options):
+ '''
+ Constructor
+ '''
+ self.config = TestConfig(duration=options.duration)
+ logging.info(self.config.to_string())
+
+ def execute(self):
+ starttime = time.time()
+ endtime = starttime + self.config.duration
+ profileindex = 0
+ currenttime = time.time()
+ logging.info("{}:{}:{}".format(starttime, endtime, currenttime))
+ while currenttime < endtime:
+ if (profileindex >= len(self.config.profile)):
+ profileindex = 0
+ profile = self.config.profile[profileindex]
+ sleeptime = profile[0]
+ currenttime = time.time()
+ if ((currenttime + sleeptime) < endtime):
+ time.sleep(sleeptime)
+ self.schedule(profile)
+ profileindex = profileindex + 1
+ currenttime = time.time()
+ else:
+ currenttime = endtime
+
+ for threadname in self.threads:
+ logging.info("TestController waiting on " + threadname)
+ t = self.threads[threadname]
+ t.join()
+ logging.info("Soak test completed")
+
+ def schedule(self, profile):
+ self.remove_completed_threads()
+ tests = profile[1]
+ for test in tests:
+ self.schedule_one(test)
+
+ def schedule_one(self, test):
+ self.test_number = self.test_number + 1
+ self.threadid = self.threadid + 1
+ threadname = "RunEte_" + str(self.threadid)
+ ''' test for max threads '''
+ t = RunEte(test, self.soaksubfolder, str(self.test_number))
+ t.setName(threadname)
+ t.start()
+ self.threads[threadname] = t
+
+
+ def remove_completed_threads(self):
+ toremove = []
+ for threadname in self.threads:
+ t = self.threads[threadname]
+ if (t.isAlive() == False):
+ toremove.append(threadname)
+ for threadname in toremove:
+ logging.info("Removing " + threadname)
+ del(self.threads[threadname]) \ No newline at end of file