This repository was archived by the owner on Aug 19, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclient.py
86 lines (75 loc) · 3.02 KB
/
client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Copyright (c) 2010 Stanford University
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR(S) DISCLAIM ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL AUTHORS BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
import itertools
import random
import sys
from driver import UDPDriver as Driver
from transport import Transport, Buffer, TEST_ADDRESS
from util import gettime
class Service(object):
def __init__(self, address, session):
self.address = address
self.session = session
class Services(object):
def __init__(self, transport):
self._transport = transport
self._services = {}
def getService(self, address):
if address in self._services:
return self._services[address]
else:
session = self._transport.getClientSession()
service = Service(address, session)
session.connect(service)
self._services[address] = service
return service
def main():
random.seed(0)
d = Driver()
t = Transport(d, isServer=False)
services = Services(t)
s = services.getService(TEST_ADDRESS)
for i in itertools.count(1):
#totalFrags = random.randrange(1, 2**16 - 1)
totalFrags = random.randrange(1, 500)
#totalFrags = 1000
requestBuffer = Buffer(['a' * t.dataPerFragment() for j in range(totalFrags)])
responseBuffer = Buffer()
start = gettime()
r = t.clientSend(s, requestBuffer, responseBuffer)
r.getReply()
elapsedNs = gettime() - start
resp = responseBuffer.getRange(0, responseBuffer.getTotalLength())
req = requestBuffer.getRange(0, requestBuffer.getTotalLength())
assert len(req) == len(resp), (len(req), len(resp), req[:10], resp[:10],
req[-10:], resp[-10:])
assert req == resp, (req, resp)
print
print "Message %d with %d frags OK in %dms" % (i, totalFrags,
elapsedNs / 1000000)
d.stat()
#responseBuffer1 = []
#responseBuffer2 = []
#responseBuffer3 = []
#r1 = t.clientSend(TEST_ADDRESS, sys.argv[1:], responseBuffer1)
#r2 = t.clientSend(TEST_ADDRESS, sys.argv[2:], responseBuffer2)
#r3 = t.clientSend(TEST_ADDRESS, sys.argv[3:], responseBuffer3)
#r3.getReply()
#r1.getReply()
#r2.getReply()
#print ''.join(responseBuffer1)
#print ''.join(responseBuffer2)
#print ''.join(responseBuffer3)
if __name__ == '__main__':
main()