Mercurial > hgsubversion
view tests/comprehensive/test_verify.py @ 872:a279b5838aaf
test_util: remove self.repo_path, generate new paths each time
This solves a problem with startrev tests sporadically failing in ra.get_log()
with some kind of svn corruption error. Loading each svn repository in a
different place solved that, or at least prevented me from reproducing it. What
is interesting is this is the same fixture being loaded each time. Also, before
loading the fixture, we take care of removing an existing repository. Loading
with the same options twice also failed reproducing the issue. Same thing if
the first load only load the svn repository but does not convert it.
So, I have absolutely no idea what was wrong, blame python subprocess,
subversion or some kind of filesystem write ordering bug.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Thu, 19 Apr 2012 18:29:32 +0200 |
parents | 312b37bc5e20 |
children |
line wrap: on
line source
import os import pickle import sys import unittest # wrapped in a try/except because of weirdness in how # run.py works as compared to nose. try: import test_util except ImportError: sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) import test_util from mercurial import hg from mercurial import ui from hgsubversion import svncommands def _do_case(self, name, stupid, layout): subdir = test_util.subdir.get(name, '') repo = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, layout=layout) assert len(self.repo) > 0 for i in repo: ctx = repo[i] self.assertEqual(svncommands.verify(repo.ui, repo, rev=ctx.node()), 0) def buildmethod(case, name, stupid, layout): m = lambda self: self._do_case(case, stupid, layout) m.__name__ = name bits = case, stupid and 'stupid' or 'real', layout m.__doc__ = 'Test verify on %s with %s replay. (%s)' % bits return m attrs = {'_do_case': _do_case} fixtures = [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')] for case in fixtures: # this fixture results in an empty repository, don't use it if case == 'project_root_not_repo_root.svndump': continue bname = 'test_' + case[:-len('.svndump')] attrs[bname] = buildmethod(case, bname, False, 'standard') name = bname + '_stupid' attrs[name] = buildmethod(case, name, True, 'standard') name = bname + '_single' attrs[name] = buildmethod(case, name, False, 'single') # Disabled because the "stupid and real are the same" tests # verify this plus even more. # name = bname + '_single_stupid' # attrs[name] = buildmethod(case, name, True, 'single') VerifyTests = type('VerifyTests', (test_util.TestBase,), attrs) def suite(): all_tests = [unittest.TestLoader().loadTestsFromTestCase(VerifyTests)] return unittest.TestSuite(all_tests)