t-reftable-block: use reftable_record_equal() instead of check_str()
In the current testing setup, operations like read and write for reftable blocks as defined by reftable/block.{c, h} are verified by comparing only the keys of input and output reftable records. This is not ideal because there can exist inequal reftable records with the same key. Use the dedicated function for record comparison, reftable_record_equal(), instead of key-based comparison. Mentored-by: Patrick Steinhardt <ps@pks.im> Mentored-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Chandra Pratap committed
Aug 21, 2024 at 18:00 UTC
e638e9c8f3c3e7173e53d50d6d2b06a5f8f02ed8
1 file changed
+9
-9
t/unit-tests/t-reftable-block.c
+9
-9
@@ -15,8 +15,8 @@ https://developers.google.com/open-source/licenses/bsd
15
static void t_block_read_write(void)
16
{
17
const int header_off = 21; /* random */
18
- char *names[30];
19
- const size_t N = ARRAY_SIZE(names);
18
+ struct reftable_record recs[30];
19
+ const size_t N = ARRAY_SIZE(recs);
20
const size_t block_size = 1024;
21
struct reftable_block block = { 0 };
22
struct block_writer bw = {
@@ -47,11 +47,11 @@ static void t_block_read_write(void)
47
char name[100];
48
snprintf(name, sizeof(name), "branch%02"PRIuMAX, (uintmax_t)i);
49
50
- rec.u.ref.refname = name;
50
+ rec.u.ref.refname = xstrdup(name);
51
rec.u.ref.value_type = REFTABLE_REF_VAL1;
52
memset(rec.u.ref.value.val1, i, GIT_SHA1_RAWSZ);
53
54
- names[i] = xstrdup(name);
54
+ recs[i] = rec;
55
ret = block_writer_add(&bw, &rec);
56
rec.u.ref.refname = NULL;
57
rec.u.ref.value_type = REFTABLE_REF_DELETION;
@@ -74,7 +74,7 @@ static void t_block_read_write(void)
74
check_int(i, ==, N);
75
break;
76
}
77
- check_str(names[j], rec.u.ref.refname);
77
+ check(reftable_record_equal(&recs[j], &rec, GIT_SHA1_RAWSZ));
78
j++;
79
}
80
@@ -84,7 +84,7 @@ static void t_block_read_write(void)
84
for (i = 0; i < N; i++) {
85
struct block_iter it = BLOCK_ITER_INIT;
86
strbuf_reset(&want);
87
- strbuf_addstr(&want, names[i]);
87
+ strbuf_addstr(&want, recs[i].u.ref.refname);
88
89
ret = block_iter_seek_key(&it, &br, &want);
90
check_int(ret, ==, 0);
@@ -92,7 +92,7 @@ static void t_block_read_write(void)
92
ret = block_iter_next(&it, &rec);
93
check_int(ret, ==, 0);
94
95
- check_str(names[i], rec.u.ref.refname);
95
+ check(reftable_record_equal(&recs[i], &rec, GIT_SHA1_RAWSZ));
96
97
want.len--;
98
ret = block_iter_seek_key(&it, &br, &want);
@@ -100,7 +100,7 @@ static void t_block_read_write(void)
100
101
ret = block_iter_next(&it, &rec);
102
check_int(ret, ==, 0);
103
- check_str(names[10 * (i / 10)], rec.u.ref.refname);
103
+ check(reftable_record_equal(&recs[10 * (i / 10)], &rec, GIT_SHA1_RAWSZ));
104
105
block_iter_close(&it);
106
}
@@ -110,7 +110,7 @@ static void t_block_read_write(void)
110
reftable_block_done(&br.block);
111
strbuf_release(&want);
112
for (i = 0; i < N; i++)
113
- reftable_free(names[i]);
113
+ reftable_record_release(&recs[i]);
114
}
115
116
int cmd_main(int argc, const char *argv[])