summaryrefslogtreecommitdiff
path: root/test/test_keepalive.py
diff options
context:
space:
mode:
authormstenner <mstenner>2004-03-21 02:41:40 +0000
committermstenner <mstenner>2004-03-21 02:41:40 +0000
commitcd378d4c2ebb7c6f8b13694b8eb46e583f3edec8 (patch)
tree042e8cbbb953400e64c86b3535232a6e564906d9 /test/test_keepalive.py
parent17552c473cd4e1f971545f799bc5ec8f7c0b317c (diff)
downloadurlgrabber-cd378d4c2ebb7c6f8b13694b8eb46e583f3edec8.tar.gz
added a simple threading test
Diffstat (limited to 'test/test_keepalive.py')
-rw-r--r--test/test_keepalive.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/test/test_keepalive.py b/test/test_keepalive.py
index 2b4c20e..74dd50f 100644
--- a/test/test_keepalive.py
+++ b/test/test_keepalive.py
@@ -22,6 +22,8 @@ import sys
import os
import time
import urllib2
+import threading
+import re
from urllib2 import URLError
@@ -170,8 +172,58 @@ class DroppedConnectionTests(TestCase):
'STATUS: 200, OK'
]
self.assert_(data1 == data2)
- self.assert_(self.snarfed_logs == reference_logs)
+ l = [ re.sub(r'\s+\(\d+\)$', r'', line) for line in self.snarfed_logs ]
+ self.assert_(l == reference_logs)
+class ThreadingTests(TestCase):
+ def setUp(self):
+ self.kh = keepalive.HTTPHandler()
+ self.opener = urllib2.build_opener(self.kh)
+ self.snarfed_logs = []
+ self.dbp = keepalive.DBPRINT
+ keepalive.DBPRINT = self.logsnarf
+ keepalive.DEBUG = 1
+
+ def tearDown(self):
+ self.kh.close_all()
+ keepalive.DBPRINT = self.dbp
+ keepalive.DEBUG = 0
+
+ def logsnarf(self, message):
+ self.snarfed_logs.append(message)
+
+ def test_basic_threading(self):
+ "use 3 threads, each getting a file 4 times"
+ numthreads = 3
+ cond = threading.Condition()
+ self.threads = []
+ for i in range(numthreads):
+ t = Fetcher(self.opener, ref_http, 4)
+ t.start()
+ self.threads.append(t)
+ for t in self.threads: t.join()
+ l = [ re.sub(r'\s+\(\d+\)$', r'', line) for line in self.snarfed_logs ]
+ l.sort()
+ creating = ['creating new connection to www.linux.duke.edu'] * 3
+ status = ['STATUS: 200, OK'] * 12
+ reuse = ['re-using connection to www.linux.duke.edu'] * 9
+ reference_logs = creating + status + reuse
+ reference_logs.sort()
+ self.assert_(l == reference_logs)
+
+class Fetcher(threading.Thread):
+ def __init__(self, opener, url, num):
+ threading.Thread.__init__(self)
+ self.opener = opener
+ self.url = url
+ self.num = num
+
+ def run(self):
+ for i in range(self.num):
+ fo = self.opener.open(self.url)
+ data = fo.read()
+ fo.close()
+
def suite():
tl = TestLoader()
return tl.loadTestsFromModule(sys.modules[__name__])