📄 basic_tests.py
字号:
# The bug was that
#
# $ svn log file:///nonexistent_path
#
# would go into an infinite loop, instead of failing immediately as
# it should. The loop was because svn_ra_local__split_URL() used
# svn_path_split() to lop off components and look for a repository
# in each shorter path in turn, depending on svn_path_is_empty()
# to test if it had reached the end. Somewhere along the line we
# changed the path functions (perhaps revision 3113?), and
# svn_path_split() stopped cooperating with svn_path_is_empty() in
# this particular context -- svn_path_split() would reach "/",
# svn_path_is_empty() would correctly claim that "/" is not empty,
# the next svn_path_split() would return "/" again, and so on,
# forever.
#
# This bug was fixed in revision 3150, by checking for "/"
# explicitly in svn_ra_local__split_URL(). By the time you read
# this, that may or may not be the settled fix, however, so check
# the logs to see if anything happened later.
#
# Anyway: this test _always_ operates on a file:/// path. Note that
# if someone runs this test on a system with "/nonexistent_path" in
# the root directory, the test could fail, and that's just too bad :-).
output, errput = svntest.actions.run_and_verify_svn(
None, None, SVNAnyOutput,
'log', 'file:///nonexistent_path')
for line in errput:
if re.match(".*Unable to open an ra_local session to URL.*", line):
return
# Else never matched the expected error output, so the test failed.
raise svntest.main.SVNUnmatchedError
#----------------------------------------------------------------------
# Issue 1064. This test is only useful if running over ra_dav
# with authentication enabled, otherwise it will pass trivially.
def basic_auth_cache(sbox):
"basic auth caching"
sbox.build()
wc_dir = sbox.wc_dir
repo_dir = sbox.repo_dir
repo_url = sbox.repo_url
# Create a working copy without auth tokens
svntest.main.safe_rmtree(wc_dir)
svntest.actions.run_and_verify_svn(None, None, [],
'checkout',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'--no-auth-cache',
repo_url, wc_dir)
# Failed with "not locked" error on missing directory
svntest.main.safe_rmtree(os.path.join(wc_dir, 'A', 'B', 'E'))
svntest.actions.run_and_verify_svn(None, None, [],
'status', '-u',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
os.path.join(wc_dir, 'A', 'B'))
# Failed with "already locked" error on new dir
svntest.actions.run_and_verify_svn(None, None, [],
'copy',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
repo_url + '/A/B/E',
os.path.join(wc_dir, 'A', 'D', 'G'))
#----------------------------------------------------------------------
def basic_add_ignores(sbox):
'ignored files in added dirs should not be added'
# The bug was that
#
# $ svn add dir
#
# where dir contains some items that match the ignore list and some
# do not would add all items, ignored or not.
#
# This has been fixed, by testing each item with the new
# svn_wc_is_ignored function.
sbox.build()
wc_dir = sbox.wc_dir
dir_path = os.path.join(wc_dir, 'dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
foo_o_path = os.path.join(dir_path, 'foo.o')
os.mkdir(dir_path, 0755)
open(foo_c_path, 'w')
open(foo_o_path, 'w')
output, err = svntest.actions.run_and_verify_svn(
"No output where some expected", SVNAnyOutput, None,
'add', dir_path)
for line in output:
# If we see foo.o in the add output, fail the test.
if re.match(r'^A\s+.*foo.o$', line):
raise svntest.actions.SVNUnexpectedOutput
# Else never matched the unwanted output, so the test passed.
#----------------------------------------------------------------------
def basic_import_ignores(sbox):
'do not import ignored files in imported dirs'
# The bug was that
#
# $ svn import dir
#
# where dir contains some items that match the ignore list and some
# do not would add all items, ignored or not.
#
# This has been fixed by testing each item with the new
# svn_wc_is_ignored function.
sbox.build()
wc_dir = sbox.wc_dir
dir_path = os.path.join(wc_dir, 'dir')
foo_c_path = os.path.join(dir_path, 'foo.c')
foo_o_path = os.path.join(dir_path, 'foo.o')
os.mkdir(dir_path, 0755)
open(foo_c_path, 'w')
open(foo_o_path, 'w')
# import new dir into repository
url = svntest.main.current_repo_url + '/dir'
output, errput = svntest.actions.run_and_verify_svn(
None, None, [], 'import',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', 'Log message for new import',
dir_path, url)
lastline = string.strip(output.pop())
cm = re.compile ("(Committed|Imported) revision [0-9]+.")
match = cm.search (lastline)
if not match:
### we should raise a less generic error here. which?
raise svntest.actions.SVNUnexpectedOutput
# remove (uncontrolled) local dir
svntest.main.safe_rmtree(dir_path)
# Create expected disk tree for the update (disregarding props)
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'dir/foo.c' : Item(''),
})
# Create expected status tree for the update (disregarding props).
# Newly imported file should be at revision 2.
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'dir' : Item(status=' ', wc_rev=2, repos_rev=2),
'dir/foo.c' : Item(status=' ', wc_rev=2, repos_rev=2),
})
# Create expected output tree for the update.
expected_output = svntest.wc.State(wc_dir, {
'dir' : Item(status='A '),
'dir/foo.c' : Item(status='A '),
})
# do update and check three ways
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None,
None, None, 1)
#----------------------------------------------------------------------
def uri_syntax(sbox):
'make sure URI syntaxes are parsed correctly'
sbox.build()
wc_dir = sbox.wc_dir
# Revision 6638 made 'svn co http://host' seg fault, this tests the fix.
svntest.main.safe_rmtree(wc_dir)
url = svntest.main.current_repo_url
schema = url[:string.find(url, ":")]
url = schema + "://some_nonexistent_host_with_no_trailing_slash"
svntest.actions.run_and_verify_svn("No error where one expected",
None, SVNAnyOutput,
'co', url, wc_dir)
# Different RA layers give different errors for failed checkouts;
# for us, it's only important to know that it _did_ error (as
# opposed to segfaulting), so we don't examine the error text.
#----------------------------------------------------------------------
def basic_checkout_file(sbox):
"trying to check out a file should fail"
sbox.build()
iota_url = svntest.main.current_repo_url + '/iota'
output, errput = svntest.main.run_svn(1, 'co', iota_url)
for line in errput:
if string.find(line, "refers to a file") != -1:
break
else:
raise svntest.Failure
#----------------------------------------------------------------------
def basic_history(sbox):
"verify that 'svn cat' traces renames"
sbox.build()
wc_dir = sbox.wc_dir
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
bloo_path = os.path.join(wc_dir, 'A', 'D', 'G', 'bloo')
# rename rho to bloo. commit r2.
svntest.main.run_svn(None, 'mv', rho_path, bloo_path)
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/rho' : Item(verb='Deleting'),
'A/D/G/bloo' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.remove('A/D/G/rho');
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, repos_rev=2, status=' ') })
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
# rename pi to rho. commit r3.
svntest.main.run_svn(None, 'mv', pi_path, rho_path)
# svn cat -r1 rho --> should show pi's contents.
svntest.actions.run_and_verify_svn (None,
[ "This is the file 'pi'."], None,
'cat', '-r', '1', rho_path)
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/pi' : Item(verb='Deleting'),
'A/D/G/rho' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.tweak(wc_rev=1)
expected_status.remove('A/D/G/pi');
expected_status.tweak('A/D/G/rho', wc_rev=3)
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, repos_rev=3, status=' ') })
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
# update whole wc to HEAD
expected_output = svntest.wc.State(wc_dir, { }) # no output
expected_status.tweak(wc_rev=3)
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/D/G/pi', 'A/D/G/rho')
expected_disk.add({
'A/D/G/rho' : Item("This is the file 'pi'."),
})
expected_disk.add({
'A/D/G/bloo' : Item("This is the file 'rho'."),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
# 'svn cat bloo' --> should show rho's contents.
svntest.actions.run_and_verify_svn (None,
[ "This is the file 'rho'."], None,
'cat', bloo_path)
# svn cat -r1 bloo --> should still show rho's contents.
svntest.actions.run_and_verify_svn (None,
[ "This is the file 'rho'."], None,
'cat', '-r', '1', bloo_path)
# svn cat -r1 rho --> should show pi's contents.
svntest.actions.run_and_verify_svn (None,
[ "This is the file 'pi'."], None,
'cat', '-r', '1', rho_path)
# svn up -r1
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=3)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# svn cat -rHEAD rho --> should see 'unrelated object' error.
svntest.actions.run_and_verify_svn ("unrelated object",
None, SVNAnyOutput,
'cat', '-r', 'HEAD', rho_path)
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
basic_checkout,
basic_status,
basic_commit,
basic_update,
basic_mkdir_url,
basic_corruption,
basic_merging_update,
basic_conflict,
basic_cleanup,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -