Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnrdump_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnrdump_tests.py?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnrdump_tests.py (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnrdump_tests.py Thu Apr 16 03:46:20 2015 @@ -769,6 +769,151 @@ def only_trunk_A_range_dump(sbox): #---------------------------------------------------------------------- +#---------------------------------------------------------------------- + +# Regression test for issue 4551 "svnrdump load commits wrong properties, +# or fails, on a non-deltas dumpfile". In this test, the copy source does +# not exist and the failure mode is to error out. +@Issue(4551) +def load_non_deltas_copy_with_props(sbox): + "load non-deltas copy with props" + sbox.build() + + # Case (1): Copies that do not replace anything: the copy target path + # at (new rev - 1) does not exist + + # Set properties on each node to be copied + sbox.simple_propset('p', 'v', 'A/mu', 'A/B', 'A/B/E') + sbox.simple_propset('q', 'v', 'A/mu', 'A/B', 'A/B/E') + sbox.simple_commit() + sbox.simple_update() # avoid mixed-rev + + # Do the copies + sbox.simple_copy('A/mu@2', 'A/mu_COPY') + sbox.simple_copy('A/B@2', 'A/B_COPY') + # Also add new nodes inside the copied dir, to test more code paths + sbox.simple_copy('A/B/E@2', 'A/B_COPY/copied') + sbox.simple_mkdir('A/B_COPY/added') + sbox.simple_copy('A/B/E@2', 'A/B_COPY/added/copied') + # On each copied node, delete a prop + sbox.simple_propdel('p', 'A/mu_COPY', 'A/B_COPY', 'A/B_COPY/E', + 'A/B_COPY/copied', 'A/B_COPY/added/copied') + + sbox.simple_commit() + + # Dump with 'svnadmin' (non-deltas mode) + dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False) + + # Load with 'svnrdump'. This used to throw an error: + # svnrdump: E160013: File not found: revision 2, path '/A/B_COPY' + new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo') + svntest.main.create_repos(new_repo_dir) + svntest.actions.enable_revprop_changes(new_repo_dir) + svntest.actions.run_and_verify_svnrdump(dumpfile, + svntest.verify.AnyOutput, + [], 0, 'load', new_repo_url) + + # Check that property 'p' really was deleted on each copied node + for tgt_path in ['A/mu_COPY', 'A/B_COPY', 'A/B_COPY/E', + 'A/B_COPY/copied', 'A/B_COPY/added/copied']: + tgt_url = new_repo_url + '/' + tgt_path + _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url) + expected = ["Properties on '%s':" % (tgt_url,), + 'q'] + actual = map(str.strip, out) + svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual) + +# Regression test for issue 4551 "svnrdump load commits wrong properties, +# or fails, on a non-deltas dumpfile". In this test, the copy source does +# exist and the failure mode is to fail to delete a property. +@Issue(4551) +def load_non_deltas_replace_copy_with_props(sbox): + "load non-deltas replace© with props" + sbox.build() + + # Case (2): Copies that replace something: the copy target path + # at (new rev - 1) exists and has no property named 'p' + + # Set props on the copy source nodes (a file, a dir, a child of the dir) + sbox.simple_propset('p', 'v', 'A/mu', 'A/B', 'A/B/E') + sbox.simple_propset('q', 'v', 'A/mu', 'A/B', 'A/B/E') + sbox.simple_commit() + sbox.simple_update() # avoid mixed-rev + + # Do the copies, replacing something + sbox.simple_rm('A/D/gamma', 'A/C') + sbox.simple_copy('A/mu@2', 'A/D/gamma') + sbox.simple_copy('A/B@2', 'A/C') + # On the copy, delete a prop that wasn't present on the node that it replaced + sbox.simple_propdel('p', 'A/D/gamma', 'A/C', 'A/C/E') + + sbox.simple_commit() + + # Dump with 'svnadmin' (non-deltas mode) + dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False) + + # Load with 'svnrdump' + new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo') + svntest.main.create_repos(new_repo_dir) + svntest.actions.enable_revprop_changes(new_repo_dir) + svntest.actions.run_and_verify_svnrdump(dumpfile, + svntest.verify.AnyOutput, + [], 0, 'load', new_repo_url) + + # Check that property 'p' really was deleted on each copied node + # This used to fail, finding that property 'p' was still present + for tgt_path in ['A/D/gamma', 'A/C', 'A/C/E']: + tgt_url = new_repo_url + '/' + tgt_path + _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url) + expected = ["Properties on '%s':" % (tgt_url,), + 'q'] + actual = map(str.strip, out) + svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual) + +# Regression test for issue 4551 "svnrdump load commits wrong properties, +# or fails, on a non-deltas dumpfile". In this test, a node's props are +# modified, and the failure mode is that RA-serf would end up deleting +# properties that should remain on the node. +@Issue(4551) +def load_non_deltas_with_props(sbox): + "load non-deltas with props" + sbox.build() + + # Case (3): A node's props are modified, and at least one of its previous + # props remains after the modification. svnrdump made two prop mod method + # calls for the same property (delete, then set). RA-serf's commit editor + # didn't expect this and performed the deletes after the non-deletes, and + # so ended up deleting a property that should not be deleted. + + # Set properties on each node to be modified + sbox.simple_propset('p', 'v', 'A/mu') + sbox.simple_propset('q', 'v', 'A/mu', 'A/B') + sbox.simple_commit() + + # Do the modifications: a different kind of mod on each node + sbox.simple_propdel('p', 'A/mu') + sbox.simple_propset('q', 'v2', 'A/B') + sbox.simple_commit() + + # Dump with 'svnadmin' (non-deltas mode) + dumpfile = svntest.actions.run_and_verify_dump(sbox.repo_dir, deltas=False) + + # Load with 'svnrdump' + new_repo_dir, new_repo_url = sbox.add_repo_path('new_repo') + svntest.main.create_repos(new_repo_dir) + svntest.actions.enable_revprop_changes(new_repo_dir) + svntest.actions.run_and_verify_svnrdump(dumpfile, + svntest.verify.AnyOutput, + [], 0, 'load', new_repo_url) + + # Check that property 'q' remains on each modified node + for tgt_path in ['A/mu', 'A/B']: + tgt_url = new_repo_url + '/' + tgt_path + _, out, _ = svntest.main.run_svn(None, 'proplist', tgt_url) + expected = ["Properties on '%s':" % (tgt_url,), + 'q'] + actual = map(str.strip, out) + svntest.verify.compare_and_display_lines(None, 'PROPS', expected, actual) ######################################################################## # Run the tests @@ -824,6 +969,9 @@ test_list = [ None, range_dump, only_trunk_range_dump, only_trunk_A_range_dump, + load_non_deltas_copy_with_props, + load_non_deltas_replace_copy_with_props, + load_non_deltas_with_props, ] if __name__ == '__main__':
Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnsync_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnsync_tests.py?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnsync_tests.py (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svnsync_tests.py Thu Apr 16 03:46:20 2015 @@ -209,8 +209,12 @@ def setup_and_sync(sbox, dump_file_conte return dest_sbox -def verify_mirror(dest_sbox, src_sbox): - """Compare the contents of the DEST_SBOX repository with EXP_DUMP_FILE_CONTENTS.""" +def verify_mirror(dest_sbox, exp_dump_file_contents): + """Compare the contents of the mirror repository in DEST_SBOX with + EXP_DUMP_FILE_CONTENTS, by comparing the parsed dump stream content. + + First remove svnsync rev-props from the DEST_SBOX repository. + """ # Remove some SVNSync-specific housekeeping properties from the # mirror repository in preparation for the comparison dump. @@ -222,10 +226,9 @@ def verify_mirror(dest_sbox, src_sbox): # Create a dump file from the mirror repository. dest_dump = svntest.actions.run_and_verify_dump(dest_sbox.repo_dir) - src_dump = svntest.actions.run_and_verify_dump(src_sbox.repo_dir) svntest.verify.compare_dump_files( - "Dump files", "DUMP", src_dump, dest_dump) + "Dump files", "DUMP", exp_dump_file_contents, dest_dump) def run_test(sbox, dump_file_name, subdir=None, exp_dump_file_name=None, bypass_prop_validation=False, source_prop_encoding=None, @@ -251,16 +254,12 @@ or another dump file.""" # dump file (used to create the master repository) or another specified dump # file. if exp_dump_file_name: - build_repos(sbox) - svntest.actions.run_and_verify_load(sbox.repo_dir, - open(os.path.join(svnsync_tests_dir, - exp_dump_file_name), - 'rb').readlines()) - src_sbox = sbox + exp_dump_file_contents = open(os.path.join(svnsync_tests_dir, + exp_dump_file_name), 'rb').readlines() else: - src_sbox = sbox + exp_dump_file_contents = master_dumpfile_contents - verify_mirror(dest_sbox, sbox) + verify_mirror(dest_sbox, exp_dump_file_contents) @@ -564,9 +563,7 @@ def delete_revprops(sbox): run_copy_revprops(dest_sbox.repo_url, sbox.repo_url) # Does the result look as we expected? - build_repos(sbox) - svntest.actions.run_and_verify_load(sbox.repo_dir, expected_contents) - verify_mirror(dest_sbox, sbox) + verify_mirror(dest_sbox, expected_contents) @Issue(3870) @SkipUnless(svntest.main.is_posix_os) @@ -576,6 +573,78 @@ def fd_leak_sync_from_serf_to_local(sbox resource.setrlimit(resource.RLIMIT_NOFILE, (128, 128)) run_test(sbox, "largemods.dump", is_src_ra_local=None, is_dest_ra_local=True) +#---------------------------------------------------------------------- + +@Issue(4476) +def mergeinfo_contains_r0(sbox): + "mergeinfo contains r0" + + def make_node_record(node_name, mi): + """Return a dumpfile node-record for adding a (directory) node named + NODE_NAME with mergeinfo MI. Return it as a list of newline-terminated + lines. + """ + headers_tmpl = """\ +Node-path: %s +Node-kind: dir +Node-action: add +Prop-content-length: %d +Content-length: %d +""" + content_tmpl = """\ +K 13 +svn:mergeinfo +V %d +%s +PROPS-END +""" + content = content_tmpl % (len(mi), mi) + headers = headers_tmpl % (node_name, len(content), len(content)) + record = headers + '\n' + content + '\n\n' + return record.splitlines(True) + + # The test case mergeinfo (before, after) syncing, separated here with + # spaces instead of newlines + test_mi = [ + ("", ""), # unchanged + ("/a:1", "/a:1"), + ("/a:1 /b:1*,2","/a:1 /b:1*,2"), + ("/:0:1", "/:0:1"), # unchanged; colon-zero in filename + ("/a:0", ""), # dropped entirely + ("/a:0*", ""), + ("/a:0 /b:0*", ""), + ("/a:1 /b:0", "/a:1"), # one kept, one dropped + ("/a:0 /b:1", "/b:1"), + ("/a:0,1 /b:1", "/a:1 /b:1"), # one kept, one changed + ("/a:1 /b:0,1", "/a:1 /b:1"), + ("/a:0,1 /b:0*,1 /c:0,2 /d:0-1 /e:0-1,3 /f:0-2 /g:0-3", + "/a:1 /b:1 /c:2 /d:1 /e:1,3 /f:1-2 /g:1-3"), # all changed + ("/a:0:0-1", "/a:0:1"), # changed; colon-zero in filename + ] + + # Get the constant prefix for each dumpfile + dump_file_name = "mergeinfo-contains-r0.dump" + svnsync_tests_dir = os.path.join(os.path.dirname(sys.argv[0]), + 'svnsync_tests_data') + dump_in = open(os.path.join(svnsync_tests_dir, dump_file_name), + 'rb').readlines() + dump_out = list(dump_in) # duplicate the list + + # Add dumpfile node records containing the test mergeinfo + for n, mi in enumerate(test_mi): + node_name = "D" + str(n) + + mi_in = mi[0].replace(' ', '\n') + mi_out = mi[1].replace(' ', '\n') + dump_in.extend(make_node_record(node_name, mi_in)) + dump_out.extend(make_node_record(node_name, mi_out)) + + # Run the sync + dest_sbox = setup_and_sync(sbox, dump_in, bypass_prop_validation=True) + + # Compare the dump produced by the mirror repository with expected + verify_mirror(dest_sbox, dump_out) + ######################################################################## # Run the tests @@ -612,6 +681,7 @@ test_list = [ None, descend_into_replace, delete_revprops, fd_leak_sync_from_serf_to_local, # calls setrlimit + mergeinfo_contains_r0, ] if __name__ == '__main__': Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/main.py?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/main.py Thu Apr 16 03:46:20 2015 @@ -685,7 +685,17 @@ def run_svn(error_expected, *varargs): def run_svnadmin(*varargs): """Run svnadmin with VARARGS, returns exit code as int; stdout, stderr as list of lines (including line terminators).""" - return run_command(svnadmin_binary, 1, False, *varargs) + + use_binary = ('dump' in varargs) + + exit_code, stdout_lines, stderr_lines = \ + run_command(svnadmin_binary, 1, use_binary, *varargs) + + if use_binary and sys.platform == 'win32': + # Callers don't expect binary output on stderr + stderr_lines = [x.replace('\r', '') for x in stderr_lines] + + return exit_code, stdout_lines, stderr_lines # For running svnlook. Ignores the output. def run_svnlook(*varargs): Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/wc.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/wc.py?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/wc.py (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/svntest/wc.py Thu Apr 16 03:46:20 2015 @@ -1003,6 +1003,16 @@ def sqlite_stmt(wc_root_path, stmt): c.execute(stmt) return c.fetchall() +def sqlite_exec(wc_root_path, stmt): + """Execute STMT on the SQLite wc.db in WC_ROOT_PATH and return the + results.""" + + db = open_wc_db(wc_root_path)[0] + c = db.cursor() + c.execute(stmt) + db.commit() + + # ------------ ### probably toss these at some point. or major rework. or something. ### just bootstrapping some changes for now. Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/upgrade_tests.py?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/cmdline/upgrade_tests.py Thu Apr 16 03:46:20 2015 @@ -1439,6 +1439,47 @@ def upgrade_1_7_dir_external(sbox): # svn: warning: W200033: sqlite[S5]: database is locked svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir) +def auto_analyze(sbox): + """automatic SQLite ANALYZE""" + + sbox.build(create_wc = False) + + replace_sbox_with_tarfile(sbox, 'wc-without-stat1.tar.bz2') + svntest.main.run_svnadmin('setuuid', sbox.repo_dir, + '52ec7e4b-e5f0-451d-829f-f05d5571b4ab') + + # Don't use svn to do relocate as that will add the table. + svntest.wc.sqlite_exec(sbox.wc_dir, + "update repository " + "set root ='" + sbox.repo_url + "'") + val = svntest.wc.sqlite_stmt(sbox.wc_dir, + "select 1 from sqlite_master " + "where name = 'sqlite_stat1'") + if val != []: + raise svntest.Failure("initial state failed") + + # Make working copy read-only (but not wc_dir itself as + # svntest.main.chmod_tree will not reset it.) + for path, subdirs, files in os.walk(sbox.wc_dir): + for d in subdirs: + os.chmod(os.path.join(path, d), 0555) + for f in files: + os.chmod(os.path.join(path, f), 0444) + + state = svntest.actions.get_virginal_state(sbox.wc_dir, 1) + svntest.actions.run_and_verify_status(sbox.wc_dir, state) + + svntest.main.chmod_tree(sbox.wc_dir, 0666, 0022) + + state = svntest.actions.get_virginal_state(sbox.wc_dir, 1) + svntest.actions.run_and_verify_status(sbox.wc_dir, state) + + val = svntest.wc.sqlite_stmt(sbox.wc_dir, + "select 1 from sqlite_master " + "where name = 'sqlite_stat1'") + if val != [(1,)]: + raise svntest.Failure("analyze failed") + ######################################################################## # Run the tests @@ -1495,6 +1536,7 @@ test_list = [ None, iprops_upgrade1_6, changelist_upgrade_1_6, upgrade_1_7_dir_external, + auto_analyze, ] Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_ra/ra-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_ra/ra-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_ra/ra-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_ra/ra-test.c Thu Apr 16 03:46:20 2015 @@ -31,6 +31,8 @@ #include "svn_error.h" #include "svn_delta.h" #include "svn_ra.h" +#include "svn_time.h" +#include "svn_pools.h" #include "../svn_test.h" #include "../svn_test_fs.h" @@ -151,6 +153,53 @@ location_segments_test(const svn_test_op } +/* Implements svn_commit_callback2_t for commit_callback_failure() */ +static svn_error_t * +commit_callback_with_failure(const svn_commit_info_t *info, + void *baton, + apr_pool_t *scratch_pool) +{ + apr_time_t timetemp; + + SVN_TEST_ASSERT(info != NULL); + SVN_TEST_STRING_ASSERT(info->author, ""); /* No auth baton supplied. */ + SVN_TEST_STRING_ASSERT(info->post_commit_err, NULL); + + SVN_ERR(svn_time_from_cstring(&timetemp, info->date, scratch_pool)); + SVN_TEST_ASSERT(info->date != 0); + SVN_TEST_ASSERT(info->repos_root != NULL); + SVN_TEST_ASSERT(info->revision == 1); + + return svn_error_create(SVN_ERR_CANCELLED, NULL, NULL); +} + +static svn_error_t * +commit_callback_failure(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + svn_ra_session_t *ra_session; + const svn_delta_editor_t *editor; + void *edit_baton; + void *root_baton; + SVN_ERR(make_and_open_local_repos(&ra_session, "commit_cb_failure", opts, pool)); + + SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton, + apr_hash_make(pool), commit_callback_with_failure, + NULL, NULL, FALSE, pool)); + + SVN_ERR(editor->open_root(edit_baton, 1, pool, &root_baton)); + SVN_ERR(editor->change_dir_prop(root_baton, "A", + svn_string_create("B", pool), pool)); + SVN_ERR(editor->close_directory(root_baton, pool)); + SVN_TEST_ASSERT_ERROR(editor->close_edit(edit_baton, pool), + SVN_ERR_CANCELLED); + + /* This is what users should do if close_edit fails... Except that in this case + the commit actually succeeded*/ + SVN_ERR(editor->abort_edit(edit_baton, pool)); + return SVN_NO_ERROR; +} + /* The test table. */ struct svn_test_descriptor_t test_funcs[] = @@ -158,5 +207,7 @@ struct svn_test_descriptor_t test_funcs[ SVN_TEST_NULL, SVN_TEST_OPTS_PASS(location_segments_test, "test svn_ra_get_location_segments"), + SVN_TEST_OPTS_PASS(commit_callback_failure, + "commit callback failure"), SVN_TEST_NULL }; Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_repos/repos-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_repos/repos-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_repos/repos-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_repos/repos-test.c Thu Apr 16 03:46:20 2015 @@ -41,6 +41,8 @@ #include "dir-delta-editor.h" +#include "private/svn_repos_private.h" + /* Used to terminate lines in large multi-line string literals. */ #define NL APR_EOL_STR @@ -3320,6 +3322,208 @@ test_dump_r0_mergeinfo(const svn_test_op return SVN_NO_ERROR; } + +/* Test dumping in the presence of the property PROP_NAME:PROP_VAL. + * Return the dumped data in *DUMP_DATA_P (if DUMP_DATA_P is not null). + * REPOS is an empty repository. + * See svn_repos_dump_fs3() for START_REV, END_REV, NOTIFY_FUNC, NOTIFY_BATON. + */ +static svn_error_t * +test_dump_bad_props(svn_stringbuf_t **dump_data_p, + svn_repos_t *repos, + const char *prop_name, + const svn_string_t *prop_val, + svn_revnum_t start_rev, + svn_revnum_t end_rev, + svn_repos_notify_func_t notify_func, + void *notify_baton, + apr_pool_t *pool) +{ + const char *test_path = "/bar"; + svn_fs_t *fs = svn_repos_fs(repos); + svn_fs_txn_t *txn; + svn_fs_root_t *txn_root; + svn_revnum_t youngest_rev = 0; + svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool); + svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool); + const char *expected_str; + + /* Revision 1: Any commit will do, here */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_make_dir(txn_root, test_path , pool)); + SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool)); + SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev)); + + /* Revision 2: Add the bad property */ + SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool)); + SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool)); + SVN_ERR(svn_fs_change_node_prop(txn_root, test_path , prop_name, prop_val, + pool)); + SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool)); + SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev)); + + /* Test that a dump completes without error. */ + SVN_ERR(svn_repos_dump_fs3(repos, stream, start_rev, end_rev, + FALSE, FALSE, + notify_func, notify_baton, + NULL, NULL, + pool)); + svn_stream_close(stream); + + /* Check that the property appears in the dump data */ + expected_str = apr_psprintf(pool, "K %d\n%s\n" + "V %d\n%s\n" + "PROPS-END\n", + (int)strlen(prop_name), prop_name, + (int)prop_val->len, prop_val->data); + SVN_TEST_ASSERT(strstr(dump_data->data, expected_str)); + + if (dump_data_p) + *dump_data_p = dump_data; + return SVN_NO_ERROR; +} + +/* Test loading in the presence of the property PROP_NAME:PROP_VAL. + * Load data from DUMP_DATA. + * REPOS is an empty repository. + */ +static svn_error_t * +test_load_bad_props(svn_stringbuf_t *dump_data, + svn_repos_t *repos, + const char *prop_name, + const svn_string_t *prop_val, + const char *parent_fspath, + svn_boolean_t validate_props, + svn_repos_notify_func_t notify_func, + void *notify_baton, + apr_pool_t *pool) +{ + const char *test_path = apr_psprintf(pool, "%s%s", + parent_fspath ? parent_fspath : "", + "/bar"); + svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool); + svn_fs_t *fs; + svn_fs_root_t *rev_root; + svn_revnum_t youngest_rev; + svn_string_t *loaded_prop_val; + + SVN_ERR(svn_repos_load_fs4(repos, stream, + SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, + svn_repos_load_uuid_default, + parent_fspath, + FALSE, FALSE, /*use_*_commit_hook*/ + validate_props, + notify_func, notify_baton, + NULL, NULL, /*cancellation*/ + pool)); + svn_stream_close(stream); + + /* Check the loaded property */ + fs = svn_repos_fs(repos); + SVN_ERR(svn_fs_youngest_rev(&youngest_rev, fs, pool)); + SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, pool)); + SVN_ERR(svn_fs_node_prop(&loaded_prop_val, + rev_root, test_path, prop_name, pool)); + SVN_TEST_ASSERT(svn_string_compare(loaded_prop_val, prop_val)); + return SVN_NO_ERROR; +} + +static void +load_r0_mergeinfo_notifier(void *baton, + const svn_repos_notify_t *notify, + apr_pool_t *scratch_pool) +{ + svn_boolean_t *had_mergeinfo_warning = baton; + + if (notify->action == svn_repos_notify_warning) + { + if (notify->warning == svn_repos__notify_warning_invalid_mergeinfo) + { + *had_mergeinfo_warning = TRUE; + } + } +} + +/* Regression test for the 'load' part of issue #4476 "Mergeinfo + * containing r0 makes svnsync and svnadmin dump fail". + * + * Bad mergeinfo should not prevent loading a backup, at least when we do not + * require mergeinfo revision numbers or paths to be adjusted during loading. + */ +static svn_error_t * +test_load_r0_mergeinfo(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + const char *prop_name = "svn:mergeinfo"; + const svn_string_t *prop_val = svn_string_create("/foo:0", pool); + svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool); + + /* Produce a dump file containing bad mergeinfo */ + { + svn_repos_t *repos; + + SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-1", + opts, pool)); + SVN_ERR(test_dump_bad_props(&dump_data, repos, + prop_name, prop_val, + SVN_INVALID_REVNUM, SVN_INVALID_REVNUM, + NULL, NULL, pool)); + } + + /* Test loading without validating properties: should warn and succeed */ + { + svn_repos_t *repos; + svn_boolean_t had_mergeinfo_warning = FALSE; + + SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-2", + opts, pool)); + + /* Without changing revision numbers or paths */ + SVN_ERR(test_load_bad_props(dump_data, repos, + prop_name, prop_val, + NULL /*parent_dir*/, FALSE /*validate_props*/, + load_r0_mergeinfo_notifier, &had_mergeinfo_warning, + pool)); + SVN_TEST_ASSERT(had_mergeinfo_warning); + + /* With changing revision numbers and/or paths (by loading the same data + again, on top of existing revisions, into subdirectory 'bar') */ + had_mergeinfo_warning = FALSE; + SVN_ERR(test_load_bad_props(dump_data, repos, + prop_name, prop_val, + "/bar", FALSE /*validate_props*/, + load_r0_mergeinfo_notifier, &had_mergeinfo_warning, + pool)); + SVN_TEST_ASSERT(had_mergeinfo_warning); + } + + /* Test loading with validating properties: should return an error */ + { + svn_repos_t *repos; + + SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-3", + opts, pool)); + + /* Without changing revision numbers or paths */ + SVN_TEST__ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos, + prop_name, prop_val, + NULL /*parent_dir*/, TRUE /*validate_props*/, + NULL, NULL, + pool)); + + /* With changing revision numbers and/or paths (by loading the same data + again, on top of existing revisions, into subdirectory 'bar') */ + SVN_TEST__ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos, + prop_name, prop_val, + "/bar", TRUE /*validate_props*/, + NULL, NULL, + pool)); + } + + return SVN_NO_ERROR; +} + /* The test table. */ struct svn_test_descriptor_t test_funcs[] = @@ -3367,5 +3571,7 @@ struct svn_test_descriptor_t test_funcs[ "test filenames with control characters"), SVN_TEST_OPTS_PASS(test_dump_r0_mergeinfo, "test dumping with r0 mergeinfo"), + SVN_TEST_OPTS_PASS(test_load_r0_mergeinfo, + "test loading with r0 mergeinfo"), SVN_TEST_NULL }; Propchange: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_repos/repos-test.c ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Thu Apr 16 03:46:20 2015 @@ -0,0 +1,145 @@ +/subversion/branches/1.5.x-r30215/subversion/tests/libsvn_repos/repos-test.c:870312 +/subversion/branches/1.7.x-fs-verify/subversion/tests/libsvn_repos/repos-test.c:1146708,1161180 +/subversion/branches/1.8.x/subversion/tests/libsvn_repos/repos-test.c:1483275-1667537 +/subversion/branches/1.8.x-VS2013-14/subversion/tests/libsvn_repos/repos-test.c:1603404-1615199 +/subversion/branches/1.8.x-apr-0.9/subversion/tests/libsvn_repos/repos-test.c:1585493-1589570 +/subversion/branches/1.8.x-busted-proxy/subversion/tests/libsvn_repos/repos-test.c:1499222-1502434 +/subversion/branches/1.8.x-gpg-agent/subversion/tests/libsvn_repos/repos-test.c:1600789-1640662 +/subversion/branches/1.8.x-issue4400/subversion/tests/libsvn_repos/repos-test.c:1507591-1512557 +/subversion/branches/1.8.x-issue4411/subversion/tests/libsvn_repos/repos-test.c:1655044-1660022 +/subversion/branches/1.8.x-issue4437/subversion/tests/libsvn_repos/repos-test.c:1567249-1591140 +/subversion/branches/1.8.x-issue4448/subversion/tests/libsvn_repos/repos-test.c:1540420-1541802 +/subversion/branches/1.8.x-issue4480/subversion/tests/libsvn_repos/repos-test.c:1588773-1591136 +/subversion/branches/1.8.x-issue4551/subversion/tests/libsvn_repos/repos-test.c:1654795-1660018 +/subversion/branches/1.8.x-javahl-exception-crash/subversion/tests/libsvn_repos/repos-test.c:1586424-1588151 +/subversion/branches/1.8.x-libsvnjavahl-version/subversion/tests/libsvn_repos/repos-test.c:1483910-1485054 +/subversion/branches/1.8.x-openssl-dirs/subversion/tests/libsvn_repos/repos-test.c:1535137-1540436 +/subversion/branches/1.8.x-r1477876/subversion/tests/libsvn_repos/repos-test.c:1477981-1487716 +/subversion/branches/1.8.x-r1481625/subversion/tests/libsvn_repos/repos-test.c:1481637-1482135 +/subversion/branches/1.8.x-r1495063/subversion/tests/libsvn_repos/repos-test.c:1495804-1501074 +/subversion/branches/1.8.x-r1497310-partial/subversion/tests/libsvn_repos/repos-test.c:1497500-1501063 +/subversion/branches/1.8.x-r1502267/subversion/tests/libsvn_repos/repos-test.c:1502268-1515998 +/subversion/branches/1.8.x-r1507044/subversion/tests/libsvn_repos/repos-test.c:1507282-1511571 +/subversion/branches/1.8.x-r1513879/subversion/tests/libsvn_repos/repos-test.c:1514699-1516021 +/subversion/branches/1.8.x-r1536931/subversion/tests/libsvn_repos/repos-test.c:1536934-1591145 +/subversion/branches/1.8.x-r1537147/subversion/tests/libsvn_repos/repos-test.c:1537201-1537216 +/subversion/branches/1.8.x-r1537193/subversion/tests/libsvn_repos/repos-test.c:1537217-1541815 +/subversion/branches/1.8.x-r1541790/subversion/tests/libsvn_repos/repos-test.c:1541791-1542075 +/subversion/branches/1.8.x-r1544597/subversion/tests/libsvn_repos/repos-test.c:1564547-1591149 +/subversion/branches/1.8.x-r1554978/subversion/tests/libsvn_repos/repos-test.c:1555500-1565076 +/subversion/branches/1.8.x-r1561426/subversion/tests/libsvn_repos/repos-test.c:1561547-1640480 +/subversion/branches/1.8.x-r1564215/subversion/tests/libsvn_repos/repos-test.c:1564281-1564620 +/subversion/branches/1.8.x-r1567286/subversion/tests/libsvn_repos/repos-test.c:1567364-1567731 +/subversion/branches/1.8.x-r1567985/subversion/tests/libsvn_repos/repos-test.c:1568016-1568055 +/subversion/branches/1.8.x-r1573744-and-friends/subversion/tests/libsvn_repos/repos-test.c:1640569-1666075 +/subversion/branches/1.8.x-r1574868/subversion/tests/libsvn_repos/repos-test.c:1575329-1579873 +/subversion/branches/1.8.x-r1577151/subversion/tests/libsvn_repos/repos-test.c:1589064-1589574 +/subversion/branches/1.8.x-r1577812/subversion/tests/libsvn_repos/repos-test.c:1577814-1588145 +/subversion/branches/1.8.x-r1578311/subversion/tests/libsvn_repos/repos-test.c:1578312-1589576 +/subversion/branches/1.8.x-r1578853/subversion/tests/libsvn_repos/repos-test.c:1578879-1581682 +/subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c:1579589-1591112 +/subversion/branches/1.8.x-r1580626/subversion/tests/libsvn_repos/repos-test.c:1580631,1580652,1580661,1581435,1588382-1591134 +/subversion/branches/1.8.x-r1581305/subversion/tests/libsvn_repos/repos-test.c:1581320-1582587 +/subversion/branches/1.8.x-r1584342/subversion/tests/libsvn_repos/repos-test.c:1584350-1589572 +/subversion/branches/1.8.x-r1589360/subversion/tests/libsvn_repos/repos-test.c:1604732-1640658 +/subversion/branches/1.8.x-r1590751/subversion/tests/libsvn_repos/repos-test.c:1660348-1660561 +/subversion/branches/1.8.x-r1594223/subversion/tests/libsvn_repos/repos-test.c:1594224-1606975 +/subversion/branches/1.8.x-r1611379/subversion/tests/libsvn_repos/repos-test.c:1612525-1640664 +/subversion/branches/1.8.x-r1611380/subversion/tests/libsvn_repos/repos-test.c:1647889-1657742 +/subversion/branches/1.8.x-r1619380/subversion/tests/libsvn_repos/repos-test.c:1619398-1645562,1645571-1667451 +/subversion/branches/1.8.x-r1619774/subversion/tests/libsvn_repos/repos-test.c:1626728-1640478 +/subversion/branches/1.8.x-r1621978/subversion/tests/libsvn_repos/repos-test.c:1622021-1640850 +/subversion/branches/1.8.x-r1625533/subversion/tests/libsvn_repos/repos-test.c:1640743-1642632 +/subversion/branches/1.8.x-r1633126/subversion/tests/libsvn_repos/repos-test.c:1633130-1642634 +/subversion/branches/1.8.x-r1641564/subversion/tests/libsvn_repos/repos-test.c:1641570-1642636 +/subversion/branches/1.8.x-r1643074/subversion/tests/libsvn_repos/repos-test.c:1643117-1659755 +/subversion/branches/1.8.x-r1644595/subversion/tests/libsvn_repos/repos-test.c:1644691-1659880 +/subversion/branches/1.8.x-r1646505/subversion/tests/libsvn_repos/repos-test.c:1659718-1660020 +/subversion/branches/1.8.x-r1646797/subversion/tests/libsvn_repos/repos-test.c:1646798-1659878 +/subversion/branches/1.8.x-r1659867/subversion/tests/libsvn_repos/repos-test.c:1659963-1666078 +/subversion/branches/1.8.x-r1660220/subversion/tests/libsvn_repos/repos-test.c:1665883-1667447 +/subversion/branches/1.8.x-r1660593/subversion/tests/libsvn_repos/repos-test.c:1660595-1667441 +/subversion/branches/1.8.x-r1664684/subversion/tests/libsvn_repos/repos-test.c:1664704-1667445 +/subversion/branches/1.8.x-r1666690/subversion/tests/libsvn_repos/repos-test.c:1666702-1667449 +/subversion/branches/1.8.x-r175-daemonize/subversion/tests/libsvn_repos/repos-test.c:1515866-1516020 +/subversion/branches/1.8.x-rm-external-dir/subversion/tests/libsvn_repos/repos-test.c:1600632-1615197 +/subversion/branches/1.8.x-serf-1.3+-windows/subversion/tests/libsvn_repos/repos-test.c:1517122-1533873 +/subversion/branches/1.8.x-serf-no-lock-support/subversion/tests/libsvn_repos/repos-test.c:1584583-1591109 +/subversion/branches/1.8.x-svn_fs_info-removal/subversion/tests/libsvn_repos/repos-test.c:1467420-1468159 +/subversion/branches/1.8.x-svnsync-serf-memory/subversion/tests/libsvn_repos/repos-test.c:1515248-1515701 +/subversion/branches/1.8.x-synvsync-serf-memory/subversion/tests/libsvn_repos/repos-test.c:1515247 +/subversion/branches/1.8.x-tristate-chunked-request/subversion/tests/libsvn_repos/repos-test.c:1502435-1503894 +/subversion/branches/10Gb/subversion/tests/libsvn_repos/repos-test.c:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955 +/subversion/branches/atomic-revprop/subversion/tests/libsvn_repos/repos-test.c:965046-1000689 +/subversion/branches/auto-props-sdc/subversion/tests/libsvn_repos/repos-test.c:1384106-1401643 +/subversion/branches/bdb-reverse-deltas/subversion/tests/libsvn_repos/repos-test.c:872050-872529 +/subversion/branches/diff-callbacks3/subversion/tests/libsvn_repos/repos-test.c:870059-870761 +/subversion/branches/diff-optimizations/subversion/tests/libsvn_repos/repos-test.c:1031270-1037352 +/subversion/branches/diff-optimizations-bytes/subversion/tests/libsvn_repos/repos-test.c:1037353-1067789 +/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/tests/libsvn_repos/repos-test.c:870728-871118 +/subversion/branches/double-delete/subversion/tests/libsvn_repos/repos-test.c:870511-872970 +/subversion/branches/ev2-export/subversion/tests/libsvn_repos/repos-test.c:1325914,1332738,1413107 +/subversion/branches/explore-wc/subversion/tests/libsvn_repos/repos-test.c:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997 +/subversion/branches/file-externals/subversion/tests/libsvn_repos/repos-test.c:871779-873302 +/subversion/branches/fs-rep-sharing/subversion/tests/libsvn_repos/repos-test.c:869036-873803 +/subversion/branches/fsfs-pack/subversion/tests/libsvn_repos/repos-test.c:873717-874575 +/subversion/branches/gnome-keyring/subversion/tests/libsvn_repos/repos-test.c:870558-871410 +/subversion/branches/gpg-agent-password-store/subversion/tests/libsvn_repos/repos-test.c:1005036-1150766 +/subversion/branches/http-protocol-v2/subversion/tests/libsvn_repos/repos-test.c:874395-876041 +/subversion/branches/in-memory-cache/subversion/tests/libsvn_repos/repos-test.c:869829-871452 +/subversion/branches/in-repo-authz/subversion/tests/libsvn_repos/repos-test.c:1414342-1424779 +/subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c:1297080-1395089 +/subversion/branches/integrate-cache-item-serialization/subversion/tests/libsvn_repos/repos-test.c:1068724-1068739 +/subversion/branches/integrate-cache-membuffer/subversion/tests/libsvn_repos/repos-test.c:998649-998852 +/subversion/branches/integrate-compression-level/subversion/tests/libsvn_repos/repos-test.c:1068651-1072287 +/subversion/branches/integrate-io-improvements/subversion/tests/libsvn_repos/repos-test.c:1068684-1072297 +/subversion/branches/integrate-is-cachable/subversion/tests/libsvn_repos/repos-test.c:1072568-1074082 +/subversion/branches/integrate-partial-getter/subversion/tests/libsvn_repos/repos-test.c:1072558-1076552 +/subversion/branches/integrate-readline-speedup/subversion/tests/libsvn_repos/repos-test.c:1072553-1072555 +/subversion/branches/integrate-stream-api-extensions/subversion/tests/libsvn_repos/repos-test.c:1068695-1072516 +/subversion/branches/integrate-string-improvements/subversion/tests/libsvn_repos/repos-test.c:1068251-1190617 +/subversion/branches/integrate-txdelta-caching/subversion/tests/libsvn_repos/repos-test.c:1072541-1078213 +/subversion/branches/issue-2779-dev/subversion/tests/libsvn_repos/repos-test.c:965496-984198 +/subversion/branches/issue-2843-dev/subversion/tests/libsvn_repos/repos-test.c:871432-874179 +/subversion/branches/issue-3000/subversion/tests/libsvn_repos/repos-test.c:871713,871716-871719,871721-871726,871728,871734 +/subversion/branches/issue-3067-deleted-subtrees/subversion/tests/libsvn_repos/repos-test.c:873375-874084 +/subversion/branches/issue-3148-dev/subversion/tests/libsvn_repos/repos-test.c:875193-875204 +/subversion/branches/issue-3220-dev/subversion/tests/libsvn_repos/repos-test.c:872210-872226 +/subversion/branches/issue-3242-dev/subversion/tests/libsvn_repos/repos-test.c:879653-896436 +/subversion/branches/issue-3334-dirs/subversion/tests/libsvn_repos/repos-test.c:875156-875867 +/subversion/branches/issue-3975/subversion/tests/libsvn_repos/repos-test.c:1152931-1160746 +/subversion/branches/issue-4116-dev/subversion/tests/libsvn_repos/repos-test.c:1424719-1425040 +/subversion/branches/issue-4194-dev/subversion/tests/libsvn_repos/repos-test.c:1410507-1414880 +/subversion/branches/javahl-ra/subversion/tests/libsvn_repos/repos-test.c:1342682,1344977 +/subversion/branches/kwallet/subversion/tests/libsvn_repos/repos-test.c:870785-871314 +/subversion/branches/log-g-performance/subversion/tests/libsvn_repos/repos-test.c:870941-871032 +/subversion/branches/merge-skips-obstructions/subversion/tests/libsvn_repos/repos-test.c:874525-874615 +/subversion/branches/multi-layer-moves/subversion/tests/libsvn_repos/repos-test.c:1239019-1300930 +/subversion/branches/nfc-nfd-aware-client/subversion/tests/libsvn_repos/repos-test.c:870276,870376 +/subversion/branches/node_pool/subversion/tests/libsvn_repos/repos-test.c:1304828-1305388 +/subversion/branches/performance/subversion/tests/libsvn_repos/repos-test.c:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232 ,1029335-1029336,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365 +/subversion/branches/py-tests-as-modules/subversion/tests/libsvn_repos/repos-test.c:956579-1033052 +/subversion/branches/ra_serf-digest-authn/subversion/tests/libsvn_repos/repos-test.c:875693-876404 +/subversion/branches/reintegrate-improvements/subversion/tests/libsvn_repos/repos-test.c:873853-874164 +/subversion/branches/revprop-cache/subversion/tests/libsvn_repos/repos-test.c:1298521-1326293 +/subversion/branches/revprop-packing/subversion/tests/libsvn_repos/repos-test.c:1143907,1143971,1143997,1144017,1144499,1144568,1146145 +/subversion/branches/subtree-mergeinfo/subversion/tests/libsvn_repos/repos-test.c:876734-878766 +/subversion/branches/svn-mergeinfo-enhancements/subversion/tests/libsvn_repos/repos-test.c:870119-870195,870197-870288 +/subversion/branches/svn-patch-improvements/subversion/tests/libsvn_repos/repos-test.c:918519-934609 +/subversion/branches/svn_mutex/subversion/tests/libsvn_repos/repos-test.c:1141683-1182099 +/subversion/branches/svnpatch-diff/subversion/tests/libsvn_repos/repos-test.c:865738-876477 +/subversion/branches/svnraisetc/subversion/tests/libsvn_repos/repos-test.c:874709-875149 +/subversion/branches/svnserve-logging/subversion/tests/libsvn_repos/repos-test.c:869828-870893 +/subversion/branches/tc-issue-3334/subversion/tests/libsvn_repos/repos-test.c:874697-874773 +/subversion/branches/tc-merge-notify/subversion/tests/libsvn_repos/repos-test.c:874017-874062 +/subversion/branches/tc-resolve/subversion/tests/libsvn_repos/repos-test.c:874191-874239 +/subversion/branches/tc_url_rev/subversion/tests/libsvn_repos/repos-test.c:874351-874483 +/subversion/branches/tree-conflicts/subversion/tests/libsvn_repos/repos-test.c:868291-873154 +/subversion/branches/tree-conflicts-notify/subversion/tests/libsvn_repos/repos-test.c:873926-874008 +/subversion/branches/tristate-chunked-request/subversion/tests/libsvn_repos/repos-test.c:1502401,1502673 +/subversion/branches/tweak-build-take-two/subversion/tests/libsvn_repos/repos-test.c:1424288-1425049,1425051-1425613 +/subversion/branches/uris-as-urls/subversion/tests/libsvn_repos/repos-test.c:1060426-1064427 +/subversion/branches/verify-at-commit/subversion/tests/libsvn_repos/repos-test.c:1462039-1462408 +/subversion/branches/wc-collate-path/subversion/tests/libsvn_repos/repos-test.c:1407642 +/subversion/trunk/subversion/tests/libsvn_repos/dump-load-test.c:1643074 +/subversion/trunk/subversion/tests/libsvn_repos/repos-test.c:1467440,1467450,1467481,1467587,1467597,1467668,1467675,1467803,1467807,1467951,1468109,1468116,1468151,1468347,1468395,1468439,1468487,1468565-1468566,1468980,1469248,1469363,1469478,1469489,1469512-1469513,1469550,1469556,1469645,1469674,1469833,1469862,1469866,1469871,1469994,1470031,1470037,1470221,1470238,1470246,1470248,1470537,1470650,1470738,1470781,1470898,1470904,1470908,1470913,1470936,1470993-1470994,1471028-1471029,1471107,1471153,1471302,1471443,1471490,1471744,1475704,1475724,1475772,1475963,1476092,1476155,1476181,1476193,1476254,1476359,1476366,1476607,1477294,1477359,1477729-1477730,1477876,1477891,1478001,1478220-1478221,1478465,1478617,1478897,1478951,1478987,1478998,1479320-1479321,1479323,1479326,1479329,1479540,1479563,1479605,1479896,1480054,1480077,1480080,1480082,1480119,1480149,1480344,1480412,1480426,1480442,1480616,1480641-1480642,1480664,1480669,1480681,1480723,1480738,1480765,1481010,1481418, 1481594,1481596,1481625,1481627-1481628,1481631-1481632,1481772,1481782,1481800,1481813,1481847,1481944,1481981,1482282,1482327,1482338,1482350,1482354,1482436,1482479,1482524,1482528,1482536,1482554,1482558,1482592,1482724,1482759,1482779,1482829,1482969-1482970,1482973,1483015,1483077,1483101,1483116,1483125,1483391,1483397,1483555,1483557,1483575,1483580,1483781,1483927,1483939,1483947,1483964-1483965,1483968,1483972,1483975,1483977,1483984,1484006,1484016-1484017,1484023,1484755,1485018,1485127,1485350,1485413,1485427,1485447,1485449,1485497,1485501,1485650,1486072,1486457,1486572,1486809,1486915,1486931,1487083,1487094,1488183,1488267,1488294,1488425,1488639,1488693,1488878,1489114,1489116-1489117,1489203,1489339,1489935,1490045,1490326,1490679,1490684,1490721,1491432,1491499,1491707,1491739,1491755-1491756,1491762,1491770,1491816,1491868,1492005,1492020,1492145,1492148,1492152,1492164,1492264,1492295,1493102,1493424,1493475,1493703,1493720,1493951,1494089,1494171,1494223,14942 87,1494298,1494318,1494342,1494657,1494913,1494967,1495063,1495104,1495204,1495209,1495214,1495256,1495329,1495428,1495432,1495446,1495597,1495805,1495850,1495978,1496007,1496110-1496111,1496127,1496132,1496151,1496470,1496938,1496957,1497002,1497318-1497319,1497551,1497614,1497804,1497975,1497980,1498000,1498012,1498136,1498449,1498455-1498456,1498483-1498484,1498486,1498550,1498564,1498851,1498885,1498997,1499034,1499044,1499064,1499095-1499096,1499100,1499403,1499423,1499438,1499447,1499460,1499470,1499483,1499492,1499496,1499498,1499595,1499727,1500074,1500175,1500226,1500680,1500695,1500762,1500799,1500801-1500802,1500904,1500928,1501199,1501207,1501656,1501702,1502097,1502267,1502577,1502777,1502811,1502901,1502909,1502952,1503009-1503010,1503058,1503061,1503211,1503318,1503528,1503884,1504192,1504505,1506040-1506041,1506047,1506058,1506966,1507044,1507382,1507567,1507589,1507889,1507891,1508438,1509186,1509196,1511057,1511272,1511353,1511603,1512067,1512119,1512195,1512300-15 12301,1512432,1512471-1512472,1513119,1513122,1513156,1513463,1513472,1513479,1513874,1513879-1513880,1513943,1514295,1514315,1514318,1514356,1514628,1514763,1514785,1514804,1515119,1515141,1515201,1515225,1515237,1515343,1515366,1515516,1515534,1515721,1515992,1515997,1516023-1516024,1516049,1516051-1516053,1516071,1516271,1516429,1516556,1516565,1516567,1516806,1518184,1518942,1519615,1519617,1519733,1519816,1519823,1519955,1520065,1520529,1520532,1520539,1520745,1522892,1523666,1524869,1525902,1526439,1526655,1527103,1527105,1530763,1530768,1530872,1530922,1530967,1531002,1531004,1531014,1531938,1532023,1532098,1532287,1532316,1534102,1534149,1534158,1534713,1534737,1534860,1535115,1535161,1535532,1535610,1535676,1536350,1536383,1536464,1536488,1536537,1536914,1536931,1537018,1537147,1537190,1537193,1537221,1537263,1537360,1537415,1537555,1537700,1538516-1538517,1538519,1538574,1538581,1538812,1538925,1538928,1538939,1540044,1540417,1540752,1541432,1541635,1541638,1541705,1541790 ,1542042,1542069,1542071,1542119,1542129,1542138,1542146,1542151,1542610,1542765,1542767,1542774,1543145,1543187,1543413,1543594,1543961,1544295,1544302-1544303,1544316,1544597,1544600,1544688,1544690,1544878,1544895,1545111,1545122,1545134,1545302,1545835,1545845,1547252,1547454,1547774,1547866,1547873,1548097,1548105,1548170,1548486,1548673,1549858,1549874,1550691,1550772,1550803,1551524,1551579,1552957-1552958,1553101,1553105,1553113,1553376-1553377,1553501,1553556,1554978,1555403,1555499,1557320,1557522,1559009,1559197,1560690,1560701,1561426,1561703,1563110,1564292,1564576,1564966,1564969,1565085,1565531,1566503-1566504,1567064,1567109,1567134,1567204,1567228,1567286,1567392,1567492,1567494,1567740,1567752,1567985,1568070,1568180,1568349,1568361,1568872,1568953,1568955,1569069,1570642,1571214,1571747,1571787,1571795,1572102,1572200,1572340,1573088,1573106,1573209,1574868,1575270,1575284,1575525,1575915,1576277,1576283,1576329,1577151,1577200,1577294,1577739,1577755,1577812-1577 813,1578273,1578311,1578326,1578670,1578820,1578853,1578875,1579274,1579429,1579588,1579684,1580626,1580650,1580832,1580867,1580872,1581296,1581305,1581315,1581430,1581810,1583580,1583977,1584342,1584576,1584592,1584745,1585686,1586052,1586255,1586352,1586467,1587511,1587946,1587968,1588772,1588778,1589184,1589188,1589360,1589460,1589486,1590212,1590751,1591123,1592014,1592034,1592987,1593992,1594156,1594223,1594794,1594814,1594834,1595061,1595431,1596866,1600311,1600315,1600323,1600331,1600348,1600368,1600393,1600563,1600781,1600909,1601851,1606009,1611379-1611381,1612225,1612405,1615211,1615219,1615255-1615256,1615260,1615263,1615354,1616131,1617687,1619071,1619105,1619118,1619153,1619774,1619802,1620332,1621978,1621981,1625522,1625533,1625537,1628431,1628536,1628540,1633126,1636874,1637826,1640730,1640862,1640873,1641564,1643033,1643074,1643409,1643437,1643457,1643461,1643482,1643793,1643810,1643972-1643973,1644158,1644530,1644595,1644599,1646230,1646250,1646253,1646495,1646505,1 646785-1646786,1646797,1647339,1650481,1650489,1650531,1650834,1651759,1651963,1651966,1651980,1651997,1652182,1652195,1652200,1652744,1653039,1653622-1653623,1653988,1654039,1654162,1654186,1654271,1655651,1655712,1655738,1656713,1656893,1657182,1657195,1657401,1658115,1658417,1659013,1659315,1659399,1659553-1659554,1659867,1659869,1660071,1660220,1660508,1660593,1660646,1663991,1664476,1664480-1664481,1664483,1664507,1664520-1664521,1664523,1664526-1664527,1664531-1664532,1664684,1665845,1665850,1665852,1665874,1666690,1667233,1667235,1667471 Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/cache-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/cache-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/cache-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/cache-test.c Thu Apr 16 03:46:20 2015 @@ -199,6 +199,67 @@ test_membuffer_cache_basic(apr_pool_t *p return basic_cache_test(cache, FALSE, pool); } +/* Implements svn_cache__deserialize_func_t */ +static svn_error_t * +raise_error_deserialize_func(void **out, + void *data, + apr_size_t data_len, + apr_pool_t *pool) +{ + return svn_error_create(APR_EGENERAL, NULL, NULL); +} + +/* Implements svn_cache__partial_getter_func_t */ +static svn_error_t * +raise_error_partial_getter_func(void **out, + const void *data, + apr_size_t data_len, + void *baton, + apr_pool_t *result_pool) +{ + return svn_error_create(APR_EGENERAL, NULL, NULL); +} + +static svn_error_t * +test_membuffer_serializer_error_handling(apr_pool_t *pool) +{ + svn_cache__t *cache; + svn_membuffer_t *membuffer; + svn_revnum_t twenty = 20; + svn_boolean_t found; + void *val; + + SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0, + TRUE, TRUE, pool)); + + /* Create a cache with just one entry. */ + SVN_ERR(svn_cache__create_membuffer_cache(&cache, + membuffer, + serialize_revnum, + raise_error_deserialize_func, + APR_HASH_KEY_STRING, + "cache:", + FALSE, + pool)); + + SVN_ERR(svn_cache__set(cache, "twenty", &twenty, pool)); + + /* Test retrieving data from cache using full getter that + always raises an error. */ + SVN_TEST_ASSERT_ERROR( + svn_cache__get(&val, &found, cache, "twenty", pool), + APR_EGENERAL); + + /* Test retrieving data from cache using partial getter that + always raises an error. */ + SVN_TEST_ASSERT_ERROR( + svn_cache__get_partial(&val, &found, cache, "twenty", + raise_error_partial_getter_func, + NULL, pool), + APR_EGENERAL); + + return SVN_NO_ERROR; +} static svn_error_t * test_memcache_long_key(const svn_test_opts_t *opts, @@ -269,5 +330,7 @@ struct svn_test_descriptor_t test_funcs[ "memcache svn_cache with very long keys"), SVN_TEST_PASS2(test_membuffer_cache_basic, "basic membuffer svn_cache test"), + SVN_TEST_PASS2(test_membuffer_serializer_error_handling, + "test for error handling in membuffer svn_cache"), SVN_TEST_NULL }; Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/config-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/config-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/config-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/config-test.c Thu Apr 16 03:46:20 2015 @@ -352,6 +352,32 @@ test_ignore_bom(apr_pool_t *pool) return SVN_NO_ERROR; } +static svn_error_t * +test_expand(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + svn_config_t *cfg; + const char *cfg_file, *val; + + if (!srcdir) + SVN_ERR(init_params(pool)); + + cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL); + SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool)); + + /* Get expanded "g" which requires expanding "c". */ + svn_config_get(cfg, &val, "section1", "g", NULL); + + /* Get expanded "c". */ + svn_config_get(cfg, &val, "section1", "c", NULL); + + /* With pool debugging enabled this ensures that the expanded value + of "c" was not created in a temporary pool when expanding "g". */ + SVN_TEST_STRING_ASSERT(val, "bar"); + + return SVN_NO_ERROR; +} + /* ==================================================================== If you add a new test to this file, update this array. @@ -376,5 +402,7 @@ struct svn_test_descriptor_t test_funcs[ SVN_TEST_PASS2(test_stream_interface, "test svn_config_parse"), SVN_TEST_PASS2(test_ignore_bom, "test parsing config file with BOM"), + SVN_TEST_OPTS_PASS(test_expand, + "test variable expansion"), SVN_TEST_NULL }; Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/string-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/string-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/string-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_subr/string-test.c Thu Apr 16 03:46:20 2015 @@ -569,7 +569,19 @@ test_stringbuf_insert(apr_pool_t *pool) SVN_TEST_STRING_ASSERT(a->data, "test hello, world"); svn_stringbuf_insert(a, 1200, "!", 1); - return expect_stringbuf_equal(a, "test hello, world!", pool); + SVN_TEST_STRING_ASSERT(a->data, "test hello, world!"); + + svn_stringbuf_insert(a, 4, "\0-\0", 3); + SVN_TEST_ASSERT(svn_stringbuf_compare(a, + svn_stringbuf_ncreate("test\0-\0 hello, world!", + 21, pool))); + + svn_stringbuf_insert(a, 14, a->data + 4, 3); + SVN_TEST_ASSERT(svn_stringbuf_compare(a, + svn_stringbuf_ncreate("test\0-\0 hello,\0-\0 world!", + 24, pool))); + + return SVN_NO_ERROR; } static svn_error_t * @@ -608,8 +620,24 @@ test_stringbuf_replace(apr_pool_t *pool) SVN_TEST_STRING_ASSERT(a->data, "test hello, world!"); svn_stringbuf_replace(a, 1200, 199, "!!", 2); + SVN_TEST_STRING_ASSERT(a->data, "test hello, world!!!"); + + svn_stringbuf_replace(a, 10, 2, "\0-\0", 3); + SVN_TEST_ASSERT(svn_stringbuf_compare(a, + svn_stringbuf_ncreate("test hello\0-\0world!!!", + 21, pool))); + + svn_stringbuf_replace(a, 10, 3, a->data + 10, 3); + SVN_TEST_ASSERT(svn_stringbuf_compare(a, + svn_stringbuf_ncreate("test hello\0-\0world!!!", + 21, pool))); + + svn_stringbuf_replace(a, 19, 1, a->data + 10, 3); + SVN_TEST_ASSERT(svn_stringbuf_compare(a, + svn_stringbuf_ncreate("test hello\0-\0world!\0-\0!", + 23, pool))); - return expect_stringbuf_equal(a, "test hello, world!!!", pool); + return SVN_NO_ERROR; } static svn_error_t * Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/op-depth-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/op-depth-test.c Thu Apr 16 03:46:20 2015 @@ -8900,6 +8900,127 @@ movedhere_extract_retract(const svn_test } +static svn_error_t * +nested_move_delete(const svn_test_opts_t *opts, apr_pool_t *pool) +{ + svn_test__sandbox_t b; + + SVN_ERR(svn_test__sandbox_create(&b, "nested_move_delete", opts, pool)); + + SVN_ERR(sbox_add_and_commit_greek_tree(&b)); + + SVN_ERR(sbox_wc_mkdir(&b, "A/Z")); + SVN_ERR(sbox_wc_move(&b, "A/B/lambda", "A/Z/lambda")); + + SVN_ERR(sbox_wc_delete(&b, "A/B")); + + { + nodes_row_t nodes_AB[] = { + {0, "A/B", "normal", 1, "A/B"}, + {2, "A/B", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E", "normal", 1, "A/B/E"}, + {2, "A/B/E", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E/alpha", "normal", 1, "A/B/E/alpha"}, + {2, "A/B/E/alpha", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E/beta", "normal", 1, "A/B/E/beta"}, + {2, "A/B/E/beta", "base-deleted", NO_COPY_FROM}, + {0, "A/B/F", "normal", 1, "A/B/F"}, + {2, "A/B/F", "base-deleted", NO_COPY_FROM}, + {0, "A/B/lambda", "normal", 1, "A/B/lambda"}, + {2, "A/B/lambda", "base-deleted", NO_COPY_FROM, "A/Z/lambda"}, + {0} + }; + nodes_row_t nodes_AZ[] = { + {2, "A/Z", "normal", NO_COPY_FROM}, + {3, "A/Z/lambda", "normal", 1, "A/B/lambda", MOVED_HERE }, + {0} + }; + + SVN_ERR(check_db_rows(&b, "A/B", nodes_AB)); + SVN_ERR(check_db_rows(&b, "A/Z", nodes_AZ)); + } + + SVN_ERR(sbox_wc_move(&b, "A", "A_moved")); + + { + nodes_row_t nodes[] = { + {0, "", "normal", 0, ""}, + {0, "A", "normal", 1, "A"}, + {1, "A", "base-deleted", NO_COPY_FROM, "A_moved"}, + {0, "A/B", "normal", 1, "A/B"}, + {1, "A/B", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E", "normal", 1, "A/B/E"}, + {1, "A/B/E", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E/alpha", "normal", 1, "A/B/E/alpha"}, + {1, "A/B/E/alpha", "base-deleted", NO_COPY_FROM}, + {0, "A/B/E/beta", "normal", 1, "A/B/E/beta"}, + {1, "A/B/E/beta", "base-deleted", NO_COPY_FROM}, + {0, "A/B/F", "normal", 1, "A/B/F"}, + {1, "A/B/F", "base-deleted", NO_COPY_FROM}, + {0, "A/B/lambda", "normal", 1, "A/B/lambda"}, + {1, "A/B/lambda", "base-deleted", NO_COPY_FROM}, + {0, "A/C", "normal", 1, "A/C"}, + {1, "A/C", "base-deleted", NO_COPY_FROM}, + {0, "A/D", "normal", 1, "A/D"}, + {1, "A/D", "base-deleted", NO_COPY_FROM}, + {0, "A/D/G", "normal", 1, "A/D/G"}, + {1, "A/D/G", "base-deleted", NO_COPY_FROM}, + {0, "A/D/G/pi", "normal", 1, "A/D/G/pi"}, + {1, "A/D/G/pi", "base-deleted", NO_COPY_FROM}, + {0, "A/D/G/rho", "normal", 1, "A/D/G/rho"}, + {1, "A/D/G/rho", "base-deleted", NO_COPY_FROM}, + {0, "A/D/G/tau", "normal", 1, "A/D/G/tau"}, + {1, "A/D/G/tau", "base-deleted", NO_COPY_FROM}, + {0, "A/D/H", "normal", 1, "A/D/H"}, + {1, "A/D/H", "base-deleted", NO_COPY_FROM}, + {0, "A/D/H/chi", "normal", 1, "A/D/H/chi"}, + {1, "A/D/H/chi", "base-deleted", NO_COPY_FROM}, + {0, "A/D/H/omega", "normal", 1, "A/D/H/omega"}, + {1, "A/D/H/omega", "base-deleted", NO_COPY_FROM}, + {0, "A/D/H/psi", "normal", 1, "A/D/H/psi"}, + {1, "A/D/H/psi", "base-deleted", NO_COPY_FROM}, + {0, "A/D/gamma", "normal", 1, "A/D/gamma"}, + {1, "A/D/gamma", "base-deleted", NO_COPY_FROM}, + {0, "A/mu", "normal", 1, "A/mu"}, + {1, "A/mu", "base-deleted", NO_COPY_FROM}, + {1, "A_moved", "normal", 1, "A", MOVED_HERE}, + {1, "A_moved/B", "normal", 1, "A/B", MOVED_HERE}, + {2, "A_moved/B", "base-deleted", NO_COPY_FROM}, + {2, "A_moved/B/E", "base-deleted", NO_COPY_FROM}, + {1, "A_moved/B/E", "normal", 1, "A/B/E", MOVED_HERE}, + {1, "A_moved/B/E/alpha", "normal", 1, "A/B/E/alpha", MOVED_HERE}, + {2, "A_moved/B/E/alpha", "base-deleted", NO_COPY_FROM}, + {1, "A_moved/B/E/beta", "normal", 1, "A/B/E/beta", MOVED_HERE}, + {2, "A_moved/B/E/beta", "base-deleted", NO_COPY_FROM}, + {1, "A_moved/B/F", "normal", 1, "A/B/F", MOVED_HERE}, + {2, "A_moved/B/F", "base-deleted", NO_COPY_FROM}, + {1, "A_moved/B/lambda", "normal", 1, "A/B/lambda", MOVED_HERE}, + {2, "A_moved/B/lambda", "base-deleted", NO_COPY_FROM, "A_moved/Z/lambda"}, + {1, "A_moved/C", "normal", 1, "A/C", MOVED_HERE}, + {1, "A_moved/D", "normal", 1, "A/D", MOVED_HERE}, + {1, "A_moved/D/G", "normal", 1, "A/D/G", MOVED_HERE}, + {1, "A_moved/D/G/pi", "normal", 1, "A/D/G/pi", MOVED_HERE}, + {1, "A_moved/D/G/rho", "normal", 1, "A/D/G/rho", MOVED_HERE}, + {1, "A_moved/D/G/tau", "normal", 1, "A/D/G/tau", MOVED_HERE}, + {1, "A_moved/D/H", "normal", 1, "A/D/H", MOVED_HERE}, + {1, "A_moved/D/H/chi", "normal", 1, "A/D/H/chi", MOVED_HERE}, + {1, "A_moved/D/H/omega", "normal", 1, "A/D/H/omega", MOVED_HERE}, + {1, "A_moved/D/H/psi", "normal", 1, "A/D/H/psi", MOVED_HERE}, + {1, "A_moved/D/gamma", "normal", 1, "A/D/gamma", MOVED_HERE}, + {2, "A_moved/Z", "normal", NO_COPY_FROM}, + {3, "A_moved/Z/lambda", "normal", 1, "A/B/lambda", MOVED_HERE}, + {1, "A_moved/mu", "normal", 1, "A/mu", MOVED_HERE}, + {0, "iota", "normal", 1, "iota"}, + + {0} + }; + + SVN_ERR(check_db_rows(&b, "", nodes)); + } + + return SVN_NO_ERROR; +} + /* ---------------------------------------------------------------------- */ /* The list of test functions */ @@ -9069,5 +9190,7 @@ struct svn_test_descriptor_t test_funcs[ "copy mixed-rev with mods"), SVN_TEST_OPTS_PASS(movedhere_extract_retract, "movedhere extract retract"), + SVN_TEST_OPTS_PASS(nested_move_delete, + "nested move delete"), SVN_TEST_NULL }; Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/libsvn_wc/wc-queries-test.c Thu Apr 16 03:46:20 2015 @@ -111,6 +111,7 @@ static const int slow_statements[] = /* Slow, but just if foreign keys are enabled: * STMT_DELETE_PRISTINE_IF_UNREFERENCED, */ + STMT_HAVE_STAT1_TABLE, /* Queries sqlite_master which has no index */ -1 /* final marker */ }; Modified: subversion/branches/javahl-1.8-extensions/subversion/tests/svn_test.h URL: http://svn.apache.org/viewvc/subversion/branches/javahl-1.8-extensions/subversion/tests/svn_test.h?rev=1673997&r1=1673996&r2=1673997&view=diff ============================================================================== --- subversion/branches/javahl-1.8-extensions/subversion/tests/svn_test.h (original) +++ subversion/branches/javahl-1.8-extensions/subversion/tests/svn_test.h Thu Apr 16 03:46:20 2015 @@ -73,6 +73,23 @@ extern "C" { svn_error_clear(err__); \ } while (0) +/** Handy macro for testing that an svn_error_t is returned. + * The result must be neither SVN_NO_ERROR nor SVN_ERR_ASSERTION_FAIL. + * The error returned by EXPR will be cleared. + */ +#define SVN_TEST__ASSERT_ANY_ERROR(expr) \ + do { \ + svn_error_t *err__ = (expr); \ + if (err__ == SVN_NO_ERROR || err__->apr_err == SVN_ERR_ASSERTION_FAIL)\ + return err__ ? svn_error_createf(SVN_ERR_TEST_FAILED, err__, \ + "Expected error but got %s", \ + "SVN_ERR_ASSERTION_FAIL") \ + : svn_error_createf(SVN_ERR_TEST_FAILED, err__, \ + "Expected error but got %s", \ + "SVN_NO_ERROR"); \ + svn_error_clear(err__); \ + } while (0) + /** Handy macro for testing string equality. * * EXPR and/or EXPECTED_EXPR may be NULL which compares equal to NULL and