"Philip Martin" <philip.mar...@wandisco.com> writes: > Noorul Islam K M <noo...@collab.net> writes: > >> +def test_lslocks_and_rmlocks(sbox): >> + "test 'svnadmin lslocks' and 'svnadmin rmlocks'" >> + >> + def verify_lslocks_output(expected, actual): >> + """Verify expected output and actual output match.""" >> + if len(expected) != len(actual): >> + raise svntest.verify.SVNUnexpectedStdout( >> + "Expected %d lines, found %d lines" >> + % (len(expected), len(actual))) >> + >> + for index in range(len(actual)): >> + if not re.match(expected[index], actual[index]): >> + raise svntest.verify.SVNUnexpectedStdout( >> + "\nEXPECTED:\n%s\nACTUAL:\n%s" >> + % ('\n'.join(expected), ''.join(actual))) > > Can't we use the verify.py stuff instead?
Philip, As suggested by you, I used UnorderedRegexOutput this time. Please find attached updated patch. Log [[[ New test for 'svnadmin lslocks' and 'svnadmin rmlocks'. * subversion/tests/cmdline/svnadmin_tests.py (test_lslocks_and_rmlocks): New test. (test_list): Run it. Patch by: Noorul Islam K M <noorul{_AT_}collab.net> Suggested by: philipm to use UnorderedRegexOutput ]]]
Index: subversion/tests/cmdline/svnadmin_tests.py =================================================================== --- subversion/tests/cmdline/svnadmin_tests.py (revision 1150581) +++ subversion/tests/cmdline/svnadmin_tests.py (working copy) @@ -26,6 +26,7 @@ # General modules import os +import re import shutil import sys @@ -33,6 +34,7 @@ import svntest from svntest.verify import SVNExpectedStdout, SVNExpectedStderr from svntest.verify import SVNUnexpectedStderr +from svntest.verify import UnorderedOutput from svntest.main import SVN_PROP_MERGEINFO # (abbreviation) @@ -1381,6 +1383,92 @@ 'STDERR', expected_stderr, errput): raise svntest.Failure +def test_lslocks_and_rmlocks(sbox): + "test 'svnadmin lslocks' and 'svnadmin rmlocks'" + + def verify_lslocks_output(expected, actual): + """Verify expected output and actual output match.""" + expected_output = svntest.verify.UnorderedRegexOutput(expected) + svntest.verify.compare_and_display_lines('message', 'label', + expected_output, output) + svntest.verify.verify_exit_code(None, exit_code, 0) + + sbox.build(create_wc=False) + iota_url = sbox.repo_url + '/iota' + lambda_url = sbox.repo_url + '/A/B/lambda' + + exit_code, output, errput = svntest.main.run_svnadmin("lslocks", + sbox.repo_dir) + + if exit_code or errput or output: + print("Error: 'lslocks' failed") + raise svntest.Failure + + expected_output = UnorderedOutput( + ["'A/B/lambda' locked by user 'jrandom'.\n", + "'iota' locked by user 'jrandom'.\n"]) + + # Lock iota and A/B/lambda using svn client + svntest.actions.run_and_verify_svn(None, expected_output, + [], "lock", "-m", "Locking files", + iota_url, lambda_url) + + expected_output = [ + "Path: /A/B/lambda", + "UUID Token: opaquelocktoken", + "Owner: jrandom", + "Created:", + "Expires:", + "Comment \(1 line\):", + "Locking files", + "Path: /iota", + "UUID Token: opaquelocktoken.*", + "\n", # empty line + ] + + # List all locks + exit_code, output, errput = svntest.main.run_svnadmin("lslocks", + sbox.repo_dir) + + if errput: + print("Error: 'lsocks' failed") + raise svntest.Failure + + verify_lslocks_output(expected_output, output) + + # List lock in path /A + exit_code, output, errput = svntest.main.run_svnadmin("lslocks", + sbox.repo_dir, + "A") + if errput: + print("Error: 'lsocks' failed") + raise svntest.Failure + + expected_output = [ + "Path: /A/B/lambda", + "UUID Token: opaquelocktoken", + "Owner: jrandom", + "Created:", + "Expires:", + "Comment \(1 line\):", + "Locking files", + "\n", # empty line + ] + + verify_lslocks_output(expected_output, output) + + # Remove locks + exit_code, output, errput = svntest.main.run_svnadmin("rmlocks", + sbox.repo_dir, + "iota", + "A/B/lambda") + expected_output = UnorderedOutput(["Removed lock on '/iota'.\n", + "Removed lock on '/A/B/lambda'.\n"]) + + svntest.verify.verify_outputs( + "Unexpected output while running 'svnadmin rmlocks'.", + output, [], expected_output, None) + ######################################################################## # Run the tests @@ -1410,6 +1498,7 @@ hotcopy_symlink, load_bad_props, verify_non_utf8_paths, + test_lslocks_and_rmlocks, ] if __name__ == '__main__':