Skip to content

Commit a4b5ac6

Browse files
author
Edward Thomson
authored
Merge pull request libgit2#4138 from richardipsum/symbolic-create-arbitrary-tgt-test
tests: Add create__symbolic_with_arbitrary_content
2 parents 55d911d + b84e58f commit a4b5ac6

File tree

1 file changed

+54
-5
lines changed

1 file changed

+54
-5
lines changed

tests/refs/create.c

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,20 @@ static git_repository *g_repo;
1212

1313
void test_refs_create__initialize(void)
1414
{
15-
g_repo = cl_git_sandbox_init("testrepo");
15+
g_repo = cl_git_sandbox_init("testrepo");
1616
}
1717

1818
void test_refs_create__cleanup(void)
1919
{
20-
cl_git_sandbox_cleanup();
20+
cl_git_sandbox_cleanup();
2121

2222
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 1));
23+
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, 1));
2324
}
2425

2526
void test_refs_create__symbolic(void)
2627
{
27-
// create a new symbolic reference
28+
/* create a new symbolic reference */
2829
git_reference *new_reference, *looked_up_ref, *resolved_ref;
2930
git_repository *repo2;
3031
git_oid id;
@@ -65,9 +66,57 @@ void test_refs_create__symbolic(void)
6566
git_reference_free(resolved_ref);
6667
}
6768

69+
void test_refs_create__symbolic_with_arbitrary_content(void)
70+
{
71+
git_reference *new_reference, *looked_up_ref;
72+
git_repository *repo2;
73+
git_oid id;
74+
75+
const char *new_head_tracker = "ANOTHER_HEAD_TRACKER";
76+
const char *arbitrary_target = "ARBITRARY DATA";
77+
78+
git_oid_fromstr(&id, current_master_tip);
79+
80+
/* Attempt to create symbolic ref with arbitrary data in target
81+
* fails by default
82+
*/
83+
cl_git_fail(git_reference_symbolic_create(&new_reference, g_repo, new_head_tracker, arbitrary_target, 0, NULL));
84+
85+
git_libgit2_opts(GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION, 0);
86+
87+
/* With strict target validation disabled, ref creation succeeds */
88+
cl_git_pass(git_reference_symbolic_create(&new_reference, g_repo, new_head_tracker, arbitrary_target, 0, NULL));
89+
90+
/* Ensure the reference can be looked-up... */
91+
cl_git_pass(git_reference_lookup(&looked_up_ref, g_repo, new_head_tracker));
92+
cl_assert(git_reference_type(looked_up_ref) & GIT_REF_SYMBOLIC);
93+
cl_assert(reference_is_packed(looked_up_ref) == 0);
94+
cl_assert_equal_s(looked_up_ref->name, new_head_tracker);
95+
96+
/* Ensure the target is what we expect it to be */
97+
cl_assert_equal_s(git_reference_symbolic_target(new_reference), arbitrary_target);
98+
99+
/* Similar test with a fresh new repository object */
100+
cl_git_pass(git_repository_open(&repo2, "testrepo"));
101+
102+
/* Ensure the reference can be looked-up... */
103+
cl_git_pass(git_reference_lookup(&looked_up_ref, repo2, new_head_tracker));
104+
cl_assert(git_reference_type(looked_up_ref) & GIT_REF_SYMBOLIC);
105+
cl_assert(reference_is_packed(looked_up_ref) == 0);
106+
cl_assert_equal_s(looked_up_ref->name, new_head_tracker);
107+
108+
/* Ensure the target is what we expect it to be */
109+
cl_assert_equal_s(git_reference_symbolic_target(new_reference), arbitrary_target);
110+
111+
git_repository_free(repo2);
112+
git_reference_free(new_reference);
113+
git_reference_free(looked_up_ref);
114+
115+
}
116+
68117
void test_refs_create__deep_symbolic(void)
69118
{
70-
// create a deep symbolic reference
119+
/* create a deep symbolic reference */
71120
git_reference *new_reference, *looked_up_ref, *resolved_ref;
72121
git_oid id;
73122

@@ -87,7 +136,7 @@ void test_refs_create__deep_symbolic(void)
87136

88137
void test_refs_create__oid(void)
89138
{
90-
// create a new OID reference
139+
/* create a new OID reference */
91140
git_reference *new_reference, *looked_up_ref;
92141
git_repository *repo2;
93142
git_oid id;

0 commit comments

Comments
 (0)