Skip to content

Commit 5cba561

Browse files
Chandra Pratapgitster
authored andcommitted
t-reftable-block: add tests for log blocks
In the current testing setup, block operations are only exercised for ref blocks. Add another test that exercises these operations for log blocks as well. Mentored-by: Patrick Steinhardt <[email protected]> Mentored-by: Christian Couder <[email protected]> Signed-off-by: Chandra Pratap <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent abcddce commit 5cba561

File tree

1 file changed

+91
-2
lines changed

1 file changed

+91
-2
lines changed

t/unit-tests/t-reftable-block.c

Lines changed: 91 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ license that can be found in the LICENSE file or at
1212
#include "reftable/constants.h"
1313
#include "reftable/reftable-error.h"
1414

15-
static void t_block_read_write(void)
15+
static void t_ref_block_read_write(void)
1616
{
1717
const int header_off = 21; /* random */
1818
struct reftable_record recs[30];
@@ -103,9 +103,98 @@ static void t_block_read_write(void)
103103
reftable_record_release(&recs[i]);
104104
}
105105

106+
static void t_log_block_read_write(void)
107+
{
108+
const int header_off = 21;
109+
struct reftable_record recs[30];
110+
const size_t N = ARRAY_SIZE(recs);
111+
const size_t block_size = 2048;
112+
struct reftable_block block = { 0 };
113+
struct block_writer bw = {
114+
.last_key = STRBUF_INIT,
115+
};
116+
struct reftable_record rec = {
117+
.type = BLOCK_TYPE_LOG,
118+
};
119+
size_t i = 0;
120+
int ret;
121+
struct block_reader br = { 0 };
122+
struct block_iter it = BLOCK_ITER_INIT;
123+
struct strbuf want = STRBUF_INIT, buf = STRBUF_INIT;
124+
125+
REFTABLE_CALLOC_ARRAY(block.data, block_size);
126+
block.len = block_size;
127+
block_source_from_strbuf(&block.source ,&buf);
128+
block_writer_init(&bw, BLOCK_TYPE_LOG, block.data, block_size,
129+
header_off, hash_size(GIT_SHA1_FORMAT_ID));
130+
131+
for (i = 0; i < N; i++) {
132+
rec.u.log.refname = xstrfmt("branch%02"PRIuMAX , (uintmax_t)i);
133+
rec.u.log.update_index = i;
134+
rec.u.log.value_type = REFTABLE_LOG_UPDATE;
135+
136+
recs[i] = rec;
137+
ret = block_writer_add(&bw, &rec);
138+
rec.u.log.refname = NULL;
139+
rec.u.log.value_type = REFTABLE_LOG_DELETION;
140+
check_int(ret, ==, 0);
141+
}
142+
143+
ret = block_writer_finish(&bw);
144+
check_int(ret, >, 0);
145+
146+
block_writer_release(&bw);
147+
148+
block_reader_init(&br, &block, header_off, block_size, GIT_SHA1_RAWSZ);
149+
150+
block_iter_seek_start(&it, &br);
151+
152+
for (i = 0; ; i++) {
153+
ret = block_iter_next(&it, &rec);
154+
check_int(ret, >=, 0);
155+
if (ret > 0) {
156+
check_int(i, ==, N);
157+
break;
158+
}
159+
check(reftable_record_equal(&recs[i], &rec, GIT_SHA1_RAWSZ));
160+
}
161+
162+
for (i = 0; i < N; i++) {
163+
block_iter_reset(&it);
164+
strbuf_reset(&want);
165+
strbuf_addstr(&want, recs[i].u.log.refname);
166+
167+
ret = block_iter_seek_key(&it, &br, &want);
168+
check_int(ret, ==, 0);
169+
170+
ret = block_iter_next(&it, &rec);
171+
check_int(ret, ==, 0);
172+
173+
check(reftable_record_equal(&recs[i], &rec, GIT_SHA1_RAWSZ));
174+
175+
want.len--;
176+
ret = block_iter_seek_key(&it, &br, &want);
177+
check_int(ret, ==, 0);
178+
179+
ret = block_iter_next(&it, &rec);
180+
check_int(ret, ==, 0);
181+
check(reftable_record_equal(&recs[10 * (i / 10)], &rec, GIT_SHA1_RAWSZ));
182+
}
183+
184+
block_reader_release(&br);
185+
block_iter_close(&it);
186+
reftable_record_release(&rec);
187+
reftable_block_done(&br.block);
188+
strbuf_release(&want);
189+
strbuf_release(&buf);
190+
for (i = 0; i < N; i++)
191+
reftable_record_release(&recs[i]);
192+
}
193+
106194
int cmd_main(int argc, const char *argv[])
107195
{
108-
TEST(t_block_read_write(), "read-write operations on blocks work");
196+
TEST(t_log_block_read_write(), "read-write operations on log blocks work");
197+
TEST(t_ref_block_read_write(), "read-write operations on ref blocks work");
109198

110199
return test_done();
111200
}

0 commit comments

Comments
 (0)