Merge Dave's fixes for the compatibility tests and web.
[jelmer/dulwich-libgit2.git] / dulwich / tests / compat / test_server.py
1 # test_server.py -- Compatibilty tests for git server.
2 # Copyright (C) 2010 Google, Inc.
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; version 2
7 # of the License or (at your option) any later version of
8 # the License.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 # MA  02110-1301, USA.
19
20 """Compatibilty tests between Dulwich and the cgit server.
21
22 Warning: these tests should be fairly stable, but when writing/debugging new
23 tests, deadlocks may freeze the test process such that it cannot be Ctrl-C'ed.
24 On *nix, you can kill the tests with Ctrl-Z, "kill %".
25 """
26
27 import threading
28
29 from dulwich.server import (
30     DictBackend,
31     TCPGitServer,
32     )
33 from server_utils import (
34     ServerTests,
35     ShutdownServerMixIn,
36     )
37 from utils import (
38     CompatTestCase,
39     SkipTest,
40     )
41
42
43 if not getattr(TCPGitServer, 'shutdown', None):
44     _TCPGitServer = TCPGitServer
45
46     class TCPGitServer(ShutdownServerMixIn, TCPGitServer):
47         """Subclass of TCPGitServer that can be shut down."""
48
49         def __init__(self, *args, **kwargs):
50             # BaseServer is old-style so we have to call both __init__s
51             ShutdownServerMixIn.__init__(self)
52             _TCPGitServer.__init__(self, *args, **kwargs)
53
54         serve = ShutdownServerMixIn.serve_forever
55
56
57 class GitServerTestCase(ServerTests, CompatTestCase):
58     """Tests for client/server compatibility."""
59
60     protocol = 'git'
61
62     def setUp(self):
63         ServerTests.setUp(self)
64         CompatTestCase.setUp(self)
65
66     def tearDown(self):
67         ServerTests.tearDown(self)
68         CompatTestCase.tearDown(self)
69
70     def _start_server(self, repo):
71         backend = DictBackend({'/': repo})
72         dul_server = TCPGitServer(backend, 'localhost', 0)
73         threading.Thread(target=dul_server.serve).start()
74         self._server = dul_server
75         _, port = self._server.socket.getsockname()
76         return port
77
78     def test_push_to_dulwich(self):
79         raise SkipTest('Skipping push test due to known deadlock bug.')