]>
Commit | Line | Data |
---|---|---|
d4b5a4e2 VM |
1 | /* |
2 | * This file is free software; you can redistribute it and/or modify | |
3 | * it under the terms of the GNU General Public License, version 2, | |
4 | * as published by the Free Software Foundation. | |
5 | * | |
6 | * In addition to the permissions in the GNU General Public License, | |
7 | * the authors give you unlimited permission to link the compiled | |
8 | * version of this file into combinations with other programs, | |
9 | * and to distribute those combinations without any restriction | |
10 | * coming from the use of this file. (The General Public License | |
11 | * restrictions do apply in other respects; for example, they cover | |
12 | * modification of the file, and distribution when not linked into | |
13 | * a combined executable.) | |
14 | * | |
15 | * This file is distributed in the hope that it will be useful, but | |
16 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 | * General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License | |
21 | * along with this program; see the file COPYING. If not, write to | |
22 | * the Free Software Foundation, 51 Franklin Street, Fifth Floor, | |
23 | * Boston, MA 02110-1301, USA. | |
24 | */ | |
25 | #include "test_lib.h" | |
26 | #include "test_helpers.h" | |
27 | ||
28 | #include "odb.h" | |
29 | #include "git2/odb_backend.h" | |
705a90ec | 30 | #include "repository.h" |
d4b5a4e2 VM |
31 | |
32 | typedef struct { | |
33 | git_odb_backend base; | |
34 | int position; | |
35 | } fake_backend; | |
36 | ||
37 | git_odb_backend *new_backend(int position) | |
38 | { | |
39 | fake_backend *b; | |
40 | ||
41 | b = git__malloc(sizeof(fake_backend)); | |
42 | if (b == NULL) | |
43 | return NULL; | |
44 | ||
45 | memset(b, 0x0, sizeof(fake_backend)); | |
46 | b->position = position; | |
47 | return (git_odb_backend *)b; | |
48 | } | |
49 | ||
50 | int test_backend_sorting(git_odb *odb) | |
51 | { | |
52 | unsigned int i; | |
53 | ||
54 | for (i = 0; i < odb->backends.length; ++i) { | |
55 | fake_backend *internal = *((fake_backend **)git_vector_get(&odb->backends, i)); | |
56 | ||
57 | if (internal == NULL) | |
58 | return GIT_ERROR; | |
59 | ||
60 | if (internal->position != (int)i) | |
61 | return GIT_ERROR; | |
62 | } | |
63 | ||
64 | return GIT_SUCCESS; | |
65 | } | |
66 | ||
3dccfed1 | 67 | BEGIN_TEST(odb0, "assure that ODB backends are properly sorted") |
d4b5a4e2 VM |
68 | git_odb *odb; |
69 | must_pass(git_odb_new(&odb)); | |
70 | must_pass(git_odb_add_backend(odb, new_backend(0), 5)); | |
71 | must_pass(git_odb_add_backend(odb, new_backend(2), 3)); | |
72 | must_pass(git_odb_add_backend(odb, new_backend(1), 4)); | |
73 | must_pass(git_odb_add_backend(odb, new_backend(3), 1)); | |
74 | must_pass(test_backend_sorting(odb)); | |
75 | git_odb_close(odb); | |
76 | END_TEST | |
77 | ||
3dccfed1 | 78 | BEGIN_TEST(odb1, "assure that alternate backends are properly sorted") |
d4b5a4e2 VM |
79 | git_odb *odb; |
80 | must_pass(git_odb_new(&odb)); | |
81 | must_pass(git_odb_add_backend(odb, new_backend(0), 5)); | |
82 | must_pass(git_odb_add_backend(odb, new_backend(2), 3)); | |
83 | must_pass(git_odb_add_backend(odb, new_backend(1), 4)); | |
84 | must_pass(git_odb_add_backend(odb, new_backend(3), 1)); | |
85 | must_pass(git_odb_add_alternate(odb, new_backend(4), 5)); | |
86 | must_pass(git_odb_add_alternate(odb, new_backend(6), 3)); | |
87 | must_pass(git_odb_add_alternate(odb, new_backend(5), 4)); | |
88 | must_pass(git_odb_add_alternate(odb, new_backend(7), 1)); | |
89 | must_pass(test_backend_sorting(odb)); | |
90 | git_odb_close(odb); | |
91 | END_TEST | |
92 | ||
705a90ec | 93 | |
94 | #define STANDARD_REPOSITORY 0 | |
95 | #define BARE_REPOSITORY 1 | |
96 | ||
3dccfed1 VM |
97 | static int ensure_repository_init( |
98 | const char *working_directory, | |
99 | int repository_kind, | |
100 | const char *expected_path_index, | |
101 | const char *expected_path_repository, | |
102 | const char *expected_working_directory) | |
705a90ec | 103 | { |
104 | char path_odb[GIT_PATH_MAX]; | |
105 | git_repository *repo; | |
106 | ||
3dccfed1 VM |
107 | if (gitfo_isdir(working_directory) == GIT_SUCCESS) |
108 | return GIT_ERROR; | |
705a90ec | 109 | |
110 | git__joinpath(path_odb, expected_path_repository, GIT_OBJECTS_DIR); | |
111 | ||
3dccfed1 VM |
112 | if (git_repository_init(&repo, working_directory, repository_kind) < GIT_SUCCESS) |
113 | return GIT_ERROR; | |
114 | ||
115 | if (repo->path_workdir != NULL || expected_working_directory != NULL) { | |
116 | if (strcmp(repo->path_workdir, expected_working_directory) != 0) | |
117 | return GIT_ERROR; | |
118 | } | |
119 | ||
120 | if (strcmp(repo->path_odb, path_odb) != 0) | |
121 | return GIT_ERROR; | |
122 | ||
123 | if (strcmp(repo->path_repository, expected_path_repository) != 0) | |
124 | return GIT_ERROR; | |
125 | ||
126 | if (repo->path_index != NULL || expected_path_index != NULL) { | |
127 | if (strcmp(repo->path_index, expected_path_index) != 0) | |
128 | return GIT_ERROR; | |
129 | } | |
705a90ec | 130 | |
131 | git_repository_free(repo); | |
3dccfed1 VM |
132 | rmdir_recurs(working_directory); |
133 | ||
134 | return GIT_SUCCESS; | |
705a90ec | 135 | } |
136 | ||
3dccfed1 | 137 | BEGIN_TEST(init0, "initialize a standard repo") |
705a90ec | 138 | char path_index[GIT_PATH_MAX], path_repository[GIT_PATH_MAX]; |
139 | ||
3dccfed1 | 140 | git__joinpath(path_repository, TEMP_REPO_FOLDER, GIT_DIR); |
705a90ec | 141 | git__joinpath(path_index, path_repository, GIT_INDEX_FILE); |
142 | ||
3dccfed1 VM |
143 | ensure_repository_init(TEMP_REPO_FOLDER, STANDARD_REPOSITORY, path_index, path_repository, TEMP_REPO_FOLDER); |
144 | ensure_repository_init(TEMP_REPO_FOLDER_NS, STANDARD_REPOSITORY, path_index, path_repository, TEMP_REPO_FOLDER); | |
705a90ec | 145 | END_TEST |
146 | ||
3dccfed1 | 147 | BEGIN_TEST(init1, "initialize a bare repo") |
705a90ec | 148 | char path_repository[GIT_PATH_MAX]; |
149 | ||
3dccfed1 | 150 | git__joinpath(path_repository, TEMP_REPO_FOLDER, ""); |
705a90ec | 151 | |
3dccfed1 VM |
152 | ensure_repository_init(TEMP_REPO_FOLDER, BARE_REPOSITORY, NULL, path_repository, NULL); |
153 | ensure_repository_init(TEMP_REPO_FOLDER_NS, BARE_REPOSITORY, NULL, path_repository, NULL); | |
705a90ec | 154 | END_TEST |
155 | ||
d4b5a4e2 | 156 | |
3dccfed1 VM |
157 | BEGIN_SUITE(repository) |
158 | ADD_TEST(odb0); | |
159 | ADD_TEST(odb1); | |
160 | ADD_TEST(init0); | |
161 | ADD_TEST(init1); | |
162 | END_SUITE | |
d4b5a4e2 | 163 |