diff options
author | Daniel Rose <dr695h@att.com> | 2017-05-30 20:19:02 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2017-05-30 20:19:02 +0000 |
commit | 301ac2d31a1e583d2ce594af335a00c7fd83759a (patch) | |
tree | a023ed4d0fceff64cc9a9db58de1fbdf33ad1036 /loadtest/TestController.py | |
parent | 96e3d06bc97c9f357e5a74e3bee2cb6f509fadee (diff) | |
parent | b88fc2d930537a47b12115a899322fb9cebbc0c1 (diff) |
Merge "TEST-2 load/soak test utility"
Diffstat (limited to 'loadtest/TestController.py')
-rw-r--r-- | loadtest/TestController.py | 80 |
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 |