Monotone-Parent: 324942a2c0fd9c03a2cb05306ce19230f91a9534
Monotone-Revision: 4520bccbe080f6685e84dc4ecd3ae2c5d9741940 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-07-14T23:16:38 Monotone-Branch: ca.inverse.sogomaint-2.0.2
parent
68ff066d2f
commit
780be72bbf
|
@ -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()
|
Loading…
Reference in New Issue