~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/http_server.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-06-05 03:02:10 UTC
  • mfrom: (3472.1.1 ianc-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20080605030210-xwokghqkg4sqo1xy
Isolate the test HTTPServer from chdir calls (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
58
58
 
59
59
    def setup(self):
60
60
        SimpleHTTPServer.SimpleHTTPRequestHandler.setup(self)
 
61
        self._cwd = self.server._home_dir
61
62
        tcs = self.server.test_case_server
62
63
        if tcs.protocol_version is not None:
63
64
            # If the test server forced a protocol version, use it
284
285
        return self._translate_path(path)
285
286
 
286
287
    def _translate_path(self, path):
287
 
        return SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(
288
 
            self, path)
289
 
 
290
 
    if sys.platform == 'win32':
291
 
        # On win32 you cannot access non-ascii filenames without
292
 
        # decoding them into unicode first.
293
 
        # However, under Linux, you can access bytestream paths
294
 
        # without any problems. If this function was always active
295
 
        # it would probably break tests when LANG=C was set
296
 
        def _translate_path(self, path):
297
 
            """Translate a /-separated PATH to the local filename syntax.
298
 
 
299
 
            For bzr, all url paths are considered to be utf8 paths.
300
 
            On Linux, you can access these paths directly over the bytestream
301
 
            request, but on win32, you must decode them, and access them
302
 
            as Unicode files.
303
 
            """
304
 
            # abandon query parameters
305
 
            path = urlparse.urlparse(path)[2]
306
 
            path = posixpath.normpath(urllib.unquote(path))
307
 
            path = path.decode('utf-8')
308
 
            words = path.split('/')
309
 
            words = filter(None, words)
310
 
            path = os.getcwdu()
311
 
            for word in words:
 
288
        """Translate a /-separated PATH to the local filename syntax.
 
289
 
 
290
        Note that we're translating http URLs here, not file URLs.
 
291
        The URL root location is the server's startup directory.
 
292
        Components that mean special things to the local file system
 
293
        (e.g. drive or directory names) are ignored.  (XXX They should
 
294
        probably be diagnosed.)
 
295
 
 
296
        Override from python standard library to stop it calling os.getcwd()
 
297
        """
 
298
        # abandon query parameters
 
299
        path = urlparse.urlparse(path)[2]
 
300
        path = posixpath.normpath(urllib.unquote(path))
 
301
        path = path.decode('utf-8')
 
302
        words = path.split('/')
 
303
        words = filter(None, words)
 
304
        path = self._cwd
 
305
        for num, word in enumerate(words):
 
306
            if num == 0:
312
307
                drive, word = os.path.splitdrive(word)
313
 
                head, word = os.path.split(word)
314
 
                if word in (os.curdir, os.pardir): continue
315
 
                path = os.path.join(path, word)
316
 
            return path
 
308
            head, word = os.path.split(word)
 
309
            if word in (os.curdir, os.pardir): continue
 
310
            path = os.path.join(path, word)
 
311
        return path
317
312
 
318
313
 
319
314
class TestingHTTPServerMixin:
324
319
        # server), allowing dynamic behaviors to be defined from
325
320
        # the tests cases.
326
321
        self.test_case_server = test_case_server
 
322
        self._home_dir = test_case_server._home_dir
327
323
 
328
324
    def tearDown(self):
329
325
         """Called to clean-up the server.
355
351
         # Let the server properly close the socket
356
352
         self.server_close()
357
353
 
 
354
 
358
355
class TestingHTTPServer(SocketServer.TCPServer, TestingHTTPServerMixin):
359
356
 
360
357
    def __init__(self, server_address, request_handler_class,