Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: tests/url_open_timeout_test.py

Issue 23657003: Move url_open with dependencies to utils.net module. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/swarm_client
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import BaseHTTPServer 6 import BaseHTTPServer
7 import logging 7 import logging
8 import os 8 import os
9 import re 9 import re
10 import SocketServer 10 import SocketServer
11 import sys 11 import sys
12 import threading 12 import threading
13 import time 13 import time
14 import unittest 14 import unittest
15 15
16 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 16 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17 sys.path.insert(0, ROOT_DIR) 17 sys.path.insert(0, ROOT_DIR)
18 18
19 import run_isolated 19 from utils import net
20 20
21 21
22 class SleepingServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer): 22 class SleepingServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
23 """Multithreaded server that serves requests that block at various stages.""" 23 """Multithreaded server that serves requests that block at various stages."""
24 24
25 def __init__(self): 25 def __init__(self):
26 BaseHTTPServer.HTTPServer.__init__(self, ('127.0.0.1', 0), SleepingHandler) 26 BaseHTTPServer.HTTPServer.__init__(self, ('127.0.0.1', 0), SleepingHandler)
27 self.dying = False 27 self.dying = False
28 self.dying_cv = threading.Condition() 28 self.dying_cv = threading.Condition()
29 self.serving_thread = None 29 self.serving_thread = None
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 self.server.start() 115 self.server.start()
116 116
117 def tearDown(self): 117 def tearDown(self):
118 self.server.stop() 118 self.server.stop()
119 self.server = None 119 self.server = None
120 super(UrlOpenTimeoutTest, self).tearDown() 120 super(UrlOpenTimeoutTest, self).tearDown()
121 121
122 def call(self, mode, sleep_duration, **kwargs): 122 def call(self, mode, sleep_duration, **kwargs):
123 url = self.server.url + '/%s/%f' % (mode, sleep_duration) 123 url = self.server.url + '/%s/%f' % (mode, sleep_duration)
124 kwargs['max_attempts'] = 2 124 kwargs['max_attempts'] = 2
125 return run_isolated.url_open(url, **kwargs) 125 return net.url_open(url, **kwargs)
126 126
127 def test_urlopen_success(self): 127 def test_urlopen_success(self):
128 # Server doesn't block. 128 # Server doesn't block.
129 for mode in SleepingHandler.modes: 129 for mode in SleepingHandler.modes:
130 self.assertEqual(self.call(mode, 0, read_timeout=0.1).read(), 130 self.assertEqual(self.call(mode, 0, read_timeout=0.1).read(),
131 SleepingHandler.full_response) 131 SleepingHandler.full_response)
132 # Server does block, but url_open called without read timeout. 132 # Server does block, but url_open called without read timeout.
133 for mode in SleepingHandler.modes: 133 for mode in SleepingHandler.modes:
134 self.assertEqual(self.call(mode, 0.25, read_timeout=None).read(), 134 self.assertEqual(self.call(mode, 0.25, read_timeout=None).read(),
135 SleepingHandler.full_response) 135 SleepingHandler.full_response)
136 136
137 def test_urlopen_retry(self): 137 def test_urlopen_retry(self):
138 # This should trigger retry logic and eventually return None. 138 # This should trigger retry logic and eventually return None.
139 prev_sleep_before_retry = run_isolated.HttpService.sleep_before_retry 139 prev_sleep_before_retry = net.HttpService.sleep_before_retry
140 try: 140 try:
141 run_isolated.HttpService.sleep_before_retry = lambda *_args: None 141 net.HttpService.sleep_before_retry = lambda *_args: None
142 stream = self.call('sleep_before_response', 0.25, read_timeout=0.1) 142 stream = self.call('sleep_before_response', 0.25, read_timeout=0.1)
143 finally: 143 finally:
144 run_isolated.HttpService.sleep_before_retry = prev_sleep_before_retry 144 net.HttpService.sleep_before_retry = prev_sleep_before_retry
145 self.assertIsNone(stream) 145 self.assertIsNone(stream)
146 146
147 def test_urlopen_keeping_connection(self): 147 def test_urlopen_keeping_connection(self):
148 # Sleeping after request is sent -> it's just connection keep alive. 148 # Sleeping after request is sent -> it's just connection keep alive.
149 stream = self.call('sleep_after_response', 0.25, read_timeout=0.1) 149 stream = self.call('sleep_after_response', 0.25, read_timeout=0.1)
150 self.assertEqual(stream.read(), SleepingHandler.full_response) 150 self.assertEqual(stream.read(), SleepingHandler.full_response)
151 151
152 def test_urlopen_timeouts(self): 152 def test_urlopen_timeouts(self):
153 # Timeouts while reading from the stream. 153 # Timeouts while reading from the stream.
154 for mode in ('sleep_after_headers', 'sleep_during_response'): 154 for mode in ('sleep_after_headers', 'sleep_during_response'):
155 stream = self.call(mode, 0.25, read_timeout=0.1) 155 stream = self.call(mode, 0.25, read_timeout=0.1)
156 self.assertTrue(stream) 156 self.assertTrue(stream)
157 with self.assertRaises(run_isolated.TimeoutError): 157 with self.assertRaises(net.TimeoutError):
158 stream.read() 158 stream.read()
159 159
160 160
161 if __name__ == '__main__': 161 if __name__ == '__main__':
162 VERBOSE = '-v' in sys.argv 162 VERBOSE = '-v' in sys.argv
163 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) 163 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
164 unittest.main() 164 unittest.main()
OLDNEW
« swarming.py ('K') | « tests/swarming_test.py ('k') | utils/net.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698