]> git.proxmox.com Git - libgit2.git/blob - tests/odb/backend/nonrefreshing.c
ede48ade66e586cb19ba211f33c43e466068e2e1
[libgit2.git] / tests / odb / backend / nonrefreshing.c
1 #include "clar_libgit2.h"
2 #include "repository.h"
3 #include "backend_helpers.h"
4
5 static git_repository *_repo;
6 static fake_backend *_fake;
7
8 #define NONEXISTING_HASH "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
9 #define EXISTING_HASH "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"
10
11 static const fake_object _objects[] = {
12 { EXISTING_HASH, "" },
13 { NULL, NULL }
14 };
15
16 static git_oid _nonexisting_oid;
17 static git_oid _existing_oid;
18
19 static void setup_repository_and_backend(void)
20 {
21 git_odb *odb = NULL;
22 git_odb_backend *backend = NULL;
23
24 _repo = cl_git_sandbox_init("testrepo.git");
25
26 cl_git_pass(build_fake_backend(&backend, _objects));
27
28 cl_git_pass(git_repository_odb__weakptr(&odb, _repo));
29 cl_git_pass(git_odb_add_backend(odb, backend, 10));
30
31 _fake = (fake_backend *)backend;
32 }
33
34 void test_odb_backend_nonrefreshing__initialize(void)
35 {
36 git_oid_fromstr(&_nonexisting_oid, NONEXISTING_HASH);
37 git_oid_fromstr(&_existing_oid, EXISTING_HASH);
38 setup_repository_and_backend();
39 }
40
41 void test_odb_backend_nonrefreshing__cleanup(void)
42 {
43 cl_git_sandbox_cleanup();
44 }
45
46 void test_odb_backend_nonrefreshing__exists_is_invoked_once_on_failure(void)
47 {
48 git_odb *odb;
49
50 cl_git_pass(git_repository_odb__weakptr(&odb, _repo));
51 cl_assert_equal_b(false, git_odb_exists(odb, &_nonexisting_oid));
52
53 cl_assert_equal_i(1, _fake->exists_calls);
54 }
55
56 void test_odb_backend_nonrefreshing__read_is_invoked_once_on_failure(void)
57 {
58 git_object *obj;
59
60 cl_git_fail_with(
61 git_object_lookup(&obj, _repo, &_nonexisting_oid, GIT_OBJECT_ANY),
62 GIT_ENOTFOUND);
63
64 cl_assert_equal_i(1, _fake->read_calls);
65 }
66
67 void test_odb_backend_nonrefreshing__readprefix_is_invoked_once_on_failure(void)
68 {
69 git_object *obj;
70
71 cl_git_fail_with(
72 git_object_lookup_prefix(&obj, _repo, &_nonexisting_oid, 7, GIT_OBJECT_ANY),
73 GIT_ENOTFOUND);
74
75 cl_assert_equal_i(1, _fake->read_prefix_calls);
76 }
77
78 void test_odb_backend_nonrefreshing__readheader_is_invoked_once_on_failure(void)
79 {
80 git_odb *odb;
81 size_t len;
82 git_object_t type;
83
84 cl_git_pass(git_repository_odb__weakptr(&odb, _repo));
85
86 cl_git_fail_with(
87 git_odb_read_header(&len, &type, odb, &_nonexisting_oid),
88 GIT_ENOTFOUND);
89
90 cl_assert_equal_i(1, _fake->read_header_calls);
91 }
92
93 void test_odb_backend_nonrefreshing__exists_is_invoked_once_on_success(void)
94 {
95 git_odb *odb;
96
97 cl_git_pass(git_repository_odb__weakptr(&odb, _repo));
98 cl_assert_equal_b(true, git_odb_exists(odb, &_existing_oid));
99
100 cl_assert_equal_i(1, _fake->exists_calls);
101 }
102
103 void test_odb_backend_nonrefreshing__read_is_invoked_once_on_success(void)
104 {
105 git_object *obj;
106
107 cl_git_pass(git_object_lookup(&obj, _repo, &_existing_oid, GIT_OBJECT_ANY));
108
109 cl_assert_equal_i(1, _fake->read_calls);
110
111 git_object_free(obj);
112 }
113
114 void test_odb_backend_nonrefreshing__readprefix_is_invoked_once_on_success(void)
115 {
116 git_object *obj;
117
118 cl_git_pass(git_object_lookup_prefix(&obj, _repo, &_existing_oid, 7, GIT_OBJECT_ANY));
119
120 cl_assert_equal_i(1, _fake->read_prefix_calls);
121
122 git_object_free(obj);
123 }
124
125 void test_odb_backend_nonrefreshing__readheader_is_invoked_once_on_success(void)
126 {
127 git_odb *odb;
128 size_t len;
129 git_object_t type;
130
131 cl_git_pass(git_repository_odb__weakptr(&odb, _repo));
132
133 cl_git_pass(git_odb_read_header(&len, &type, odb, &_existing_oid));
134
135 cl_assert_equal_i(1, _fake->read_header_calls);
136 }
137
138 void test_odb_backend_nonrefreshing__read_is_invoked_once_when_revparsing_a_full_oid(void)
139 {
140 git_object *obj;
141
142 cl_git_fail_with(
143 git_revparse_single(&obj, _repo, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"),
144 GIT_ENOTFOUND);
145
146 cl_assert_equal_i(1, _fake->read_calls);
147 }