From 501d35ccf853d5e9fc1d09e513f7de75395e6347 Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Tue, 29 Jan 2013 12:16:59 -0800 Subject: Test config name validation This is @nulltoken's work to test various invalid config section and key names and make sure we are validating properly. --- tests-clar/config/validkeyname.c | 68 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests-clar/config/validkeyname.c (limited to 'tests-clar/config/validkeyname.c') diff --git a/tests-clar/config/validkeyname.c b/tests-clar/config/validkeyname.c new file mode 100644 index 000000000..03c13d723 --- /dev/null +++ b/tests-clar/config/validkeyname.c @@ -0,0 +1,68 @@ +#include "clar_libgit2.h" + +#include "config.h" + +static git_config *cfg; +static const char *value; + +void test_config_validkeyname__initialize(void) +{ + cl_fixture_sandbox("config/config10"); + + cl_git_pass(git_config_open_ondisk(&cfg, "config10")); +} + +void test_config_validkeyname__cleanup(void) +{ + git_config_free(cfg); + cfg = NULL; + + cl_fixture_cleanup("config10"); +} + +static void assert_invalid_config_key_name(const char *name) +{ + cl_git_fail_with(git_config_get_string(&value, cfg, name), + GIT_EINVALIDSPEC); + cl_git_fail_with(git_config_set_string(cfg, name, "42"), + GIT_EINVALIDSPEC); + cl_git_fail_with(git_config_delete_entry(cfg, name), + GIT_EINVALIDSPEC); + cl_git_fail_with(git_config_get_multivar(cfg, name, "*", NULL, NULL), + GIT_EINVALIDSPEC); + cl_git_fail_with(git_config_set_multivar(cfg, name, "*", "42"), + GIT_EINVALIDSPEC); +} + +void test_config_validkeyname__accessing_requires_a_valid_name(void) +{ + assert_invalid_config_key_name(""); + assert_invalid_config_key_name("."); + assert_invalid_config_key_name(".."); + assert_invalid_config_key_name("core."); + assert_invalid_config_key_name("d#ff.dirstat.lines"); + assert_invalid_config_key_name("diff.dirstat.lines#"); + assert_invalid_config_key_name("dif\nf.dirstat.lines"); + assert_invalid_config_key_name("dif.dir\nstat.lines"); + assert_invalid_config_key_name("dif.dirstat.li\nes"); +} + +static void assert_invalid_config_section_name(git_repository *repo, const char *name) +{ + cl_git_fail_with(git_config_rename_section(repo, "branch.remoteless", name), GIT_EINVALIDSPEC); +} + +void test_config_validkeyname__renaming_a_section_requires_a_valid_name(void) +{ + git_repository *repo; + + cl_git_pass(git_repository_open(&repo, cl_fixture("testrepo.git"))); + + assert_invalid_config_section_name(repo, ""); + assert_invalid_config_section_name(repo, "bra\nch"); + assert_invalid_config_section_name(repo, "branc#"); + assert_invalid_config_section_name(repo, "bra\nch.duh"); + assert_invalid_config_section_name(repo, "branc#.duh"); + + git_repository_free(repo); +} -- cgit v1.2.3