2
* Regression tests for mtcc code in the libsvn_client library.
4
* ====================================================================
5
* Licensed to the Apache Software Foundation (ASF) under one
6
* or more contributor license agreements. See the NOTICE file
7
* distributed with this work for additional information
8
* regarding copyright ownership. The ASF licenses this file
9
* to you under the Apache License, Version 2.0 (the
10
* "License"); you may not use this file except in compliance
11
* with the License. You may obtain a copy of the License at
13
* http://www.apache.org/licenses/LICENSE-2.0
15
* Unless required by applicable law or agreed to in writing,
16
* software distributed under the License is distributed on an
17
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18
* KIND, either express or implied. See the License for the
19
* specific language governing permissions and limitations
21
* ====================================================================
24
#include "svn_pools.h"
25
#include "svn_props.h"
26
#include "svn_client.h"
27
#include "private/svn_client_mtcc.h"
29
#include "../svn_test.h"
30
#include "../svn_test_fs.h"
32
/* Baton for verify_commit_callback*/
33
struct verify_commit_baton
35
const svn_commit_info_t *commit_info;
36
apr_pool_t *result_pool;
39
/* Commit result collector for verify_mtcc_commit */
41
verify_commit_callback(const svn_commit_info_t *commit_info,
45
struct verify_commit_baton *vcb = baton;
47
vcb->commit_info = svn_commit_info_dup(commit_info, vcb->result_pool);
51
/* Create a stream from a c string */
53
cstr_stream(const char *data, apr_pool_t *result_pool)
55
return svn_stream_from_string(svn_string_create(data, result_pool),
60
verify_mtcc_commit(svn_client__mtcc_t *mtcc,
61
svn_revnum_t expected_rev,
64
struct verify_commit_baton vcb;
65
vcb.commit_info = NULL;
66
vcb.result_pool = pool;
68
SVN_ERR(svn_client__mtcc_commit(NULL, verify_commit_callback, &vcb, mtcc, pool));
70
SVN_TEST_ASSERT(vcb.commit_info != NULL);
71
SVN_TEST_ASSERT(vcb.commit_info->revision == expected_rev);
77
/* Constructs a greek tree as revision 1 in the repository at repos_url */
79
make_greek_tree(const char *repos_url,
80
apr_pool_t *scratch_pool)
82
svn_client__mtcc_t *mtcc;
83
svn_client_ctx_t *ctx;
87
subpool = svn_pool_create(scratch_pool);
89
SVN_ERR(svn_client_create_context2(&ctx, NULL, subpool));
90
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, subpool));
92
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 0, ctx, subpool, subpool));
94
for (i = 0; svn_test__greek_tree_nodes[i].path; i++)
96
if (svn_test__greek_tree_nodes[i].contents)
98
SVN_ERR(svn_client__mtcc_add_add_file(
99
svn_test__greek_tree_nodes[i].path,
101
svn_test__greek_tree_nodes[i].contents,
103
NULL /* src_checksum */,
108
SVN_ERR(svn_client__mtcc_add_mkdir(
109
svn_test__greek_tree_nodes[i].path,
114
SVN_ERR(verify_mtcc_commit(mtcc, 1, subpool));
116
svn_pool_clear(subpool);
121
test_mkdir(const svn_test_opts_t *opts,
124
svn_client__mtcc_t *mtcc;
125
svn_client_ctx_t *ctx;
126
const char *repos_url;
128
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-mkdir",
131
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
132
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
134
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 0, ctx, pool, pool));
136
SVN_ERR(svn_client__mtcc_add_mkdir("branches", mtcc, pool));
137
SVN_ERR(svn_client__mtcc_add_mkdir("trunk", mtcc, pool));
138
SVN_ERR(svn_client__mtcc_add_mkdir("branches/1.x", mtcc, pool));
139
SVN_ERR(svn_client__mtcc_add_mkdir("tags", mtcc, pool));
140
SVN_ERR(svn_client__mtcc_add_mkdir("tags/1.0", mtcc, pool));
141
SVN_ERR(svn_client__mtcc_add_mkdir("tags/1.1", mtcc, pool));
143
SVN_ERR(verify_mtcc_commit(mtcc, 1, pool));
149
test_mkgreek(const svn_test_opts_t *opts,
152
svn_client__mtcc_t *mtcc;
153
svn_client_ctx_t *ctx;
154
const char *repos_url;
156
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-mkgreek",
159
SVN_ERR(make_greek_tree(repos_url, pool));
161
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
162
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
164
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
166
SVN_ERR(svn_client__mtcc_add_copy("A", 1, "greek_A", mtcc, pool));
168
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
174
test_swap(const svn_test_opts_t *opts,
177
svn_client__mtcc_t *mtcc;
178
svn_client_ctx_t *ctx;
179
const char *repos_url;
181
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-swap",
184
SVN_ERR(make_greek_tree(repos_url, pool));
186
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
187
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
189
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
191
SVN_ERR(svn_client__mtcc_add_move("A/B", "B", mtcc, pool));
192
SVN_ERR(svn_client__mtcc_add_move("A/D", "A/B", mtcc, pool));
193
SVN_ERR(svn_client__mtcc_add_copy("A/B", 1, "A/D", mtcc, pool));
195
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
201
test_propset(const svn_test_opts_t *opts,
204
svn_client__mtcc_t *mtcc;
205
svn_client_ctx_t *ctx;
206
const char *repos_url;
208
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-propset",
211
SVN_ERR(make_greek_tree(repos_url, pool));
213
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
214
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
216
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
218
SVN_ERR(svn_client__mtcc_add_propset("iota", "key",
219
svn_string_create("val", pool), FALSE,
221
SVN_ERR(svn_client__mtcc_add_propset("A", "A-key",
222
svn_string_create("val-A", pool), FALSE,
224
SVN_ERR(svn_client__mtcc_add_propset("A/B", "B-key",
225
svn_string_create("val-B", pool), FALSE,
228
/* The repository ignores propdeletes of properties that aren't there,
229
so this just works */
230
SVN_ERR(svn_client__mtcc_add_propset("A/D", "D-key", NULL, FALSE,
233
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
235
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 2, ctx, pool, pool));
236
SVN_TEST_ASSERT_ERROR(
237
svn_client__mtcc_add_propset("A", SVN_PROP_MIME_TYPE,
238
svn_string_create("text/plain", pool),
240
SVN_ERR_ILLEGAL_TARGET);
242
SVN_TEST_ASSERT_ERROR(
243
svn_client__mtcc_add_propset("iota", SVN_PROP_IGNORE,
244
svn_string_create("iota", pool),
246
SVN_ERR_ILLEGAL_TARGET);
248
SVN_ERR(svn_client__mtcc_add_propset("iota", SVN_PROP_EOL_STYLE,
249
svn_string_create("LF", pool),
252
SVN_ERR(svn_client__mtcc_add_add_file("ok", cstr_stream("line\nline\n", pool),
254
SVN_ERR(svn_client__mtcc_add_add_file("bad", cstr_stream("line\nno\r\n", pool),
257
SVN_ERR(svn_client__mtcc_add_propset("ok", SVN_PROP_EOL_STYLE,
258
svn_string_create("LF", pool),
261
SVN_TEST_ASSERT_ERROR(
262
svn_client__mtcc_add_propset("bad", SVN_PROP_EOL_STYLE,
263
svn_string_create("LF", pool),
265
SVN_ERR_ILLEGAL_TARGET);
267
SVN_ERR(verify_mtcc_commit(mtcc, 3, pool));
273
test_update_files(const svn_test_opts_t *opts,
276
svn_client__mtcc_t *mtcc;
277
svn_client_ctx_t *ctx;
278
const char *repos_url;
280
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-update-files",
282
SVN_ERR(make_greek_tree(repos_url, pool));
284
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
285
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
287
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
289
/* Update iota with knowledge of the old data */
290
SVN_ERR(svn_client__mtcc_add_update_file(svn_test__greek_tree_nodes[0].path,
291
cstr_stream("new-iota", pool),
294
svn_test__greek_tree_nodes[0]
300
SVN_ERR(svn_client__mtcc_add_update_file("A/mu",
301
cstr_stream("new-MU", pool),
306
/* Set a property on the same node */
307
SVN_ERR(svn_client__mtcc_add_propset("A/mu", "mu-key",
308
svn_string_create("mu-A", pool), FALSE,
310
/* And some other node */
311
SVN_ERR(svn_client__mtcc_add_propset("A/B", "B-key",
312
svn_string_create("val-B", pool), FALSE,
315
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
320
test_overwrite(const svn_test_opts_t *opts,
323
svn_client__mtcc_t *mtcc;
324
svn_client_ctx_t *ctx;
325
const char *repos_url;
327
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-overwrite",
330
SVN_ERR(make_greek_tree(repos_url, pool));
332
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
333
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
335
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
337
SVN_ERR(svn_client__mtcc_add_copy("A", 1, "AA", mtcc, pool));
339
SVN_TEST_ASSERT_ERROR(svn_client__mtcc_add_mkdir("AA/B", mtcc, pool),
340
SVN_ERR_FS_ALREADY_EXISTS);
342
SVN_TEST_ASSERT_ERROR(svn_client__mtcc_add_mkdir("AA/D/H/chi", mtcc, pool),
343
SVN_ERR_FS_ALREADY_EXISTS);
345
SVN_ERR(svn_client__mtcc_add_mkdir("AA/BB", mtcc, pool));
347
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
352
test_anchoring(const svn_test_opts_t *opts,
355
svn_client__mtcc_t *mtcc;
356
svn_client_ctx_t *ctx;
357
const char *repos_url;
359
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-anchoring",
362
SVN_ERR(make_greek_tree(repos_url, pool));
364
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
365
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
367
/* Update a file as root operation */
368
SVN_ERR(svn_client__mtcc_create(&mtcc,
369
svn_path_url_add_component2(repos_url, "iota",
371
1, ctx, pool, pool));
372
SVN_ERR(svn_client__mtcc_add_update_file("",
373
cstr_stream("new-iota", pool),
376
SVN_ERR(svn_client__mtcc_add_propset("", "key",
377
svn_string_create("value", pool),
380
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
382
/* Add a directory as root operation */
383
SVN_ERR(svn_client__mtcc_create(&mtcc,
384
svn_path_url_add_component2(repos_url, "BB",
386
2, ctx, pool, pool));
387
SVN_ERR(svn_client__mtcc_add_mkdir("", mtcc, pool));
388
SVN_ERR(verify_mtcc_commit(mtcc, 3, pool));
390
/* Add a file as root operation */
391
SVN_ERR(svn_client__mtcc_create(&mtcc,
392
svn_path_url_add_component2(repos_url, "new",
394
3, ctx, pool, pool));
395
SVN_ERR(svn_client__mtcc_add_add_file("", cstr_stream("new", pool), NULL,
397
SVN_ERR(verify_mtcc_commit(mtcc, 4, pool));
399
/* Delete as root operation */
400
SVN_ERR(svn_client__mtcc_create(&mtcc,
401
svn_path_url_add_component2(repos_url, "new",
403
4, ctx, pool, pool));
404
SVN_ERR(svn_client__mtcc_add_delete("", mtcc, pool));
405
SVN_ERR(verify_mtcc_commit(mtcc, 5, pool));
407
/* Propset file as root operation */
408
SVN_ERR(svn_client__mtcc_create(&mtcc,
409
svn_path_url_add_component2(repos_url, "A/mu",
411
5, ctx, pool, pool));
412
SVN_ERR(svn_client__mtcc_add_propset("", "key",
413
svn_string_create("val", pool),
415
SVN_ERR(verify_mtcc_commit(mtcc, 6, pool));
417
/* Propset dir as root operation */
418
SVN_ERR(svn_client__mtcc_create(&mtcc,
419
svn_path_url_add_component2(repos_url, "A",
421
6, ctx, pool, pool));
422
SVN_ERR(svn_client__mtcc_add_propset("", "key",
423
svn_string_create("val", pool),
425
SVN_ERR(verify_mtcc_commit(mtcc, 7, pool));
427
/* Propset reposroot as root operation */
428
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 7, ctx, pool, pool));
429
SVN_ERR(svn_client__mtcc_add_propset("", "key",
430
svn_string_create("val", pool),
432
SVN_ERR(verify_mtcc_commit(mtcc, 8, pool));
438
test_replace_tree(const svn_test_opts_t *opts,
441
svn_client__mtcc_t *mtcc;
442
svn_client_ctx_t *ctx;
443
const char *repos_url;
445
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-replace_tree",
448
SVN_ERR(make_greek_tree(repos_url, pool));
450
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
451
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
453
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, pool, pool));
455
SVN_ERR(svn_client__mtcc_add_delete("A", mtcc, pool));
456
SVN_ERR(svn_client__mtcc_add_delete("iota", mtcc, pool));
457
SVN_ERR(svn_client__mtcc_add_mkdir("A", mtcc, pool));
458
SVN_ERR(svn_client__mtcc_add_mkdir("A/B", mtcc, pool));
459
SVN_ERR(svn_client__mtcc_add_mkdir("A/B/C", mtcc, pool));
460
SVN_ERR(svn_client__mtcc_add_mkdir("M", mtcc, pool));
461
SVN_ERR(svn_client__mtcc_add_mkdir("M/N", mtcc, pool));
462
SVN_ERR(svn_client__mtcc_add_mkdir("M/N/O", mtcc, pool));
464
SVN_ERR(verify_mtcc_commit(mtcc, 2, pool));
469
/* Baton for handle_rev */
470
struct handle_rev_baton
476
/* Per revision handler */
477
svn_txdelta_window_handler_t inner_handler;
480
/* Swapped between revisions to reconstruct data */
481
svn_stringbuf_t *cur;
482
svn_stringbuf_t *prev;
484
/* Pool for some test stuff */
488
/* Implement svn_txdelta_window_handler_t */
490
handle_rev_delta(svn_txdelta_window_t *window,
493
struct handle_rev_baton *hrb = baton;
495
SVN_ERR(hrb->inner_handler(window, hrb->inner_baton));
500
const char *expected;
502
/* Some revisions don't update the revision body */
508
case 7: /* Not reported */
513
expected_rev = (int)hrb->last;
516
expected = apr_psprintf(hrb->pool, "revision-%d", expected_rev);
518
SVN_TEST_STRING_ASSERT(hrb->cur->data, expected);
524
/* Helper for test_file_revs_both_ways */
526
handle_rev(void *baton,
529
apr_hash_t *rev_props,
530
svn_boolean_t result_of_merge,
531
svn_txdelta_window_handler_t *delta_handler,
533
apr_array_header_t *prop_diffs,
536
struct handle_rev_baton *hrb = baton;
537
svn_revnum_t expected_rev = hrb->up ? (hrb->last + 1) : (hrb->last - 1);
539
if (expected_rev == 7)
540
expected_rev = hrb->up ? 8 : 6;
542
SVN_TEST_ASSERT(rev == expected_rev);
543
SVN_TEST_ASSERT(apr_hash_count(rev_props) >= 3);
544
SVN_TEST_STRING_ASSERT(path, (rev < 5) ? "/iota" : "/mu");
547
&& (rev == (hrb->up ? 5 : 4) || rev == (hrb->up ? 8 : 6)))
548
SVN_TEST_ASSERT(delta_handler == NULL);
550
SVN_TEST_ASSERT(delta_handler != NULL);
554
svn_stringbuf_t *tmp;
556
*delta_handler = handle_rev_delta;
559
/* Swap string buffers, to use previous as original */
561
hrb->prev = hrb->cur;
564
svn_stringbuf_setempty(hrb->cur);
566
svn_txdelta_apply(svn_stream_from_stringbuf(hrb->prev, pool),
567
svn_stream_from_stringbuf(hrb->cur, pool),
580
test_file_revs_both_ways(const svn_test_opts_t *opts,
583
svn_client__mtcc_t *mtcc;
584
svn_client_ctx_t *ctx;
585
apr_pool_t *subpool = svn_pool_create(pool);
586
const char *repos_url;
587
svn_ra_session_t *ra;
588
struct handle_rev_baton hrb;
590
SVN_ERR(svn_test__create_repos2(NULL, &repos_url, NULL, "mtcc-file-revs",
591
opts, pool, subpool));
593
SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
594
SVN_ERR(svn_test__init_auth_baton(&ctx->auth_baton, pool));
596
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 0, ctx, subpool, subpool));
597
SVN_ERR(svn_client__mtcc_add_add_file("iota",
598
cstr_stream("revision-1", subpool),
599
NULL /* src_checksum */,
601
SVN_ERR(verify_mtcc_commit(mtcc, 1, subpool));
602
svn_pool_clear(subpool);
604
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 1, ctx, subpool, subpool));
605
SVN_ERR(svn_client__mtcc_add_update_file("iota",
606
cstr_stream("revision-2", subpool),
607
NULL /* src_checksum */, NULL, NULL,
609
SVN_ERR(verify_mtcc_commit(mtcc, 2, subpool));
610
svn_pool_clear(subpool);
612
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 2, ctx, subpool, subpool));
613
SVN_ERR(svn_client__mtcc_add_update_file("iota",
614
cstr_stream("revision-3", subpool),
615
NULL /* src_checksum */, NULL, NULL,
617
SVN_ERR(verify_mtcc_commit(mtcc, 3, subpool));
618
svn_pool_clear(subpool);
620
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 3, ctx, subpool, subpool));
621
SVN_ERR(svn_client__mtcc_add_update_file("iota",
622
cstr_stream("revision-4", subpool),
623
NULL /* src_checksum */, NULL, NULL,
625
SVN_ERR(verify_mtcc_commit(mtcc, 4, subpool));
626
svn_pool_clear(subpool);
628
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 4, ctx, subpool, subpool));
629
SVN_ERR(svn_client__mtcc_add_move("iota", "mu", mtcc, subpool));
630
SVN_ERR(verify_mtcc_commit(mtcc, 5, subpool));
631
svn_pool_clear(subpool);
633
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 5, ctx, subpool, subpool));
634
SVN_ERR(svn_client__mtcc_add_update_file("mu",
635
cstr_stream("revision-6", subpool),
636
NULL /* src_checksum */, NULL, NULL,
638
SVN_ERR(verify_mtcc_commit(mtcc, 6, subpool));
639
svn_pool_clear(subpool);
641
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 6, ctx, subpool, subpool));
642
SVN_ERR(svn_client__mtcc_add_delete("mu", mtcc, subpool));
643
SVN_ERR(verify_mtcc_commit(mtcc, 7, subpool));
644
svn_pool_clear(subpool);
646
SVN_ERR(svn_client_open_ra_session2(&ra, repos_url, NULL, ctx, pool, subpool));
648
hrb.prev = svn_stringbuf_create("", pool);
649
hrb.cur = svn_stringbuf_create("", pool);
652
svn_pool_clear(subpool);
656
svn_stringbuf_setempty(hrb.prev);
657
svn_stringbuf_setempty(hrb.cur);
658
SVN_ERR(svn_ra_get_file_revs2(ra, "iota", 4, 1, FALSE,
661
SVN_TEST_ASSERT(hrb.last == 1);
663
svn_pool_clear(subpool);
667
svn_stringbuf_setempty(hrb.prev);
668
svn_stringbuf_setempty(hrb.cur);
669
SVN_ERR(svn_ra_get_file_revs2(ra, "iota", 1, 4, FALSE,
672
SVN_TEST_ASSERT(hrb.last == 4);
674
svn_pool_clear(subpool);
678
svn_stringbuf_setempty(hrb.prev);
679
svn_stringbuf_setempty(hrb.cur);
680
SVN_ERR(svn_ra_get_file_revs2(ra, "mu", 6, 1, FALSE,
683
SVN_TEST_ASSERT(hrb.last == 1);
685
svn_pool_clear(subpool);
689
svn_stringbuf_setempty(hrb.prev);
690
svn_stringbuf_setempty(hrb.cur);
691
SVN_ERR(svn_ra_get_file_revs2(ra, "mu", 1, 6, FALSE,
694
SVN_TEST_ASSERT(hrb.last == 6);
697
svn_pool_clear(subpool);
698
SVN_ERR(svn_client__mtcc_create(&mtcc, repos_url, 7, ctx, subpool, subpool));
699
SVN_ERR(svn_client__mtcc_add_copy("mu", 6, "mu", mtcc, subpool));
700
SVN_ERR(verify_mtcc_commit(mtcc, 8, subpool));
702
svn_pool_clear(subpool);
706
svn_stringbuf_setempty(hrb.prev);
707
svn_stringbuf_setempty(hrb.cur);
708
SVN_ERR(svn_ra_get_file_revs2(ra, "mu", 1, SVN_INVALID_REVNUM, FALSE,
711
SVN_TEST_ASSERT(hrb.last == 8);
713
svn_pool_clear(subpool);
717
svn_stringbuf_setempty(hrb.prev);
718
svn_stringbuf_setempty(hrb.cur);
719
SVN_ERR(svn_ra_get_file_revs2(ra, "mu", SVN_INVALID_REVNUM, 1, FALSE,
722
SVN_TEST_ASSERT(hrb.last == 1);
727
/* ========================================================================== */
730
static int max_threads = 3;
732
static struct svn_test_descriptor_t test_funcs[] =
735
SVN_TEST_OPTS_PASS(test_mkdir,
737
SVN_TEST_OPTS_PASS(test_mkgreek,
738
"test making greek tree"),
739
SVN_TEST_OPTS_PASS(test_swap,
740
"swapping some trees"),
741
SVN_TEST_OPTS_PASS(test_propset,
742
"test propset and propdel"),
743
SVN_TEST_OPTS_PASS(test_update_files,
744
"test update files"),
745
SVN_TEST_OPTS_PASS(test_overwrite,
747
SVN_TEST_OPTS_PASS(test_anchoring,
748
"test mtcc anchoring for root operations"),
749
SVN_TEST_OPTS_PASS(test_replace_tree,
750
"test mtcc replace tree"),
751
SVN_TEST_OPTS_PASS(test_file_revs_both_ways,
752
"test ra_get_file_revs2 both ways"),