81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
|
#!/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()
|