t/unit-tests: introduce test helper to write reftable blocks

Introduce a new test helper that allows us to write reftable blocks. This helper will be used by subsequent commits. Suggested-by: Christian Couder <christian.couder@gmail.com> Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jul 3, 2026 at 14:58 UTC a0eb4ca66b6ca701ada355a20bc7083bed0ac7a2
1 file changed +28 -19
t/unit-tests/u-reftable-block.c
+28 -19
@@ -14,6 +14,31 @@ https://developers.google.com/open-source/licenses/bsd
14 #include "reftable/reftable-error.h"
15 #include "strbuf.h"
16
17 +static int cl_reftable_write_block(struct reftable_buf *buf,
18 + uint8_t block_type,
19 + struct reftable_record *recs,
20 + size_t nrecs)
21 +{
22 + struct block_writer writer = {
23 + .last_key = REFTABLE_BUF_INIT,
24 + };
25 + uint8_t block[1024];
26 + int block_end;
27 +
28 + cl_must_pass(block_writer_init(&writer, block_type, block, 1024,
29 + 0, hash_size(REFTABLE_HASH_SHA1)));
30 + for (size_t i = 0; i < nrecs; i++)
31 + cl_must_pass(block_writer_add(&writer, &recs[i]));
32 +
33 + block_end = block_writer_finish(&writer);
34 + cl_assert(block_end > 0);
35 +
36 + cl_must_pass(reftable_buf_add(buf, block, block_end));
37 +
38 + block_writer_release(&writer);
39 + return block_end;
40 +}
41 +
42 void test_reftable_block__read_write(void)
43 {
44 const int header_off = 21; /* random */
@@ -381,25 +406,13 @@ void test_reftable_block__ref_read_write(void)
406 void test_reftable_block__iterator(void)
407 {
408 struct reftable_block_source source = { 0 };
384 - struct block_writer writer = {
385 - .last_key = REFTABLE_BUF_INIT,
386 - };
409 struct reftable_record expected_refs[20];
410 struct reftable_ref_record ref = { 0 };
411 struct reftable_iterator it = { 0 };
412 struct reftable_block block = { 0 };
391 - struct reftable_buf data;
413 + struct reftable_buf data = REFTABLE_BUF_INIT;
414 int err;
415
394 - data.len = 1024;
395 - REFTABLE_CALLOC_ARRAY(data.buf, data.len);
396 - cl_assert(data.buf != NULL);
397 -
398 - err = block_writer_init(&writer, REFTABLE_BLOCK_TYPE_REF,
399 - (uint8_t *) data.buf, data.len,
400 - 0, hash_size(REFTABLE_HASH_SHA1));
401 - cl_assert(!err);
402 -
416 for (size_t i = 0; i < ARRAY_SIZE(expected_refs); i++) {
417 expected_refs[i] = (struct reftable_record) {
418 .type = REFTABLE_BLOCK_TYPE_REF,
@@ -409,13 +422,10 @@ void test_reftable_block__iterator(void)
422 },
423 };
424 memset(expected_refs[i].u.ref.value.val1, i, REFTABLE_HASH_SIZE_SHA1);
412 -
413 - err = block_writer_add(&writer, &expected_refs[i]);
414 - cl_assert_equal_i(err, 0);
425 }
426
417 - err = block_writer_finish(&writer);
418 - cl_assert(err > 0);
427 + cl_reftable_write_block(&data, REFTABLE_BLOCK_TYPE_REF,
428 + expected_refs, ARRAY_SIZE(expected_refs));
429
430 block_source_from_buf(&source, &data);
431 reftable_block_init(&block, &source, 0, 0, data.len,
@@ -453,6 +463,5 @@ void test_reftable_block__iterator(void)
463 reftable_ref_record_release(&ref);
464 reftable_iterator_destroy(&it);
465 reftable_block_release(&block);
456 - block_writer_release(&writer);
466 reftable_buf_release(&data);
467 }