diff --git a/Tests/Integration/test-put.py b/Tests/Stress/put.py similarity index 100% rename from Tests/Integration/test-put.py rename to Tests/Stress/put.py diff --git a/Tests/Stress/webdavsync.py b/Tests/Stress/webdavsync.py new file mode 100755 index 000000000..0939e7457 --- /dev/null +++ b/Tests/Stress/webdavsync.py @@ -0,0 +1,80 @@ +#!/usr/bin/python + +from config import hostname, port + +import webdavlib +import random +import time +import threading + +base=1127 +userscount=100 +password="" +batchcount=10 +sleeptime=3 +durationHeader="sogorequestduration" +#durationHeader="sogo-request-duration" + +class StressIteration(threading.Thread): + def __init__(self, username): + threading.Thread.__init__(self) + self.username = username + self.time = 0.0 + self.sogoTime = 0.0 + + def run(self): + client = webdavlib.WebDAVClient(hostname, port, + self.username, password) + resource = "/SOGo/dav/%s/Calendar/personal/" % self.username + startTime = time.time() + query = webdavlib.WebDAVSyncQuery(resource, None, + [ "getetag", "calendar-data" ]) + client.execute(query) + if query.response["status"] != 207: + print "*** received unexpected code: %d (%s)" \ + % (query.response["status"], resource) + endTime = time.time() + headers = query.response["headers"] + if headers.has_key(durationHeader): + self.sogoTime = float(headers[durationHeader]) + self.time = endTime - startTime + # print "%f, %f" % (self.time, self.sogoTime) + +class StressTest: + def __init__(self): + self.usernames = [ "invite%d" % (base + x) + for x in xrange(userscount) ] + self.random = random.Random() + + def iteration(self): + usernames = self.random.sample(self.usernames, batchcount) + startTime = time.time() + threads = [] + for username in usernames: + iteration = StressIteration(username) + iteration.start() + threads.append(iteration) + + for thread in threads: + thread.join() + + endTime = time.time() + + programTime = endTime - startTime + requestsTime = 0.0 + sogoTime = 0.0 + for thread in threads: + requestsTime = requestsTime + thread.time + sogoTime = sogoTime + thread.sogoTime + + print "Iteration time: %f, Total Requests Time: %f, Total SOGo Time: %f" \ + % (programTime, requestsTime, sogoTime) + + def start(self): + while True: + self.iteration() + time.sleep(sleeptime) + +if __name__ == "__main__": + test = StressTest() + test.start()