You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/03/09 16:43:05 UTC
svn commit: r1665261 - /subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
Author: rhuijben
Date: Mon Mar 9 15:43:05 2015
New Revision: 1665261
URL: http://svn.apache.org/r1665261
Log:
Add a regression test exercising various ra apis with bad revisions to see
how they behave.
A few problems found using this tests have already been resolved
in r1665213, r1665259.
* subversion/tests/libsvn_ra/ra-test.c
(ra_revision_errors): New test.
(test_funcs): Add ra_revision_errors.
Modified:
subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
Modified: subversion/trunk/subversion/tests/libsvn_ra/ra-test.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_ra/ra-test.c?rev=1665261&r1=1665260&r2=1665261&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/trunk/subversion/tests/libsvn_ra/ra-test.c Mon Mar 9 15:43:05 2015
@@ -757,6 +757,204 @@ delete_revision_above_youngest(const svn
return SVN_NO_ERROR;
}
+static svn_error_t *
+ra_revision_errors(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_ra_session_t *ra_session;
+ const svn_delta_editor_t *editor;
+ svn_error_t *err;
+ void *edit_baton;
+
+
+ SVN_ERR(make_and_open_repos(&ra_session, "ra_revision_errors",
+ opts, pool));
+
+ SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
+ apr_hash_make(pool), NULL,
+ NULL, NULL, FALSE, pool));
+
+ {
+ void *root_baton;
+ void *dir_baton;
+ void *file_baton;
+
+ SVN_ERR(editor->open_root(edit_baton, 0, pool, &root_baton));
+ SVN_ERR(editor->add_directory("A", root_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &dir_baton));
+ SVN_ERR(editor->add_file("A/iota", dir_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &file_baton));
+ SVN_ERR(editor->close_file(file_baton, NULL, pool));
+ SVN_ERR(editor->close_directory(dir_baton, pool));
+ SVN_ERR(editor->add_directory("B", root_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &dir_baton));
+ SVN_ERR(editor->close_directory(dir_baton, pool));
+ SVN_ERR(editor->add_directory("C", root_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &dir_baton));
+ SVN_ERR(editor->close_directory(dir_baton, pool));
+ SVN_ERR(editor->add_directory("D", root_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &dir_baton));
+ SVN_ERR(editor->close_directory(dir_baton, pool));
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+ }
+
+ {
+ svn_ra_reporter3_t *reporter;
+ void *report_baton;
+
+ err = svn_ra_do_update3(ra_session, &reporter, &report_baton,
+ 2, "", svn_depth_infinity, FALSE, FALSE,
+ svn_delta_default_editor(pool), NULL,
+ pool, pool);
+
+ if (!err)
+ err = reporter->set_path(report_baton, "", 0, svn_depth_infinity, FALSE,
+ NULL, pool);
+
+ if (!err)
+ err = reporter->finish_report(report_baton, pool);
+
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_NO_SUCH_REVISION);
+ }
+
+ {
+ svn_ra_reporter3_t *reporter;
+ void *report_baton;
+
+ err = svn_ra_do_update3(ra_session, &reporter, &report_baton,
+ 1, "", svn_depth_infinity, FALSE, FALSE,
+ svn_delta_default_editor(pool), NULL,
+ pool, pool);
+
+ if (!err)
+ err = reporter->set_path(report_baton, "", 2, svn_depth_infinity, FALSE,
+ NULL, pool);
+
+ if (!err)
+ err = reporter->finish_report(report_baton, pool);
+
+ SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_NO_SUCH_REVISION);
+ }
+
+ {
+ svn_ra_reporter3_t *reporter;
+ void *report_baton;
+
+ err = svn_ra_do_update3(ra_session, &reporter, &report_baton,
+ 1, "", svn_depth_infinity, FALSE, FALSE,
+ svn_delta_default_editor(pool), NULL,
+ pool, pool);
+
+ if (!err)
+ err = reporter->set_path(report_baton, "", 0, svn_depth_infinity, FALSE,
+ NULL, pool);
+
+ if (!err)
+ err = reporter->finish_report(report_baton, pool);
+
+ SVN_ERR(err);
+ }
+
+ {
+ svn_revnum_t revision;
+
+ SVN_ERR(svn_ra_get_dated_revision(ra_session, &revision,
+ apr_time_now() - apr_time_from_sec(3600),
+ pool));
+
+ SVN_TEST_ASSERT(revision == 0);
+
+ SVN_ERR(svn_ra_get_dated_revision(ra_session, &revision,
+ apr_time_now() + apr_time_from_sec(3600),
+ pool));
+
+ SVN_TEST_ASSERT(revision == 1);
+ }
+
+ {
+ /* SVN_INVALID_REVNUM is protected by assert in ra loader */
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_change_rev_prop2(ra_session,
+ 2,
+ "bad", NULL,
+ svn_string_create("value",
+ pool),
+ pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+ }
+
+ {
+ apr_hash_t *props;
+ svn_string_t *value;
+
+ /* SVN_INVALID_REVNUM is protected by assert in ra loader */
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_rev_proplist(ra_session, 2, &props, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_rev_prop(ra_session, 2, "bad", &value, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+ }
+
+ {
+ apr_hash_t *props;
+ svn_string_t *value;
+
+ /* SVN_INVALID_REVNUM is protected by assert in ra loader */
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_rev_proplist(ra_session, 2, &props, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_rev_prop(ra_session, 2, "bad", &value, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+ }
+
+ {
+ svn_revnum_t fetched;
+ apr_hash_t *props;
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_get_file(ra_session, "A", 1,
+ svn_stream_empty(pool), &fetched,
+ &props, pool),
+ SVN_ERR_FS_NOT_FILE);
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_get_file(ra_session, "A/iota", 2,
+ svn_stream_empty(pool), &fetched,
+ &props, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+
+ SVN_ERR(svn_ra_get_file(ra_session, "A/iota", SVN_INVALID_REVNUM,
+ svn_stream_empty(pool), &fetched,
+ &props, pool));
+ SVN_TEST_ASSERT(fetched == 1);
+ }
+
+ {
+ svn_revnum_t fetched;
+ apr_hash_t *dirents;
+ apr_hash_t *props;
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_get_dir2(ra_session, &dirents, &fetched,
+ &props, "A/iota", 1,
+ SVN_DIRENT_ALL, pool),
+ SVN_ERR_FS_NOT_DIRECTORY);
+
+ SVN_TEST_ASSERT_ERROR(svn_ra_get_dir2(ra_session, &dirents, &fetched,
+ &props, "A", 3,
+ SVN_DIRENT_ALL, pool),
+ SVN_ERR_FS_NO_SUCH_REVISION);
+
+ SVN_DBG(("Final"));
+ SVN_ERR(svn_ra_get_dir2(ra_session, &dirents, &fetched,
+ &props, "A", SVN_INVALID_REVNUM,
+ SVN_DIRENT_ALL, pool));
+ SVN_TEST_ASSERT(fetched == 1);
+ SVN_TEST_ASSERT(apr_hash_count(dirents) == 1);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
@@ -781,6 +979,8 @@ static struct svn_test_descriptor_t test
"base revision newer than youngest"),
SVN_TEST_OPTS_PASS(delete_revision_above_youngest,
"delete revision newer than youngest"),
+ SVN_TEST_OPTS_PASS(ra_revision_errors,
+ "check how ra functions handle bad revisions"),
SVN_TEST_NULL
};