You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/11/27 12:52:46 UTC

svn commit: r1546002 [34/39] - in /subversion/branches/verify-keep-going: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ build/generator/templates/ build/win32/ contrib/client-side/emacs/ contrib/server-side/ contrib/server-side/svnc...

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/diff-diff3-test.c Wed Nov 27 11:52:35 2013
@@ -137,9 +137,9 @@ make_file(const char *filename,
    "merge-FILENAME1-FILENAME2-FILENAME3".  The conflict style STYLE is
    used. */
 static svn_error_t *
-three_way_merge(const char *filename1,
-                const char *filename2,
-                const char *filename3,
+three_way_merge(const char *base_filename1,
+                const char *base_filename2,
+                const char *base_filename3,
                 const char *contents1,
                 const char *contents2,
                 const char *contents3,
@@ -152,8 +152,12 @@ three_way_merge(const char *filename1,
   apr_file_t *output;
   svn_stream_t *ostream;
   svn_stringbuf_t *actual;
-  char *merge_name = apr_psprintf(pool, "merge-%s-%s-%s",
-                                  filename1, filename2, filename3);
+  char *merge_name = apr_psprintf(
+      pool, "merge-%s-%s-%s", base_filename1, base_filename2, base_filename3);
+
+  const char *filename1 = svn_test_data_path(base_filename1, pool);
+  const char *filename2 = svn_test_data_path(base_filename2, pool);
+  const char *filename3 = svn_test_data_path(base_filename3, pool);
 
   /* We have an EXPECTED string we can match, because we don't support
      any other combinations (yet) than the ones above. */
@@ -171,9 +175,9 @@ three_way_merge(const char *filename1,
 
   SVN_ERR(svn_diff_mem_string_output_merge2
           (ostream, diff, original, modified, latest,
-           apr_psprintf(pool, "||||||| %s", filename1),
-           apr_psprintf(pool, "<<<<<<< %s", filename2),
-           apr_psprintf(pool, ">>>>>>> %s", filename3),
+           apr_psprintf(pool, "||||||| %s", base_filename1),
+           apr_psprintf(pool, "<<<<<<< %s", base_filename2),
+           apr_psprintf(pool, ">>>>>>> %s", base_filename3),
            NULL, /* separator */
            style, pool));
 
@@ -195,17 +199,20 @@ three_way_merge(const char *filename1,
                            APR_OS_DEFAULT, pool));
 
   ostream = svn_stream_from_aprfile2(output, FALSE, pool);
-  SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
-                                      filename1, filename2, filename3,
-                                      NULL, NULL, NULL, NULL,
-                                      style,
-                                      pool));
+  SVN_ERR(svn_diff_file_output_merge2(
+              ostream, diff,
+              filename1, filename2, filename3,
+              apr_psprintf(pool, "||||||| %s", base_filename1),
+              apr_psprintf(pool, "<<<<<<< %s", base_filename2),
+              apr_psprintf(pool, ">>>>>>> %s", base_filename3),
+              NULL, /* separator */
+              style, pool));
   SVN_ERR(svn_stream_close(ostream));
   SVN_ERR(svn_stringbuf_from_file2(&actual, merge_name, pool));
   if (strcmp(actual->data, expected))
     return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                              "failed merging diff '%s' to '%s' into '%s'",
-                             filename1, filename2, filename3);
+                             base_filename1, base_filename2, base_filename3);
 
   SVN_ERR(svn_io_remove_file2(filename1, TRUE, pool));
   if (strcmp(filename1, filename2))
@@ -227,8 +234,8 @@ three_way_merge(const char *filename1,
    preserved otherwise.  If the diff fails the diff output will be in
    a file called "diff-FILENAME1-FILENAME2".  */
 static svn_error_t *
-two_way_diff(const char *filename1,
-             const char *filename2,
+two_way_diff(const char *base_filename1,
+             const char *base_filename2,
              const char *contents1,
              const char *contents2,
              const char *expected,
@@ -239,7 +246,13 @@ two_way_diff(const char *filename1,
   apr_file_t *output;
   svn_stream_t *ostream;
   svn_stringbuf_t *actual;
-  char *diff_name = apr_psprintf(pool, "diff-%s-%s", filename1, filename2);
+  char *diff_name = (char *)apr_pstrdup(
+      pool, svn_test_data_path(
+          apr_psprintf(pool, "diff-%s-%s", base_filename1, base_filename2),
+          pool));
+
+  const char *filename1 = svn_test_data_path(base_filename1, pool);
+  const char *filename2 = svn_test_data_path(base_filename2, pool);
 
   /* Some of the tests have lots of lines, although not much data as
      the lines are short, and the in-memory diffs allocate a lot of
@@ -261,7 +274,7 @@ two_way_diff(const char *filename1,
   ostream = svn_stream_from_stringbuf(actual, pool);
 
   SVN_ERR(svn_diff_mem_string_output_unified(ostream, diff,
-                                             filename1, filename2,
+                                             base_filename1, base_filename2,
                                              SVN_APR_LOCALE_CHARSET,
                                              original, modified, subpool));
   svn_pool_clear(subpool);
@@ -286,7 +299,7 @@ two_way_diff(const char *filename1,
   ostream = svn_stream_from_aprfile2(output, FALSE, pool);
   SVN_ERR(svn_diff_file_output_unified2(ostream, diff,
                                         filename1, filename2,
-                                        filename1, filename2,
+                                        base_filename1, base_filename2,
                                         SVN_APR_LOCALE_CHARSET, pool));
   SVN_ERR(svn_stream_close(ostream));
 
@@ -312,16 +325,16 @@ two_way_diff(const char *filename1,
       return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                                "failed comparing '%s' and '%s'"
                                " (memory and file results are different)",
-                               filename1, filename2);
+                               base_filename1, base_filename2);
     }
 
   /* May as well do the trivial merges while we are here */
-  SVN_ERR(three_way_merge(filename1, filename2, filename1,
+  SVN_ERR(three_way_merge(base_filename1, base_filename2, base_filename1,
                           contents1, contents2, contents1, contents2, NULL,
                           svn_diff_conflict_display_modified_latest,
                           subpool));
   svn_pool_clear(subpool);
-  SVN_ERR(three_way_merge(filename2, filename1, filename2,
+  SVN_ERR(three_way_merge(base_filename2, base_filename1, base_filename2,
                           contents2, contents1, contents2, contents1, NULL,
                           svn_diff_conflict_display_modified_latest,
                           subpool));
@@ -2141,14 +2154,20 @@ test_diff4(apr_pool_t *pool)
     "  /* line plus-four of context */\n"
     "  /* line plus-five of context */\n"
     "}\n");
-  SVN_ERR(make_file("B2", B2.data, pool));
-  SVN_ERR(make_file("T1", T1.data, pool));
-  SVN_ERR(make_file("T2", T2.data, pool));
-  SVN_ERR(make_file("T3", T3.data, pool));
+
+  const char *B2_path = svn_test_data_path("B2", pool);
+  const char *T1_path = svn_test_data_path("T1", pool);
+  const char *T2_path = svn_test_data_path("T2", pool);
+  const char *T3_path = svn_test_data_path("T3", pool);
+
+  SVN_ERR(make_file(B2_path, B2.data, pool));
+  SVN_ERR(make_file(T1_path, T1.data, pool));
+  SVN_ERR(make_file(T2_path, T2.data, pool));
+  SVN_ERR(make_file(T3_path, T3.data, pool));
 
   /* Usage: tools/diff/diff4 <mine> <older> <yours> <ancestor> */
   /* tools/diff/diff4 B2 T2 T3 T1 > B2new */
-  SVN_ERR(svn_diff_file_diff4(&diff, "T2", "B2", "T3", "T1", pool));
+  SVN_ERR(svn_diff_file_diff4(&diff, T2_path, B2_path, T3_path, T1_path, pool));
 
   /* Sanity. */
   SVN_TEST_ASSERT(! svn_diff_contains_conflicts(diff));
@@ -2161,7 +2180,7 @@ test_diff4(apr_pool_t *pool)
              svn_stringbuf_create_ensure(417, pool), /* 417 == wc -c < B2new */
              pool);
   SVN_ERR(svn_diff_file_output_merge(actual, diff,
-                                     "T2", "B2", "T3",
+                                     T2_path, B2_path, T3_path,
                                      NULL, NULL, NULL, NULL,
                                      FALSE,
                                      FALSE,
@@ -2179,12 +2198,16 @@ random_trivial_merge(apr_pool_t *pool)
   int i;
   apr_pool_t *subpool = svn_pool_create(pool);
 
+  const char *base_filename1 = "trivial1";
+  const char *base_filename2 = "trivial2";
+
+  const char *filename1 = svn_test_data_path(base_filename1, pool);
+  const char *filename2 = svn_test_data_path(base_filename2, pool);
+
   seed_val();
 
   for (i = 0; i < 5; ++i)
     {
-      const char *filename1 = "trivial1";
-      const char *filename2 = "trivial2";
       int min_lines = 1000;
       int max_lines = 1100;
       int var_lines = 50;
@@ -2201,12 +2224,12 @@ random_trivial_merge(apr_pool_t *pool)
       SVN_ERR(svn_stringbuf_from_file2(&contents1, filename1, subpool));
       SVN_ERR(svn_stringbuf_from_file2(&contents2, filename2, subpool));
 
-      SVN_ERR(three_way_merge(filename1, filename2, filename1,
+      SVN_ERR(three_way_merge(base_filename1, base_filename2, base_filename1,
                               contents1->data, contents2->data,
                               contents1->data, contents2->data, NULL,
                               svn_diff_conflict_display_modified_latest,
                               subpool));
-      SVN_ERR(three_way_merge(filename2, filename1, filename2,
+      SVN_ERR(three_way_merge(base_filename2, base_filename1, base_filename2,
                               contents2->data, contents1->data,
                               contents2->data, contents1->data, NULL,
                               svn_diff_conflict_display_modified_latest,
@@ -2231,14 +2254,20 @@ random_three_way_merge(apr_pool_t *pool)
   int i;
   apr_pool_t *subpool = svn_pool_create(pool);
 
+  const char *base_filename1 = "original";
+  const char *base_filename2 = "modified1";
+  const char *base_filename3 = "modified2";
+  const char *base_filename4 = "combined";
+
+  const char *filename1 = svn_test_data_path(base_filename1, pool);
+  const char *filename2 = svn_test_data_path(base_filename2, pool);
+  const char *filename3 = svn_test_data_path(base_filename3, pool);
+  const char *filename4 = svn_test_data_path(base_filename4, pool);
+
   seed_val();
 
   for (i = 0; i < 20; ++i)
     {
-      const char *filename1 = "original";
-      const char *filename2 = "modified1";
-      const char *filename3 = "modified2";
-      const char *filename4 = "combined";
       svn_stringbuf_t *original, *modified1, *modified2, *combined;
       /* Pick NUM_LINES large enough so that the 'strip identical suffix' code
          gets triggered with reasonable probability.  (Currently it ignores
@@ -2272,12 +2301,12 @@ random_three_way_merge(apr_pool_t *pool)
       SVN_ERR(svn_stringbuf_from_file2(&modified2, filename3, pool));
       SVN_ERR(svn_stringbuf_from_file2(&combined, filename4, pool));
 
-      SVN_ERR(three_way_merge(filename1, filename2, filename3,
+      SVN_ERR(three_way_merge(base_filename1, base_filename2, base_filename3,
                               original->data, modified1->data,
                               modified2->data, combined->data, NULL,
                               svn_diff_conflict_display_modified_latest,
                               subpool));
-      SVN_ERR(three_way_merge(filename1, filename3, filename2,
+      SVN_ERR(three_way_merge(base_filename1, base_filename3, base_filename2,
                               original->data, modified2->data,
                               modified1->data, combined->data, NULL,
                               svn_diff_conflict_display_modified_latest,
@@ -2303,14 +2332,20 @@ merge_with_part_already_present(apr_pool
   int i;
   apr_pool_t *subpool = svn_pool_create(pool);
 
+  const char *base_filename1 = "pap-original";
+  const char *base_filename2 = "pap-modified1";
+  const char *base_filename3 = "pap-modified2";
+  const char *base_filename4 = "pap-combined";
+
+  const char *filename1 = svn_test_data_path(base_filename1, pool);
+  const char *filename2 = svn_test_data_path(base_filename2, pool);
+  const char *filename3 = svn_test_data_path(base_filename3, pool);
+  const char *filename4 = svn_test_data_path(base_filename4, pool);
+
   seed_val();
 
   for (i = 0; i < 20; ++i)
     {
-      const char *filename1 = "pap-original";
-      const char *filename2 = "pap-modified1";
-      const char *filename3 = "pap-modified2";
-      const char *filename4 = "pap-combined";
       svn_stringbuf_t *original, *modified1, *modified2, *combined;
       int num_lines = 200, num_src = 20, num_dst = 20;
       svn_boolean_t *lines = apr_pcalloc(subpool, sizeof(*lines) * num_lines);
@@ -2345,12 +2380,12 @@ merge_with_part_already_present(apr_pool
       SVN_ERR(svn_stringbuf_from_file2(&modified2, filename3, pool));
       SVN_ERR(svn_stringbuf_from_file2(&combined, filename4, pool));
 
-      SVN_ERR(three_way_merge(filename1, filename2, filename3,
+      SVN_ERR(three_way_merge(base_filename1, base_filename2, base_filename3,
                               original->data, modified1->data,
                               modified2->data, combined->data, NULL,
                               svn_diff_conflict_display_modified_latest,
                               subpool));
-      SVN_ERR(three_way_merge(filename1, filename3, filename2,
+      SVN_ERR(three_way_merge(base_filename1, base_filename3, base_filename2,
                               original->data, modified2->data,
                               modified1->data, combined->data, NULL,
                               svn_diff_conflict_display_modified_latest,
@@ -2915,6 +2950,9 @@ two_way_issue_3362_v2(apr_pool_t *pool)
 
 /* ========================================================================== */
 
+
+int svn_test_max_threads = 4;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/parse-diff-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/parse-diff-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/parse-diff-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_diff/parse-diff-test.c Wed Nov 27 11:52:35 2013
@@ -961,6 +961,9 @@ test_parse_unidiff_lacking_trailing_eol(
 
 /* ========================================================================== */
 
+
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/fs-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/fs-test.c Wed Nov 27 11:52:35 2013
@@ -27,6 +27,7 @@
 
 #include "../svn_test.h"
 
+#include "svn_private_config.h"
 #include "svn_hash.h"
 #include "svn_pools.h"
 #include "svn_time.h"
@@ -1019,7 +1020,7 @@ static svn_error_t *
 check_entry_present(svn_fs_root_t *root, const char *path,
                     const char *name, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = FALSE;
   SVN_ERR(check_entry(root, path, name, &present, pool));
 
   if (! present)
@@ -1036,7 +1037,7 @@ static svn_error_t *
 check_entry_absent(svn_fs_root_t *root, const char *path,
                    const char *name, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = TRUE;
   SVN_ERR(check_entry(root, path, name, &present, pool));
 
   if (present)
@@ -5048,15 +5049,27 @@ test_fs_info_format(const svn_test_opts_
   int fs_format;
   svn_version_t *supports_version;
   svn_version_t v1_5_0 = {1, 5, 0, ""};
+  svn_version_t v1_9_0 = {1, 9, 0, ""};
   svn_test_opts_t opts2;
+  svn_boolean_t is_fsx = strcmp(opts->fs_type, "fsx") == 0;
 
   opts2 = *opts;
-  opts2.server_minor_version = 5;
+  opts2.server_minor_version = is_fsx ? 9 : 5;
 
   SVN_ERR(svn_test__create_fs(&fs, "test-fs-format-info", &opts2, pool));
   SVN_ERR(svn_fs_info_format(&fs_format, &supports_version, fs, pool, pool));
-  SVN_TEST_ASSERT(fs_format == 3); /* happens to be the same for FSFS and BDB */
-  SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_5_0));
+
+  if (is_fsx)
+    {
+      SVN_TEST_ASSERT(fs_format == 1);
+      SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_9_0));
+    }
+  else
+    {
+       /* happens to be the same for FSFS and BDB */
+      SVN_TEST_ASSERT(fs_format == 3);
+      SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_5_0));
+    }
 
   return SVN_NO_ERROR;
 }
@@ -5065,6 +5078,8 @@ test_fs_info_format(const svn_test_opts_
 
 /* The test table.  */
 
+int svn_test_max_threads = 8;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
@@ -5080,6 +5095,12 @@ struct svn_test_descriptor_t test_funcs[
                        "check that transaction names are not reused"),
     SVN_TEST_OPTS_PASS(write_and_read_file,
                        "write and read a file's contents"),
+    SVN_TEST_OPTS_PASS(almostmedium_file_integrity,
+                       "create and modify almostmedium file"),
+    SVN_TEST_OPTS_PASS(medium_file_integrity,
+                       "create and modify medium file"),
+    SVN_TEST_OPTS_PASS(large_file_integrity,
+                       "create and modify large file"),
     SVN_TEST_OPTS_PASS(create_mini_tree_transaction,
                        "test basic file and subdirectory creation"),
     SVN_TEST_OPTS_PASS(create_greek_tree_transaction,
@@ -5111,12 +5132,6 @@ struct svn_test_descriptor_t test_funcs[
                        "check old revisions"),
     SVN_TEST_OPTS_PASS(check_all_revisions,
                        "after each commit, check all revisions"),
-    SVN_TEST_OPTS_PASS(almostmedium_file_integrity,
-                       "create and modify almostmedium file"),
-    SVN_TEST_OPTS_PASS(medium_file_integrity,
-                       "create and modify medium file"),
-    SVN_TEST_OPTS_PASS(large_file_integrity,
-                       "create and modify large file"),
     SVN_TEST_OPTS_PASS(check_root_revision,
                        "ensure accurate storage of root node"),
     SVN_TEST_OPTS_PASS(test_node_created_rev,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/locks-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/locks-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/locks-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_fs/locks-test.c Wed Nov 27 11:52:35 2013
@@ -608,9 +608,9 @@ lock_expiration(const svn_test_opts_t *o
   SVN_ERR(svn_fs_create_access(&access, "bubba", pool));
   SVN_ERR(svn_fs_set_access(fs, access));
 
-  /* Lock /A/D/G/rho, with an expiration 3 seconds from now. */
+  /* Lock /A/D/G/rho, with an expiration 2 seconds from now. */
   SVN_ERR(svn_fs_lock(&mylock, fs, "/A/D/G/rho", NULL, "", 0,
-                      apr_time_now() + apr_time_from_sec(3),
+                      apr_time_now() + apr_time_from_sec(2),
                       SVN_INVALID_REVNUM, FALSE, pool));
 
   /* Become nobody. */
@@ -640,9 +640,9 @@ lock_expiration(const svn_test_opts_t *o
                                        num_expected_paths, pool));
   }
 
-  /* Sleep 5 seconds, so the lock auto-expires.  Anonymous commit
+  /* Sleep 2 seconds, so the lock auto-expires.  Anonymous commit
      should then succeed. */
-  apr_sleep(apr_time_from_sec(5));
+  apr_sleep(apr_time_from_sec(3));
 
   /* Verify that the lock auto-expired even in the recursive case. */
   {
@@ -792,9 +792,13 @@ lock_out_of_date(const svn_test_opts_t *
 
 /* The test table.  */
 
+int svn_test_max_threads = 2;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
+    SVN_TEST_OPTS_PASS(lock_expiration,
+                       "test that locks can expire"),
     SVN_TEST_OPTS_PASS(lock_only,
                        "lock only"),
     SVN_TEST_OPTS_PASS(lookup_lock_by_path,
@@ -811,8 +815,6 @@ struct svn_test_descriptor_t test_funcs[
                        "test that locking is enforced in final commit step"),
     SVN_TEST_OPTS_PASS(lock_dir_propchange,
                        "dir propchange can be committed with locked child"),
-    SVN_TEST_OPTS_PASS(lock_expiration,
-                       "test that locks can expire"),
     SVN_TEST_OPTS_PASS(lock_break_steal_refresh,
                        "breaking, stealing, refreshing a lock"),
     SVN_TEST_OPTS_PASS(lock_out_of_date,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/changes-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/changes-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/changes-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/changes-test.c Wed Nov 27 11:52:35 2013
@@ -193,7 +193,7 @@ changes_fetch_raw(const svn_test_opts_t 
   struct changes_args args;
 
   /* Create a new fs and repos */
-  SVN_ERR(svn_test__create_bdb_fs(&fs, "test-repo-changes-fetch", opts,
+  SVN_ERR(svn_test__create_bdb_fs(&fs, "test-repo-changes-fetch-raw", opts,
                                   pool));
 
   /* First, verify that we can request changes for an arbitrary key
@@ -903,6 +903,8 @@ changes_bad_sequences(const svn_test_opt
 
 /* The test table.  */
 
+int svn_test_max_threads = 4;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/fs-base-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/fs-base-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/fs-base-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/fs-base-test.c Wed Nov 27 11:52:35 2013
@@ -124,7 +124,7 @@ static svn_error_t *
 check_entry_present(svn_fs_root_t *root, const char *path,
                     const char *name, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = FALSE;
   SVN_ERR(check_entry(root, path, name, &present, pool));
 
   if (! present)
@@ -141,7 +141,7 @@ static svn_error_t *
 check_entry_absent(svn_fs_root_t *root, const char *path,
                    const char *name, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = TRUE;
   SVN_ERR(check_entry(root, path, name, &present, pool));
 
   if (present)
@@ -213,7 +213,7 @@ check_id(svn_fs_t *fs, const svn_fs_id_t
 static svn_error_t *
 check_id_present(svn_fs_t *fs, const svn_fs_id_t *id, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = FALSE;
   SVN_ERR(check_id(fs, id, &present, pool));
 
   if (! present)
@@ -233,7 +233,7 @@ check_id_present(svn_fs_t *fs, const svn
 static svn_error_t *
 check_id_absent(svn_fs_t *fs, const svn_fs_id_t *id, apr_pool_t *pool)
 {
-  svn_boolean_t present;
+  svn_boolean_t present = TRUE;
   SVN_ERR(check_id(fs, id, &present, pool));
 
   if (present)
@@ -1519,6 +1519,8 @@ key_test(apr_pool_t *pool)
 
 /* The test table.  */
 
+int svn_test_max_threads = 2;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/strings-reps-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/strings-reps-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/strings-reps-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_base/strings-reps-test.c Wed Nov 27 11:52:35 2013
@@ -612,7 +612,7 @@ write_null_string(const svn_test_opts_t 
 
   /* Create a new fs and repos */
   SVN_ERR(svn_test__create_bdb_fs
-          (&fs, "test-repo-test-strings", opts,
+          (&fs, "test-repo-write-null-string", opts,
            pool));
 
   args.fs = fs;
@@ -732,6 +732,8 @@ copy_string(const svn_test_opts_t *opts,
 
 /* The test table.  */
 
+int svn_test_max_threads = 3;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Propchange: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_fs/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Nov 27 11:52:35 2013
@@ -3,10 +3,11 @@ Release
 .libs
 test-repo-*
 fs-pack-test
+fs-fs-pack-test
 test-get-set-revprop-packed-fs
+get_set_multiple_huge_revprops_packed_fs
 *.o
 *.lo
 *~
 .*~
 *.exe
-

Propchange: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Nov 27 11:52:35 2013
@@ -0,0 +1,12 @@
+Debug
+Release
+.libs
+test-repo-*
+fs-x-pack-test
+string-table-test
+test-get-set-revprop-packed-fs
+*.o
+*.lo
+*~
+.*~
+*.exe

Propchange: subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Nov 27 11:52:35 2013
@@ -0,0 +1,81 @@
+/subversion/branches/1.5.x-r30215/subversion/tests/libsvn_fs_x:870312
+/subversion/branches/1.7.x-fs-verify/subversion/tests/libsvn_fs_x:1146708,1161180
+/subversion/branches/10Gb/subversion/tests/libsvn_fs_x: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_fs_x:965046-1000689
+/subversion/branches/auto-props-sdc/subversion/tests/libsvn_fs_x:1384106-1401643
+/subversion/branches/bdb-reverse-deltas/subversion/tests/libsvn_fs_x:872050-872529
+/subversion/branches/cache-server/subversion/tests/libsvn_fs_x:1458643-1476567
+/subversion/branches/diff-callbacks3/subversion/tests/libsvn_fs_x:870059-870761
+/subversion/branches/diff-optimizations/subversion/tests/libsvn_fs_x:1031270-1037352
+/subversion/branches/diff-optimizations-bytes/subversion/tests/libsvn_fs_x:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default/subversion/tests/libsvn_fs_x:870728-871118
+/subversion/branches/double-delete/subversion/tests/libsvn_fs_x:870511-872970
+/subversion/branches/ev2-export/subversion/tests/libsvn_fs_x:1325914,1332738,1413107
+/subversion/branches/explore-wc/subversion/tests/libsvn_fs_x: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_fs_x:871779-873302
+/subversion/branches/fs-rep-sharing/subversion/tests/libsvn_fs_x:869036-873803
+/subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_x:1426304,1430673,1433848,1438408,1438982,1441129,1442051,1442068,1442504,1442910,1443171,1443803,1444690,1444693,1444695,1445040,1445080,1446103,1451129,1453590,1454307,1460579,1461851,1461865,1462837,1462904,1463120,1467362,1467382,1469487,1471208,1477166,1478055,1481447,1489817,1489949,1490673-1490674,1491784,1493042,1498029,1498103,1498155,1500054,1507729-1507731,1507735-1507736
+/subversion/branches/fsfs-improvements/subversion/tests/libsvn_fs_x:1499981-1517476
+/subversion/branches/fsfs-pack/subversion/tests/libsvn_fs_x:873717-874575
+/subversion/branches/fsx/subversion/tests/libsvn_fs_x:1507845-1509914
+/subversion/branches/gnome-keyring/subversion/tests/libsvn_fs_x:870558-871410
+/subversion/branches/gpg-agent-password-store/subversion/tests/libsvn_fs_x:1005036-1150766
+/subversion/branches/gtest_addition/subversion/tests/libsvn_fs_x:1452117-1502138
+/subversion/branches/http-protocol-v2/subversion/tests/libsvn_fs_x:874395-876041
+/subversion/branches/in-memory-cache/subversion/tests/libsvn_fs_x:869829-871452
+/subversion/branches/in-repo-authz/subversion/tests/libsvn_fs_x:1414342-1424779
+/subversion/branches/inheritable-props/subversion/tests/libsvn_fs_x:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization/subversion/tests/libsvn_fs_x:1068724-1068739
+/subversion/branches/integrate-cache-membuffer/subversion/tests/libsvn_fs_x:998649-998852
+/subversion/branches/integrate-compression-level/subversion/tests/libsvn_fs_x:1068651-1072287
+/subversion/branches/integrate-io-improvements/subversion/tests/libsvn_fs_x:1068684-1072297
+/subversion/branches/integrate-is-cachable/subversion/tests/libsvn_fs_x:1072568-1074082
+/subversion/branches/integrate-partial-getter/subversion/tests/libsvn_fs_x:1072558-1076552
+/subversion/branches/integrate-readline-speedup/subversion/tests/libsvn_fs_x:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions/subversion/tests/libsvn_fs_x:1068695-1072516
+/subversion/branches/integrate-string-improvements/subversion/tests/libsvn_fs_x:1068251-1190617
+/subversion/branches/integrate-txdelta-caching/subversion/tests/libsvn_fs_x:1072541-1078213
+/subversion/branches/issue-2779-dev/subversion/tests/libsvn_fs_x:965496-984198
+/subversion/branches/issue-2843-dev/subversion/tests/libsvn_fs_x:871432-874179
+/subversion/branches/issue-3000/subversion/tests/libsvn_fs_x:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees/subversion/tests/libsvn_fs_x:873375-874084
+/subversion/branches/issue-3148-dev/subversion/tests/libsvn_fs_x:875193-875204
+/subversion/branches/issue-3220-dev/subversion/tests/libsvn_fs_x:872210-872226
+/subversion/branches/issue-3242-dev/subversion/tests/libsvn_fs_x:879653-896436
+/subversion/branches/issue-3334-dirs/subversion/tests/libsvn_fs_x:875156-875867
+/subversion/branches/issue-3975/subversion/tests/libsvn_fs_x:1152931-1160746
+/subversion/branches/issue-4116-dev/subversion/tests/libsvn_fs_x:1424719-1425040
+/subversion/branches/issue-4194-dev/subversion/tests/libsvn_fs_x:1410507-1414880
+/subversion/branches/javahl-ra/subversion/tests/libsvn_fs_x:991978-1494640
+/subversion/branches/kwallet/subversion/tests/libsvn_fs_x:870785-871314
+/subversion/branches/log-g-performance/subversion/tests/libsvn_fs_x:870941-871032
+/subversion/branches/merge-skips-obstructions/subversion/tests/libsvn_fs_x:874525-874615
+/subversion/branches/multi-layer-moves/subversion/tests/libsvn_fs_x:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client/subversion/tests/libsvn_fs_x:870276,870376
+/subversion/branches/node_pool/subversion/tests/libsvn_fs_x:1304828-1305388
+/subversion/branches/performance/subversion/tests/libsvn_fs_x: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-10293
 36,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_fs_x:956579-1033052
+/subversion/branches/ra_serf-digest-authn/subversion/tests/libsvn_fs_x:875693-876404
+/subversion/branches/reintegrate-improvements/subversion/tests/libsvn_fs_x:873853-874164
+/subversion/branches/revprop-cache/subversion/tests/libsvn_fs_x:1298521-1326293
+/subversion/branches/revprop-packing/subversion/tests/libsvn_fs_x:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo/subversion/tests/libsvn_fs_x:876734-878766
+/subversion/branches/svn-mergeinfo-enhancements/subversion/tests/libsvn_fs_x:870119-870195,870197-870288
+/subversion/branches/svn-patch-improvements/subversion/tests/libsvn_fs_x:918519-934609
+/subversion/branches/svn_mutex/subversion/tests/libsvn_fs_x:1141683-1182099
+/subversion/branches/svnpatch-diff/subversion/tests/libsvn_fs_x:865738-876477
+/subversion/branches/svnraisetc/subversion/tests/libsvn_fs_x:874709-875149
+/subversion/branches/svnserve-logging/subversion/tests/libsvn_fs_x:869828-870893
+/subversion/branches/tc-issue-3334/subversion/tests/libsvn_fs_x:874697-874773
+/subversion/branches/tc-merge-notify/subversion/tests/libsvn_fs_x:874017-874062
+/subversion/branches/tc-resolve/subversion/tests/libsvn_fs_x:874191-874239
+/subversion/branches/tc_url_rev/subversion/tests/libsvn_fs_x:874351-874483
+/subversion/branches/tree-conflicts/subversion/tests/libsvn_fs_x:868291-873154
+/subversion/branches/tree-conflicts-notify/subversion/tests/libsvn_fs_x:873926-874008
+/subversion/branches/tristate-chunked-request/subversion/tests/libsvn_fs_x:1502394-1502681
+/subversion/branches/tweak-build-take-two/subversion/tests/libsvn_fs_x:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls/subversion/tests/libsvn_fs_x:1060426-1064427
+/subversion/branches/verify-at-commit/subversion/tests/libsvn_fs_x:1462039-1462408
+/subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_x:1439280-1492639
+/subversion/branches/wc-collate-path/subversion/tests/libsvn_fs_x:1402685-1480384
+/subversion/trunk/subversion/tests/libsvn_fs_x:1414756-1545994

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_ra/ra-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_ra/ra-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_ra/ra-test.c Wed Nov 27 11:52:35 2013
@@ -25,17 +25,23 @@
 
 #include <apr_general.h>
 #include <apr_pools.h>
+#include <apr_file_io.h>
 
 #define SVN_DEPRECATED
 
 #include "svn_error.h"
 #include "svn_delta.h"
 #include "svn_ra.h"
+#include "svn_pools.h"
+#include "svn_cmdline.h"
+#include "svn_dirent_uri.h"
 
 #include "../svn_test.h"
 #include "../svn_test_fs.h"
 #include "../../libsvn_ra_local/ra_local.h"
 
+static const char tunnel_repos_name[] = "test-repo-tunnel";
+
 /*-------------------------------------------------------------------*/
 
 /** Helper routines. **/
@@ -58,7 +64,7 @@ make_and_open_local_repos(svn_ra_session
 
   SVN_ERR(svn_uri_get_file_url_from_dirent(&url, repos_name, pool));
 
-  SVN_ERR(svn_ra_open3(session, url, NULL, cbtable, NULL, NULL, pool));
+  SVN_ERR(svn_ra_open4(session, NULL, url, NULL, cbtable, NULL, NULL, pool));
 
   return SVN_NO_ERROR;
 }
@@ -88,6 +94,91 @@ commit_changes(svn_ra_session_t *session
   return SVN_NO_ERROR;
 }
 
+static svn_boolean_t last_tunnel_check;
+static int tunnel_open_count;
+static void *check_tunnel_baton;
+static void *open_tunnel_context;
+
+static svn_boolean_t
+check_tunnel(void *tunnel_baton, const char *tunnel_name)
+{
+  if (tunnel_baton != check_tunnel_baton)
+    abort();
+  last_tunnel_check = (0 == strcmp(tunnel_name, "test"));
+  return last_tunnel_check;
+}
+
+static svn_error_t *
+open_tunnel(apr_file_t **request, apr_file_t **response,
+            void **tunnel_context, void *tunnel_baton,
+            const char *tunnel_name, const char *user,
+            const char *hostname, int port,
+            apr_pool_t *pool)
+{
+  svn_node_kind_t kind;
+  apr_proc_t *proc;
+  apr_procattr_t *attr;
+  apr_status_t status;
+  const char *args[] = { "svnserve", "-t", "-r", ".", NULL };
+  const char *svnserve;
+
+  SVN_TEST_ASSERT(tunnel_baton == check_tunnel_baton);
+
+  SVN_ERR(svn_dirent_get_absolute(&svnserve, "../../svnserve/svnserve", pool));
+#ifdef WIN32
+  svnserve = apr_pstrcat(pool, svnserve, ".exe", SVN_VA_NULL);
+#endif
+  SVN_ERR(svn_io_check_path(svnserve, &kind, pool));
+  if (kind != svn_node_file)
+    return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
+                             "Could not find svnserve at %s",
+                             svn_dirent_local_style(svnserve, pool));
+
+  status = apr_procattr_create(&attr, pool);
+  if (status == APR_SUCCESS)
+    status = apr_procattr_io_set(attr, 1, 1, 0);
+  if (status == APR_SUCCESS)
+    status = apr_procattr_cmdtype_set(attr, APR_PROGRAM);
+  proc = apr_palloc(pool, sizeof(*proc));
+  if (status == APR_SUCCESS)
+    status = apr_proc_create(proc,
+                             svn_dirent_local_style(svnserve, pool),
+                             args, NULL, attr, pool);
+  if (status != APR_SUCCESS)
+    return svn_error_wrap_apr(status, "Could not run svnserve");
+#ifdef WIN32
+  apr_pool_note_subprocess(pool, proc, APR_KILL_NEVER);
+#else
+  apr_pool_note_subprocess(pool, proc, APR_KILL_ONLY_ONCE);
+#endif
+
+  /* APR pipe objects inherit by default.  But we don't want the
+   * tunnel agent's pipes held open by future child processes
+   * (such as other ra_svn sessions), so turn that off. */
+  apr_file_inherit_unset(proc->in);
+  apr_file_inherit_unset(proc->out);
+
+  *request = proc->in;
+  *response = proc->out;
+  open_tunnel_context = *tunnel_context = &kind;
+  ++tunnel_open_count;
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+close_tunnel(void *tunnel_context, void *tunnel_baton,
+             const char *tunnel_name, const char *user,
+             const char *hostname, int port)
+{
+  SVN_TEST_ASSERT(tunnel_context == open_tunnel_context);
+  SVN_TEST_ASSERT(tunnel_baton == check_tunnel_baton);
+  --tunnel_open_count;
+  return SVN_NO_ERROR;
+}
+
+
+
+
 /*-------------------------------------------------------------------*/
 
 /** The tests **/
@@ -151,12 +242,101 @@ location_segments_test(const svn_test_op
 }
 
 
+/* Test ra_svn tunnel callbacks. */
+
+static svn_error_t *
+check_tunnel_callback_test(const svn_test_opts_t *opts,
+                           apr_pool_t *pool)
+{
+  svn_ra_callbacks2_t *cbtable;
+  svn_ra_session_t *session;
+  svn_error_t *err;
+
+  SVN_ERR(svn_ra_create_callbacks(&cbtable, pool));
+  cbtable->check_tunnel_func = check_tunnel;
+  cbtable->open_tunnel_func = open_tunnel;
+  cbtable->close_tunnel_func = close_tunnel;
+  cbtable->tunnel_baton = check_tunnel_baton = &cbtable;
+  SVN_ERR(svn_cmdline_create_auth_baton(&cbtable->auth_baton,
+                                        TRUE  /* non_interactive */,
+                                        "jrandom", "rayjandom",
+                                        NULL,
+                                        TRUE  /* no_auth_cache */,
+                                        FALSE /* trust_server_cert */,
+                                        NULL, NULL, NULL, pool));
+
+  last_tunnel_check = TRUE;
+  open_tunnel_context = NULL;
+  err = svn_ra_open4(&session, NULL, "svn+foo://localhost/no-repo",
+                     NULL, cbtable, NULL, NULL, pool);
+  svn_error_clear(err);
+  SVN_TEST_ASSERT(err);
+  SVN_TEST_ASSERT(!last_tunnel_check);
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+tunel_callback_test(const svn_test_opts_t *opts,
+                    apr_pool_t *pool)
+{
+  apr_pool_t *connection_pool;
+  svn_repos_t *repos;
+  const char *url;
+  svn_ra_callbacks2_t *cbtable;
+  svn_ra_session_t *session;
+  svn_error_t *err;
+
+  SVN_ERR(svn_test__create_repos(&repos, tunnel_repos_name, opts, pool));
+
+  url = apr_pstrcat(pool, "svn+test://localhost/", tunnel_repos_name,
+                    SVN_VA_NULL);
+  SVN_ERR(svn_ra_create_callbacks(&cbtable, pool));
+  cbtable->check_tunnel_func = check_tunnel;
+  cbtable->open_tunnel_func = open_tunnel;
+  cbtable->close_tunnel_func = close_tunnel;
+  cbtable->tunnel_baton = check_tunnel_baton = &cbtable;
+  SVN_ERR(svn_cmdline_create_auth_baton(&cbtable->auth_baton,
+                                        TRUE  /* non_interactive */,
+                                        "jrandom", "rayjandom",
+                                        NULL,
+                                        TRUE  /* no_auth_cache */,
+                                        FALSE /* trust_server_cert */,
+                                        NULL, NULL, NULL, pool));
+
+  last_tunnel_check = FALSE;
+  open_tunnel_context = NULL;
+  tunnel_open_count = 0;
+  connection_pool = svn_pool_create(pool);
+  err = svn_ra_open4(&session, NULL, url, NULL, cbtable, NULL, NULL,
+                     connection_pool);
+  if (err && err->apr_err == SVN_ERR_TEST_FAILED)
+    {
+      svn_handle_error2(err, stderr, FALSE, "svn_tests: ");
+      svn_error_clear(err);
+      return SVN_NO_ERROR;
+    }
+  SVN_ERR(err);
+  SVN_TEST_ASSERT(last_tunnel_check);
+  SVN_TEST_ASSERT(tunnel_open_count > 0);
+  svn_pool_destroy(connection_pool);
+  SVN_TEST_ASSERT(tunnel_open_count == 0);
+  return SVN_NO_ERROR;
+}
+
+
 
 /* The test table.  */
+
+int svn_test_max_threads = 1;
+
 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(check_tunnel_callback_test,
+                       "test ra_svn tunnel callback check"),
+    SVN_TEST_OPTS_PASS(tunel_callback_test,
+                       "test ra_svn tunnel creation callbacks"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_ra_local/ra-local-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_ra_local/ra-local-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_ra_local/ra-local-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_ra_local/ra-local-test.c Wed Nov 27 11:52:35 2013
@@ -220,7 +220,7 @@ check_split_url(const char *repos_path,
 
   SVN_ERR(svn_uri_get_file_url_from_dirent(&root_url, repos_path, pool));
   if (in_repos_path)
-    url = apr_pstrcat(pool, root_url, in_repos_path, (char *)NULL);
+    url = apr_pstrcat(pool, root_url, in_repos_path, SVN_VA_NULL);
   else
     url = root_url;
 
@@ -279,6 +279,8 @@ split_url_test(const svn_test_opts_t *op
 #define HAS_UNC_HOST 0
 #endif
 
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Propchange: subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Nov 27 11:52:35 2013
@@ -3,6 +3,7 @@ Release
 .libs
 repos-test
 test-repo-*
+config-pool-test*
 md5args
 *.o
 *.lo

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/repos-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_repos/repos-test.c Wed Nov 27 11:52:35 2013
@@ -26,6 +26,7 @@
 
 #include "../svn_test.h"
 
+#include "svn_private_config.h"
 #include "svn_pools.h"
 #include "svn_error.h"
 #include "svn_fs.h"
@@ -36,6 +37,10 @@
 #include "svn_config.h"
 #include "svn_props.h"
 #include "svn_version.h"
+#include "private/svn_repos_private.h"
+
+/* be able to look into svn_config_t */
+#include "../../libsvn_subr/config_impl.h"
 
 #include "../svn_test_fs.h"
 
@@ -484,19 +489,19 @@ print_chrevs(const apr_array_header_t *r
           outstr = apr_pstrcat(pool,
                                outstr,
                                apr_psprintf(pool, "%ld ", rev),
-                               (char *)NULL);
+                               SVN_VA_NULL);
         }
     }
-  outstr = apr_pstrcat(pool, outstr, "}  Expected: { ", (char *)NULL);
+  outstr = apr_pstrcat(pool, outstr, "}  Expected: { ", SVN_VA_NULL);
   for (i = 0; i < num_revs_expected; i++)
     {
       outstr = apr_pstrcat(pool,
                            outstr,
                            apr_psprintf(pool, "%ld ",
                                         revs_expected[i]),
-                           (char *)NULL);
+                           SVN_VA_NULL);
     }
-  return apr_pstrcat(pool, outstr, "}", (char *)NULL);
+  return apr_pstrcat(pool, outstr, "}", SVN_VA_NULL);
 }
 
 
@@ -1454,8 +1459,8 @@ in_repo_authz(const svn_test_opts_t *opt
 
   repos_root = svn_repos_path(repos, pool);
   SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
-  authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
-  noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
+  authz_url = svn_path_url_add_component2(repos_url, "authz", pool);
+  noent_authz_url = svn_path_url_add_component2(repos_url, "A/authz", pool);
 
   /* absolute file URL. */
   SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, NULL, TRUE, pool));
@@ -1593,11 +1598,11 @@ in_repo_groups_authz(const svn_test_opts
   /* Calculate URLs */
   repos_root = svn_repos_path(repos, pool);
   SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
-  authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
-  empty_authz_url = apr_pstrcat(pool, repos_url, "/empty-authz", (char *)NULL);
-  noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
-  groups_url = apr_pstrcat(pool, repos_url, "/groups", (char *)NULL);
-  noent_groups_url = apr_pstrcat(pool, repos_url, "/A/groups", (char *)NULL);
+  authz_url = svn_path_url_add_component2(repos_url, "authz", pool);
+  empty_authz_url = svn_path_url_add_component2(repos_url, "empty-authz", pool);
+  noent_authz_url = svn_path_url_add_component2(repos_url, "A/authz", pool);
+  groups_url = svn_path_url_add_component2(repos_url, "groups", pool);
+  noent_groups_url = svn_path_url_add_component2(repos_url, "A/groups", pool);
 
 
   /* absolute file URLs. */
@@ -3270,21 +3275,26 @@ test_repos_info(const svn_test_opts_t *o
   svn_version_t v1_0_0 = {1, 0, 0, ""};
   svn_version_t v1_4_0 = {1, 4, 0, ""};
   int repos_format;
+  svn_boolean_t is_fsx = strcmp(opts->fs_type, "fsx") == 0;
 
   opts2 = *opts;
 
-  opts2.server_minor_version = 3;
-  SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-3",
-                                 &opts2, pool));
-  SVN_ERR(svn_repos_capabilities(&capabilities, repos, pool, pool));
-  SVN_TEST_ASSERT(apr_hash_count(capabilities) == 0);
-  SVN_ERR(svn_repos_info_format(&repos_format, &supports_version, repos,
-                                pool, pool));
-  SVN_TEST_ASSERT(repos_format == 3);
-  SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_0_0));
+  /* for repo types that have been around before 1.4 */
+  if (!is_fsx)
+    {
+      opts2.server_minor_version = 3;
+      SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-3",
+                                     &opts2, pool));
+      SVN_ERR(svn_repos_capabilities(&capabilities, repos, pool, pool));
+      SVN_TEST_ASSERT(apr_hash_count(capabilities) == 0);
+      SVN_ERR(svn_repos_info_format(&repos_format, &supports_version, repos,
+                                    pool, pool));
+      SVN_TEST_ASSERT(repos_format == 3);
+      SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_0_0));
+    }
 
-  opts2.server_minor_version = 8;
-  SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-8",
+  opts2.server_minor_version = 9;
+  SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-9",
                                  &opts2, pool));
   SVN_ERR(svn_repos_capabilities(&capabilities, repos, pool, pool));
   SVN_TEST_ASSERT(apr_hash_count(capabilities) == 1);
@@ -3297,9 +3307,246 @@ test_repos_info(const svn_test_opts_t *o
   return SVN_NO_ERROR;
 }
 
-
+static svn_error_t *
+test_config_pool(const svn_test_opts_t *opts,
+                 apr_pool_t *pool)
+{
+  const char *repo_name = "test-repo-config-pool";
+  svn_repos_t *repos;
+  svn_stringbuf_t *cfg_buffer1, *cfg_buffer2;
+  svn_config_t *cfg;
+  apr_hash_t *sections1, *sections2;
+  int i;
+  svn_boolean_t bvalue;
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *root, *rev_root;
+  svn_revnum_t rev;
+  const char *repo_root_url;
+  svn_error_t *err;
+
+  svn_repos__config_pool_t *config_pool;
+  apr_pool_t *config_pool_pool;
+  apr_pool_t *subpool = svn_pool_create(pool);
+
+  const char *wrk_dir = svn_test_data_path("config_pool", pool);
+
+  SVN_ERR(svn_io_make_dir_recursively(wrk_dir, pool));
+
+  /* read all config info through a single config pool and we want to be
+     able to control its lifetime.  The latter requires a separate pool. */
+  config_pool_pool = svn_pool_create(pool);
+  SVN_ERR(svn_repos__config_pool_create(&config_pool, TRUE,
+                                        config_pool_pool));
+
+  /* have two different configurations  */
+  SVN_ERR(svn_stringbuf_from_file2(
+                        &cfg_buffer1,
+                        svn_dirent_join(opts->srcdir,
+                                        "../libsvn_subr/config-test.cfg",
+                                        pool),
+                        pool));
+  cfg_buffer2 = svn_stringbuf_dup(cfg_buffer1, pool);
+  svn_stringbuf_appendcstr(cfg_buffer2, "\n[more]\nU=\"X\"\n");
+
+  /* write them to 2x2 files */
+  SVN_ERR(svn_io_write_atomic(svn_dirent_join(wrk_dir,
+                                              "config-pool-test1.cfg",
+                                              pool),
+                              cfg_buffer1->data, cfg_buffer1->len, NULL,
+                              pool));
+  SVN_ERR(svn_io_write_atomic(svn_dirent_join(wrk_dir,
+                                              "config-pool-test2.cfg",
+                                              pool),
+                              cfg_buffer1->data, cfg_buffer1->len, NULL,
+                              pool));
+  SVN_ERR(svn_io_write_atomic(svn_dirent_join(wrk_dir,
+                                              "config-pool-test3.cfg",
+                                              pool),
+                              cfg_buffer2->data, cfg_buffer2->len, NULL,
+                              pool));
+  SVN_ERR(svn_io_write_atomic(svn_dirent_join(wrk_dir,
+                                              "config-pool-test4.cfg",
+                                              pool),
+                              cfg_buffer2->data, cfg_buffer2->len, NULL,
+                              pool));
+
+  /* requesting a config over and over again should return the same
+     (even though it is not being referenced) */
+  sections1 = NULL;
+  for (i = 0; i < 4; ++i)
+    {
+      SVN_ERR(svn_repos__config_pool_get(
+                                    &cfg, NULL, config_pool,
+                                    svn_dirent_join(wrk_dir,
+                                                    "config-pool-test1.cfg",
+                                                    pool),
+                                    TRUE, TRUE, NULL, subpool));
+
+      if (sections1 == NULL)
+        sections1 = cfg->sections;
+      else
+        SVN_TEST_ASSERT(cfg->sections == sections1);
+
+      svn_pool_clear(subpool);
+    }
+
+  /* requesting the same config from another file should return the same
+     (even though it is not being referenced) */
+  for (i = 0; i < 4; ++i)
+    {
+      SVN_ERR(svn_repos__config_pool_get(
+                                    &cfg, NULL, config_pool,
+                                    svn_dirent_join(wrk_dir,
+                                                    "config-pool-test2.cfg",
+                                                    pool),
+                                    TRUE, TRUE, NULL, subpool));
+
+      SVN_TEST_ASSERT(cfg->sections == sections1);
+
+      svn_pool_clear(subpool);
+    }
+
+  /* reading a different configuration should return a different pointer */
+  sections2 = NULL;
+  for (i = 0; i < 2; ++i)
+    {
+      SVN_ERR(svn_repos__config_pool_get(
+                                    &cfg, NULL, config_pool,
+                                    svn_dirent_join(wrk_dir,
+                                                    "config-pool-test3.cfg",
+                                                    pool),
+                                    TRUE, TRUE, NULL, subpool));
+
+      if (sections2 == NULL)
+        sections2 = cfg->sections;
+      else
+        SVN_TEST_ASSERT(cfg->sections == sections2);
+
+      SVN_TEST_ASSERT(sections1 != sections2);
+      svn_pool_clear(subpool);
+    }
+
+  /* create an in-repo config */
+  SVN_ERR(svn_dirent_get_absolute(&repo_root_url, repo_name, pool));
+  SVN_ERR(svn_uri_get_file_url_from_dirent(&repo_root_url, repo_root_url,
+                                           pool));
+
+  SVN_ERR(svn_test__create_repos(&repos, repo_name, opts, pool));
+  SVN_ERR(svn_fs_begin_txn2(&txn, svn_repos_fs(repos), 0, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&root, txn, pool));
+  SVN_ERR(svn_fs_make_dir(root, "dir", pool));
+  SVN_ERR(svn_fs_make_file(root, "dir/config", pool));
+  SVN_ERR(svn_test__set_file_contents(root, "dir/config",
+                                      cfg_buffer1->data, pool));
+  SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+
+  /* reading the config from the repo should still give cfg1 */
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_path_url_add_component2(
+                                                    repo_root_url,
+                                                    "dir/config", pool),
+                                     TRUE, TRUE, NULL, subpool));
+  SVN_TEST_ASSERT(cfg->sections == sections1);
+  svn_pool_clear(subpool);
+
+  /* create another in-repo config */
+  SVN_ERR(svn_fs_begin_txn2(&txn, svn_repos_fs(repos), rev, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&root, txn, pool));
+  SVN_ERR(svn_fs_revision_root(&rev_root, svn_repos_fs(repos), rev, pool));
+  SVN_ERR(svn_fs_copy(rev_root, "dir", root, "another-dir", pool));
+  SVN_ERR(svn_test__set_file_contents(root, "dir/config",
+                                      cfg_buffer2->data, pool));
+  SVN_ERR(svn_fs_commit_txn2(NULL, &rev, txn, TRUE, pool));
+
+  /* reading the config from the repo should give cfg2 now */
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_path_url_add_component2(
+                                                    repo_root_url,
+                                                    "dir/config", pool),
+                                     TRUE, TRUE, NULL, subpool));
+  SVN_TEST_ASSERT(cfg->sections == sections2);
+  svn_pool_clear(subpool);
+
+  /* reading the copied config should still give cfg1 */
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_path_url_add_component2(
+                                                    repo_root_url,
+                                                    "another-dir/config",
+                                                    pool),
+                                     TRUE, TRUE, NULL, subpool));
+  SVN_TEST_ASSERT(cfg->sections == sections1);
+  svn_pool_clear(subpool);
+
+  /* once again: repeated reads.  This triggers a different code path. */
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_path_url_add_component2(
+                                                    repo_root_url,
+                                                    "dir/config", pool),
+                                     TRUE, TRUE, NULL, subpool));
+  SVN_TEST_ASSERT(cfg->sections == sections2);
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_path_url_add_component2(
+                                                    repo_root_url,
+                                                    "another-dir/config",
+                                                    pool),
+                                     TRUE, TRUE, NULL, subpool));
+  SVN_TEST_ASSERT(cfg->sections == sections1);
+  svn_pool_clear(subpool);
+
+  /* access paths that don't exist */
+  SVN_TEST_ASSERT_ERROR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                          svn_path_url_add_component2(repo_root_url, "X",
+                                                      pool),
+                          TRUE, TRUE, NULL, subpool),
+                        SVN_ERR_ILLEGAL_TARGET);
+  err = svn_repos__config_pool_get(&cfg, NULL, config_pool, "X.cfg",
+                                   TRUE, TRUE, NULL, subpool);
+  SVN_TEST_ASSERT(err && APR_STATUS_IS_ENOENT(err->apr_err));
+  svn_error_clear(err);
+  svn_pool_clear(subpool);
+
+  /* as long as we keep a reference to a config, clearing the config pool
+     should not invalidate that reference */
+  SVN_ERR(svn_repos__config_pool_get(&cfg, NULL, config_pool,
+                                     svn_dirent_join(wrk_dir,
+                                                     "config-pool-test1.cfg",
+                                                     pool),
+                                     TRUE, TRUE, NULL, pool));
+  svn_pool_clear(config_pool_pool);
+  for (i = 0; i < 64000; ++i)
+    apr_pcalloc(config_pool_pool, 80);
+
+  SVN_ERR(svn_config_get_bool(cfg, &bvalue, "booleans", "true3", FALSE));
+  SVN_TEST_ASSERT(bvalue);
+
+  return SVN_NO_ERROR;
+}
+
+
+static svn_error_t *
+test_repos_fs_type(const svn_test_opts_t *opts,
+                   apr_pool_t *pool)
+{
+  svn_repos_t *repos;
+
+  /* Create test repository. */
+  SVN_ERR(svn_test__create_repos(&repos, "test-repo-repos_fs_type",
+                                 opts, pool));
+
+  SVN_TEST_STRING_ASSERT(svn_repos_fs_type(repos, pool), opts->fs_type);
+
+  /* Re-open repository and verify fs-type again. */
+  SVN_ERR(svn_repos_open2(&repos, svn_repos_path(repos, pool), NULL, pool));
+
+  SVN_TEST_STRING_ASSERT(svn_repos_fs_type(repos, pool), opts->fs_type);
+
+  return SVN_NO_ERROR;
+}
+
 /* The test table.  */
 
+int svn_test_max_threads = 4;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
@@ -3345,5 +3592,9 @@ struct svn_test_descriptor_t test_funcs[
                        "test filenames with control characters"),
     SVN_TEST_OPTS_PASS(test_repos_info,
                        "test svn_repos_info_*"),
+    SVN_TEST_OPTS_PASS(test_config_pool,
+                       "test svn_repos__config_pool_*"),
+    SVN_TEST_OPTS_PASS(test_repos_fs_type,
+                       "test test_repos_fs_type"),
     SVN_TEST_NULL
   };

Propchange: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Nov 27 11:52:35 2013
@@ -22,6 +22,7 @@ opt-test
 path-test
 revision-test
 skel-test
+sqlite-test
 stream-test
 string-test
 string-test.tmp
@@ -42,3 +43,9 @@ named_atomic-proc-test
 io-test
 io-test-temp
 auth-clear
+prefix-string-test
+priority-queue-test
+packed-data-test
+root-pools-test
+aligned_seek_tmp
+read_length_tmp

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/auth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/auth-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/auth-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/auth-test.c Wed Nov 27 11:52:35 2013
@@ -63,13 +63,14 @@ test_platform_specific_auth_providers(ap
   number_of_providers += 2;
 #endif
 #if defined(WIN32) && !defined(__MINGW32__)
-  number_of_providers += 2;
+  number_of_providers += 4;
 #endif
   if (providers->nelts != number_of_providers)
     return svn_error_createf
       (SVN_ERR_TEST_FAILED, NULL,
        "svn_auth_get_platform_specific_client_providers should return " \
-       "an array of %d providers", number_of_providers);
+       "an array of %d providers, but returned %d providers",
+       number_of_providers, providers->nelts);
 
   /* Test Keychain auth providers */
 #ifdef SVN_HAVE_KEYCHAIN_SERVICES
@@ -314,6 +315,8 @@ test_auth_clear(apr_pool_t *pool)
 
 /* The test table.  */
 
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/cache-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/cache-test.c Wed Nov 27 11:52:35 2013
@@ -193,6 +193,7 @@ test_membuffer_cache_basic(apr_pool_t *p
                                             deserialize_revnum,
                                             APR_HASH_KEY_STRING,
                                             "cache:",
+                                            SVN_CACHE__MEMBUFFER_DEFAULT_PRIORITY,
                                             FALSE,
                                             pool));
 
@@ -258,6 +259,8 @@ test_memcache_long_key(const svn_test_op
 
 /* The test table.  */
 
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/checksum-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/checksum-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/checksum-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/checksum-test.c Wed Nov 27 11:52:35 2013
@@ -23,7 +23,10 @@
 
 #include <apr_pools.h>
 
+#include <zlib.h>
+
 #include "svn_error.h"
+#include "svn_io.h"
 #include "private/svn_pseudo_md5.h"
 
 #include "../svn_test.h"
@@ -155,7 +158,91 @@ zero_match(apr_pool_t *pool)
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+zlib_expansion_test(const svn_test_opts_t *opts,
+                    apr_pool_t *pool)
+{
+  const char *data_path;
+  svn_stringbuf_t *deflated;
+  Byte dst_buffer[256 * 1024];
+  Byte *src_buffer;
+  apr_size_t sz;
+
+  data_path = svn_dirent_join(opts->srcdir, "zlib.deflated", pool);
+
+  SVN_ERR(svn_stringbuf_from_file2(&deflated, data_path, pool));
+  src_buffer = (Byte*)deflated->data;
+
+  /* Try to decompress the same data with different blocksizes */
+  for (sz = 1; sz < 256; sz++)
+    {
+      z_stream stream;
+      memset(&stream, 0, sizeof(stream));
+      inflateInit2(&stream, -15 /* DEFLATE_WINDOW_SIZE */);
+
+      stream.avail_in = sz;
+      stream.next_in = src_buffer;
+      stream.avail_out = sizeof(dst_buffer);
+      stream.next_out = dst_buffer;
+
+      do
+        {
+          int zr = inflate(&stream, Z_NO_FLUSH);
+
+          if (zr != Z_OK && zr != Z_STREAM_END)
+          {
+              return svn_error_createf(
+                          SVN_ERR_TEST_FAILED, NULL,
+                          "Failure decompressing with blocksize %d", (int)sz);
+          }
+          stream.avail_in += sz;
+      } while (stream.next_in + stream.avail_in  < src_buffer + deflated->len);
+
+      stream.avail_in = (src_buffer + deflated->len) - stream.next_in;
+
+      {
+          int zr = inflate(&stream, Z_NO_FLUSH);
+
+          if (zr != Z_STREAM_END)
+            {
+              return svn_error_createf(
+                        SVN_ERR_TEST_FAILED, NULL,
+                        "Final flush failed with blocksize %d", (int)sz);
+            }
+
+          zr = inflateEnd(&stream);
+
+          if (zr != Z_OK)
+            {
+              return svn_error_createf(
+                        SVN_ERR_TEST_FAILED, NULL,
+                        "End of stream handling failed with blocksize %d",
+                        (int)sz);
+            }
+      }
+
+      {
+          apr_uint32_t crc = crc32(0, dst_buffer, stream.total_out);
+
+          if (stream.total_out != 242014 || crc != 0x8f03d934)
+            {
+              return svn_error_createf(
+                  SVN_ERR_TEST_FAILED, NULL,
+                  "Decompressed data doesn't match expected size or crc with "
+                  "blocksize %d: Found crc32=0x%08x, size=%d.\n"
+                  "Verify your ZLib installation, as this should never happen",
+                  (int)sz, (unsigned)crc, (int)stream.total_out);
+            }
+      }
+  }
+
+  return SVN_NO_ERROR;
+}
+
 /* An array of all test functions */
+
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
@@ -167,5 +254,7 @@ struct svn_test_descriptor_t test_funcs[
                    "pseudo-md5 compatibility"),
     SVN_TEST_PASS2(zero_match,
                    "zero checksum matching"),
+    SVN_TEST_OPTS_PASS(zlib_expansion_test,
+                       "zlib expansion test (zlib regression)"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/compat-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/compat-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/compat-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/compat-test.c Wed Nov 27 11:52:35 2013
@@ -209,6 +209,9 @@ test_version_at_least(apr_pool_t *pool)
 }
 
 /* An array of all test functions */
+
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/config-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/config-test.c Wed Nov 27 11:52:35 2013
@@ -33,48 +33,14 @@
 #include <apr_getopt.h>
 #include <apr_pools.h>
 
+#include "svn_dirent_uri.h"
 #include "svn_error.h"
 #include "svn_config.h"
+#include "private/svn_subr_private.h"
 
 #include "../svn_test.h"
 
 
-/* Initialize parameters for the tests. */
-extern int test_argc;
-extern const char **test_argv;
-
-static const apr_getopt_option_t opt_def[] =
-  {
-    {"srcdir", 'S', 1, "the source directory for VPATH test runs"},
-    {0, 0, 0, 0}
-  };
-static const char *srcdir = NULL;
-
-static svn_error_t *init_params(apr_pool_t *pool)
-{
-  apr_getopt_t *opt;
-  int optch;
-  const char *opt_arg;
-  apr_status_t status;
-
-  apr_getopt_init(&opt, pool, test_argc, test_argv);
-  while (!(status = apr_getopt_long(opt, opt_def, &optch, &opt_arg)))
-    {
-      switch (optch)
-        {
-        case 'S':
-          srcdir = opt_arg;
-          break;
-        }
-    }
-
-  if (!srcdir)
-    return svn_error_create(SVN_ERR_TEST_FAILED, 0,
-                            "missing required parameter '--srcdir'");
-
-  return SVN_NO_ERROR;
-}
-
 /* A quick way to create error messages.  */
 static svn_error_t *
 fail(apr_pool_t *pool, const char *fmt, ...)
@@ -99,16 +65,14 @@ static const char *config_values[] = { "
                                        "Aa 100", NULL };
 
 static svn_error_t *
-test_text_retrieval(apr_pool_t *pool)
+test_text_retrieval(const svn_test_opts_t *opts,
+                    apr_pool_t *pool)
 {
   svn_config_t *cfg;
   int i;
   const char *cfg_file;
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   /* Test values retrieved from our ConfigParser instance against
@@ -150,16 +114,14 @@ static const char *false_keys[] = {"fals
                                    NULL};
 
 static svn_error_t *
-test_boolean_retrieval(apr_pool_t *pool)
+test_boolean_retrieval(const svn_test_opts_t *opts,
+                       apr_pool_t *pool)
 {
   svn_config_t *cfg;
   int i;
   const char *cfg_file;
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   for (i = 0; true_keys[i] != NULL; i++)
@@ -211,15 +173,13 @@ test_boolean_retrieval(apr_pool_t *pool)
 }
 
 static svn_error_t *
-test_has_section_case_insensitive(apr_pool_t *pool)
+test_has_section_case_insensitive(const svn_test_opts_t *opts,
+                                  apr_pool_t *pool)
 {
   svn_config_t *cfg;
   const char *cfg_file;
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   if (! svn_config_has_section(cfg, "section1"))
@@ -241,15 +201,13 @@ test_has_section_case_insensitive(apr_po
 }
 
 static svn_error_t *
-test_has_section_case_sensitive(apr_pool_t *pool)
+test_has_section_case_sensitive(const svn_test_opts_t *opts,
+                                apr_pool_t *pool)
 {
   svn_config_t *cfg;
   const char *cfg_file;
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
 
   if (! svn_config_has_section(cfg, "section1"))
@@ -271,7 +229,8 @@ test_has_section_case_sensitive(apr_pool
 }
 
 static svn_error_t *
-test_has_option_case_sensitive(apr_pool_t *pool)
+test_has_option_case_sensitive(const svn_test_opts_t *opts,
+                               apr_pool_t *pool)
 {
   svn_config_t *cfg;
   const char *cfg_file;
@@ -289,10 +248,7 @@ test_has_option_case_sensitive(apr_pool_
   };
   static const int test_data_size = sizeof(test_data)/sizeof(*test_data);
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, TRUE, pool));
 
   for (i = 0; i < test_data_size; ++i)
@@ -313,16 +269,14 @@ test_has_option_case_sensitive(apr_pool_
 }
 
 static svn_error_t *
-test_stream_interface(apr_pool_t *pool)
+test_stream_interface(const svn_test_opts_t *opts,
+                      apr_pool_t *pool)
 {
   svn_config_t *cfg;
   const char *cfg_file;
   svn_stream_t *stream;
 
-  if (!srcdir)
-    SVN_ERR(init_params(pool));
-
-  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
   SVN_ERR(svn_stream_open_readonly(&stream, cfg_file, pool, pool));
 
   SVN_ERR(svn_config_parse(&cfg, stream, TRUE, TRUE, pool));
@@ -352,6 +306,35 @@ test_ignore_bom(apr_pool_t *pool)
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_read_only_mode(const svn_test_opts_t *opts,
+                    apr_pool_t *pool)
+{
+  svn_config_t *cfg;
+  svn_config_t *cfg2;
+  const char *cfg_file;
+
+  cfg_file = svn_dirent_join(opts->srcdir, "config-test.cfg", pool);
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
+
+  /* setting CFG to r/o mode shall toggle the r/o mode and expand values */
+
+  SVN_TEST_ASSERT(!svn_config__is_read_only(cfg));
+  SVN_TEST_ASSERT(!svn_config__is_expanded(cfg, "section1", "i"));
+
+  svn_config__set_read_only(cfg, pool);
+
+  SVN_TEST_ASSERT(svn_config__is_read_only(cfg));
+  SVN_TEST_ASSERT(svn_config__is_expanded(cfg, "section1", "i"));
+
+  /* copies should be r/w with values */
+
+  SVN_ERR(svn_config_dup(&cfg2, cfg, pool));
+  SVN_TEST_ASSERT(!svn_config__is_read_only(cfg2));
+
+  return SVN_NO_ERROR;
+}
+
 /*
    ====================================================================
    If you add a new test to this file, update this array.
@@ -360,21 +343,27 @@ test_ignore_bom(apr_pool_t *pool)
 */
 
 /* An array of all test functions */
+
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
-    SVN_TEST_PASS2(test_text_retrieval,
-                   "test svn_config"),
-    SVN_TEST_PASS2(test_boolean_retrieval,
-                   "test svn_config boolean conversion"),
-    SVN_TEST_PASS2(test_has_section_case_insensitive,
-                   "test svn_config_has_section (case insensitive)"),
-    SVN_TEST_PASS2(test_has_section_case_sensitive,
-                   "test svn_config_has_section (case sensitive)"),
-    SVN_TEST_PASS2(test_has_option_case_sensitive,
-                   "test case-sensitive option name lookup"),
-    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_text_retrieval,
+                       "test svn_config"),
+    SVN_TEST_OPTS_PASS(test_boolean_retrieval,
+                       "test svn_config boolean conversion"),
+    SVN_TEST_OPTS_PASS(test_has_section_case_insensitive,
+                       "test svn_config_has_section (case insensitive)"),
+    SVN_TEST_OPTS_PASS(test_has_section_case_sensitive,
+                       "test svn_config_has_section (case sensitive)"),
+    SVN_TEST_OPTS_PASS(test_has_option_case_sensitive,
+                       "test case-sensitive option name lookup"),
+    SVN_TEST_OPTS_PASS(test_stream_interface,
+                       "test svn_config_parse"),
+    SVN_TEST_PASS2(test_ignore_bom,
+                   "test parsing config file with BOM"),
+    SVN_TEST_OPTS_PASS(test_read_only_mode,
+                       "test r/o mode"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/crypto-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/crypto-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/crypto-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/crypto-test.c Wed Nov 27 11:52:35 2013
@@ -177,6 +177,8 @@ test_passphrase_check(apr_pool_t *pool)
 
 /* The test table.  */
 
+int svn_test_max_threads = -1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/dirent_uri-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/dirent_uri-test.c Wed Nov 27 11:52:35 2013
@@ -269,7 +269,7 @@ test_dirent_join(apr_pool_t *pool)
                                  "\"%s\". expected \"%s\"",
                                  base, comp, result, expect);
 
-      result = svn_dirent_join_many(pool, base, comp, NULL);
+      result = svn_dirent_join_many(pool, base, comp, SVN_VA_NULL);
       if (strcmp(result, expect))
         return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
                                  "svn_dirent_join_many(\"%s\", \"%s\") returned "
@@ -285,72 +285,72 @@ test_dirent_join(apr_pool_t *pool)
                              "expected \"%s\"", \
                              result, expect);
 
-  TEST_MANY((pool, "abc", NULL), "abc");
-  TEST_MANY((pool, "/abc", NULL), "/abc");
-  TEST_MANY((pool, "/", NULL), "/");
-
-  TEST_MANY((pool, "abc", "def", "ghi", NULL), "abc/def/ghi");
-  TEST_MANY((pool, "abc", "/def", "ghi", NULL), "/def/ghi");
-  TEST_MANY((pool, "/abc", "def", "ghi", NULL), "/abc/def/ghi");
-  TEST_MANY((pool, "abc", "def", "/ghi", NULL), "/ghi");
-  TEST_MANY((pool, "/", "def", "/ghi", NULL), "/ghi");
-  TEST_MANY((pool, "/", "/def", "/ghi", NULL), "/ghi");
-
-  TEST_MANY((pool, SVN_EMPTY_PATH, "def", "ghi", NULL), "def/ghi");
-  TEST_MANY((pool, "abc", SVN_EMPTY_PATH, "ghi", NULL), "abc/ghi");
-  TEST_MANY((pool, "abc", "def", SVN_EMPTY_PATH, NULL), "abc/def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "def", SVN_EMPTY_PATH, NULL), "def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "ghi", NULL), "ghi");
-  TEST_MANY((pool, "abc", SVN_EMPTY_PATH, SVN_EMPTY_PATH, NULL), "abc");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "def", "/ghi", NULL), "/ghi");
-  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "/ghi", NULL), "/ghi");
-
-  TEST_MANY((pool, "/", "def", "ghi", NULL), "/def/ghi");
-  TEST_MANY((pool, "abc", "/", "ghi", NULL), "/ghi");
-  TEST_MANY((pool, "abc", "def", "/", NULL), "/");
-  TEST_MANY((pool, "/", "/", "ghi", NULL), "/ghi");
-  TEST_MANY((pool, "/", "/", "/", NULL), "/");
-  TEST_MANY((pool, "/", SVN_EMPTY_PATH, "ghi", NULL), "/ghi");
-  TEST_MANY((pool, "/", "def", SVN_EMPTY_PATH, NULL), "/def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "/", "ghi", NULL), "/ghi");
-  TEST_MANY((pool, "/", SVN_EMPTY_PATH, SVN_EMPTY_PATH, NULL), "/");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "/", SVN_EMPTY_PATH, NULL), "/");
-  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "/", NULL), "/");
-
-#ifdef SVN_USE_DOS_PATHS
-  TEST_MANY((pool, "X:/", "def", "ghi", NULL), "X:/def/ghi");
-  TEST_MANY((pool, "abc", "X:/", "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "abc", "def", "X:/", NULL), "X:/");
-  TEST_MANY((pool, "X:/", "X:/", "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "X:/", "X:/", "/", NULL), "/");
-  TEST_MANY((pool, "X:/", SVN_EMPTY_PATH, "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "X:/", "def", SVN_EMPTY_PATH, NULL), "X:/def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "X:/", "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "X:/", SVN_EMPTY_PATH, SVN_EMPTY_PATH, NULL), "X:/");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "X:/", SVN_EMPTY_PATH, NULL), "X:/");
-  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "X:/", NULL), "X:/");
-
-  TEST_MANY((pool, "X:", "def", "ghi", NULL), "X:def/ghi");
-  TEST_MANY((pool, "X:", "X:/", "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "X:", "X:/", "/", NULL), "/");
-  TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", NULL), "X:ghi");
-  TEST_MANY((pool, "X:", "def", SVN_EMPTY_PATH, NULL), "X:def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "X:", "ghi", NULL), "X:ghi");
-  TEST_MANY((pool, "//srv/shr", "def", "ghi", NULL), "//srv/shr/def/ghi");
-  TEST_MANY((pool, "//srv/shr/fld", "def", "ghi", NULL), "//srv/shr/fld/def/ghi");
-  TEST_MANY((pool, "//srv/shr/fld", "def", "//srv/shr", NULL), "//srv/shr");
-  TEST_MANY((pool, "//srv/s r/fld", "def", "//srv/s r", NULL), "//srv/s r");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "ghi", NULL), "//srv/shr/fld/def/ghi");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "//srv/shr", NULL), "//srv/shr");
+  TEST_MANY((pool, "abc", SVN_VA_NULL), "abc");
+  TEST_MANY((pool, "/abc", SVN_VA_NULL), "/abc");
+  TEST_MANY((pool, "/", SVN_VA_NULL), "/");
+
+  TEST_MANY((pool, "abc", "def", "ghi", SVN_VA_NULL), "abc/def/ghi");
+  TEST_MANY((pool, "abc", "/def", "ghi", SVN_VA_NULL), "/def/ghi");
+  TEST_MANY((pool, "/abc", "def", "ghi", SVN_VA_NULL), "/abc/def/ghi");
+  TEST_MANY((pool, "abc", "def", "/ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "/", "def", "/ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "/", "/def", "/ghi", SVN_VA_NULL), "/ghi");
+
+  TEST_MANY((pool, SVN_EMPTY_PATH, "def", "ghi", SVN_VA_NULL), "def/ghi");
+  TEST_MANY((pool, "abc", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "abc/ghi");
+  TEST_MANY((pool, "abc", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "abc/def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "def", SVN_EMPTY_PATH, SVN_VA_NULL), "def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "ghi");
+  TEST_MANY((pool, "abc", SVN_EMPTY_PATH, SVN_EMPTY_PATH, SVN_VA_NULL), "abc");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "def", "/ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "/ghi", SVN_VA_NULL), "/ghi");
+
+  TEST_MANY((pool, "/", "def", "ghi", SVN_VA_NULL), "/def/ghi");
+  TEST_MANY((pool, "abc", "/", "ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "abc", "def", "/", SVN_VA_NULL), "/");
+  TEST_MANY((pool, "/", "/", "ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "/", "/", "/", SVN_VA_NULL), "/");
+  TEST_MANY((pool, "/", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "/", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "/def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "/", "ghi", SVN_VA_NULL), "/ghi");
+  TEST_MANY((pool, "/", SVN_EMPTY_PATH, SVN_EMPTY_PATH, SVN_VA_NULL), "/");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "/", SVN_EMPTY_PATH, SVN_VA_NULL), "/");
+  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "/", SVN_VA_NULL), "/");
+
+#ifdef SVN_USE_DOS_PATHS
+  TEST_MANY((pool, "X:/", "def", "ghi", SVN_VA_NULL), "X:/def/ghi");
+  TEST_MANY((pool, "abc", "X:/", "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "abc", "def", "X:/", SVN_VA_NULL), "X:/");
+  TEST_MANY((pool, "X:/", "X:/", "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "X:/", "X:/", "/", SVN_VA_NULL), "/");
+  TEST_MANY((pool, "X:/", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "X:/", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "X:/def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "X:/", "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "X:/", SVN_EMPTY_PATH, SVN_EMPTY_PATH, SVN_VA_NULL), "X:/");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "X:/", SVN_EMPTY_PATH, SVN_VA_NULL), "X:/");
+  TEST_MANY((pool, SVN_EMPTY_PATH, SVN_EMPTY_PATH, "X:/", SVN_VA_NULL), "X:/");
+
+  TEST_MANY((pool, "X:", "def", "ghi", SVN_VA_NULL), "X:def/ghi");
+  TEST_MANY((pool, "X:", "X:/", "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "X:", "X:/", "/", SVN_VA_NULL), "/");
+  TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "X:ghi");
+  TEST_MANY((pool, "X:", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "X:def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "X:", "ghi", SVN_VA_NULL), "X:ghi");
+  TEST_MANY((pool, "//srv/shr", "def", "ghi", SVN_VA_NULL), "//srv/shr/def/ghi");
+  TEST_MANY((pool, "//srv/shr/fld", "def", "ghi", SVN_VA_NULL), "//srv/shr/fld/def/ghi");
+  TEST_MANY((pool, "//srv/shr/fld", "def", "//srv/shr", SVN_VA_NULL), "//srv/shr");
+  TEST_MANY((pool, "//srv/s r/fld", "def", "//srv/s r", SVN_VA_NULL), "//srv/s r");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "ghi", SVN_VA_NULL), "//srv/shr/fld/def/ghi");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "//srv/shr/fld", "def", "//srv/shr", SVN_VA_NULL), "//srv/shr");
 
-  TEST_MANY((pool, "abcd", "/dir", "A:", "file", NULL), "A:file");
-  TEST_MANY((pool, "abcd", "A:", "/dir", "file", NULL), "A:/dir/file");
+  TEST_MANY((pool, "abcd", "/dir", "A:", "file", SVN_VA_NULL), "A:file");
+  TEST_MANY((pool, "abcd", "A:", "/dir", "file", SVN_VA_NULL), "A:/dir/file");
 
 #else /* !SVN_USE_DOS_PATHS */
-  TEST_MANY((pool, "X:", "def", "ghi", NULL), "X:/def/ghi");
-  TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", NULL), "X:/ghi");
-  TEST_MANY((pool, "X:", "def", SVN_EMPTY_PATH, NULL), "X:/def");
-  TEST_MANY((pool, SVN_EMPTY_PATH, "X:", "ghi", NULL), "X:/ghi");
+  TEST_MANY((pool, "X:", "def", "ghi", SVN_VA_NULL), "X:/def/ghi");
+  TEST_MANY((pool, "X:", SVN_EMPTY_PATH, "ghi", SVN_VA_NULL), "X:/ghi");
+  TEST_MANY((pool, "X:", "def", SVN_EMPTY_PATH, SVN_VA_NULL), "X:/def");
+  TEST_MANY((pool, SVN_EMPTY_PATH, "X:", "ghi", SVN_VA_NULL), "X:/ghi");
 #endif /* SVN_USE_DOS_PATHS */
 
   /* ### probably need quite a few more tests... */
@@ -911,6 +911,9 @@ static const testcase_canonicalize_t uri
     { "file:///C:/temp/REPOS", "file:///C:/temp/REPOS" },
     { "file:///c:/",           "file:///c:" },
 #endif /* SVN_USE_DOS_PATHS */
+    /* Hostnames that look like non-canonical paths */
+    { "file://./foo",             "file://./foo" },
+    { "http://./foo",             "http://./foo" },
   /* svn_uri_is_canonical() was a private function in the 1.6 API, and
      has since taken a MAJOR change of direction, namely that only
      absolute URLs are considered canonical uris now. */
@@ -1933,13 +1936,13 @@ test_dirent_get_absolute(apr_pool_t *poo
 
       expect_abs = expect;
       if (*expect == '%')
-        expect_abs = apr_pstrcat(pool, curdir, expect + 1, (char *)NULL);
+        expect_abs = apr_pstrcat(pool, curdir, expect + 1, SVN_VA_NULL);
 #ifdef SVN_USE_DOS_PATHS
       if (*expect == '@')
-        expect_abs = apr_pstrcat(pool, curdironc, expect + 1, NULL);
+        expect_abs = apr_pstrcat(pool, curdironc, expect + 1, SVN_VA_NULL);
 
       if (*expect == '$')
-        expect_abs = apr_pstrcat(pool, curdrive, expect + 1, NULL);
+        expect_abs = apr_pstrcat(pool, curdrive, expect + 1, SVN_VA_NULL);
 
       /* Remove double '/' when CWD was the root dir (E.g. C:/) */
       expect_abs = svn_dirent_canonicalize(expect_abs, pool);
@@ -2714,6 +2717,8 @@ test_fspath_get_longest_ancestor(apr_poo
 
 /* The test table.  */
 
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,

Modified: subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-code-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-code-test.c?rev=1546002&r1=1546001&r2=1546002&view=diff
==============================================================================
--- subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-code-test.c (original)
+++ subversion/branches/verify-keep-going/subversion/tests/libsvn_subr/error-code-test.c Wed Nov 27 11:52:35 2013
@@ -74,6 +74,8 @@ check_error_codes_unique(apr_pool_t *poo
 
 /* The test table.  */
 
+int svn_test_max_threads = 1;
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,