Index: subversion/tests/cmdline/lock_tests.py =================================================================== --- subversion/tests/cmdline/lock_tests.py (revision 1583942) +++ subversion/tests/cmdline/lock_tests.py (working copy) @@ -2178,6 +2178,48 @@ def non_root_locks(sbox): expected_status.tweak('A/D/G/pi', writelocked=None) svntest.actions.run_and_verify_status(wc_dir, expected_status) +@XFail() +@SkipUnless(svntest.main.is_ra_type_dav) +def dav_lock_refresh(sbox): + "refresh timeout of DAV lock" + + # Around trunk@1581815 refreshing of DAV lock fails with error + # '412 Precondition Failed' + + import httplib + from urlparse import urlparse + import base64 + + sbox.build(create_wc = False) + + # Acquire lock on 'iota' + svntest.main.run_lock_helper(sbox.repo_dir, 'iota', 'jconstant', 3600) + + # Try to refresh lock using 'If' header + loc = urlparse(sbox.repo_url) + + if loc.scheme == 'http': + h = httplib.HTTPConnection(loc.hostname, loc.port) + else: + h = httplib.HTTPSConnection(loc.hostname, loc.port) + + lock_token = svntest.actions.run_and_parse_info(sbox.repo_url + '/iota')[0]['Lock Token'] + + lock_headers = { + 'Authorization': 'Basic ' + base64.b64encode('jconstant:rayjandom'), + 'If': '(<' + lock_token + '>)', + 'Timeout': 'Second-7200' + } + + # Enabling the following line makes this test easier to debug + h.set_debuglevel(9) + + h.request('LOCK', sbox.repo_url + '/iota', '', lock_headers) + + r = h.getresponse() + if r.status != httplib.OK: + raise svntest.Failure('Lock refresh failed: %d %s' % (r.status, r.reason)) + ######################################################################## # Run the tests @@ -2238,6 +2280,7 @@ test_list = [ None, dav_lock_timeout, create_dav_lock_timeout, non_root_locks, + dav_lock_refresh, ] if __name__ == '__main__':