summaryrefslogtreecommitdiff
path: root/tests/odb/backend/backend_helpers.c
blob: 21b33b9398685591fbe7f2b1c2f327d68cc0fde9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include "clar_libgit2.h"
#include "git2/sys/odb_backend.h"
#include "backend_helpers.h"

static int fake_backend__exists(git_odb_backend *backend, const git_oid *oid)
{
	fake_backend *fake;

	GIT_UNUSED(oid);

	fake = (fake_backend *)backend;

	fake->exists_calls++;

	return (fake->error_code == GIT_OK);
}

static int fake_backend__read(
	void **buffer_p, size_t *len_p, git_otype *type_p,
	git_odb_backend *backend, const git_oid *oid)
{
	fake_backend *fake;

	GIT_UNUSED(buffer_p);
	GIT_UNUSED(len_p);
	GIT_UNUSED(type_p);
	GIT_UNUSED(oid);

	fake = (fake_backend *)backend;

	fake->read_calls++;

	*len_p = 0;
	*buffer_p = NULL;
	*type_p = GIT_OBJ_BLOB;

	return fake->error_code;
}

static int fake_backend__read_header(
	size_t *len_p, git_otype *type_p,
	git_odb_backend *backend, const git_oid *oid)
{
	fake_backend *fake;

	GIT_UNUSED(len_p);
	GIT_UNUSED(type_p);
	GIT_UNUSED(oid);

	fake = (fake_backend *)backend;

	fake->read_header_calls++;

	*len_p = 0;
	*type_p = GIT_OBJ_BLOB;

	return fake->error_code;
}

static int fake_backend__read_prefix(
	git_oid *out_oid, void **buffer_p, size_t *len_p, git_otype *type_p,
	git_odb_backend *backend, const git_oid *short_oid, size_t len)
{
	fake_backend *fake;

	GIT_UNUSED(buffer_p);
	GIT_UNUSED(len_p);
	GIT_UNUSED(type_p);
	GIT_UNUSED(short_oid);
	GIT_UNUSED(len);

	fake = (fake_backend *)backend;

	fake->read_prefix_calls++;

	git_oid_cpy(out_oid, &fake->oid);
	*len_p = 0;
	*buffer_p = NULL;
	*type_p = GIT_OBJ_BLOB;

	return fake->error_code;
}

static void fake_backend__free(git_odb_backend *_backend)
{
	fake_backend *backend;

	backend = (fake_backend *)_backend;

	git__free(backend);
}

int build_fake_backend(
	git_odb_backend **out,
	git_error_code error_code,
	const git_oid *oid)
{
	fake_backend *backend;

	backend = git__calloc(1, sizeof(fake_backend));
	GITERR_CHECK_ALLOC(backend);

	backend->parent.version = GIT_ODB_BACKEND_VERSION;

	backend->parent.refresh = NULL;
	backend->error_code = error_code;

	backend->parent.read = fake_backend__read;
	backend->parent.read_prefix = fake_backend__read_prefix;
	backend->parent.read_header = fake_backend__read_header;
	backend->parent.exists = fake_backend__exists;
	backend->parent.free = &fake_backend__free;

	git_oid_cpy(&backend->oid, oid);

	*out = (git_odb_backend *)backend;

	return 0;
}