sogo/Tests/Stress/webdavsync.py

81 lines
2.3 KiB
Python
Executable File

#!/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()