forked from msysgit/git
-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
t/unit-tests: introduce reftable library
We have recently migrated all of the reftable unit tests that were part of the reftable library into our own unit testing framework. As part of that migration we have duplicated some of the functionality that was part of the reftable test framework into each of the migrated test suites. This was a sensible decision to not have all of the migrations dependent on each other, but now that the migration is done it makes sense to deduplicate the functionality again. Introduce a new reftable test library that hosts some shared code and adapt tests to use it. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
- Loading branch information
Showing
6 changed files
with
177 additions
and
179 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
#include "lib-reftable.h" | ||
#include "test-lib.h" | ||
#include "reftable/constants.h" | ||
#include "reftable/writer.h" | ||
|
||
void t_reftable_set_hash(uint8_t *p, int i, uint32_t id) | ||
{ | ||
memset(p, (uint8_t)i, hash_size(id)); | ||
} | ||
|
||
static ssize_t strbuf_writer_write(void *b, const void *data, size_t sz) | ||
{ | ||
strbuf_add(b, data, sz); | ||
return sz; | ||
} | ||
|
||
static int strbuf_writer_flush(void *arg UNUSED) | ||
{ | ||
return 0; | ||
} | ||
|
||
struct reftable_writer *t_reftable_strbuf_writer(struct strbuf *buf, | ||
struct reftable_write_options *opts) | ||
{ | ||
return reftable_new_writer(&strbuf_writer_write, | ||
&strbuf_writer_flush, | ||
buf, opts); | ||
} | ||
|
||
void t_reftable_write_to_buf(struct strbuf *buf, | ||
struct reftable_ref_record *refs, | ||
size_t nrefs, | ||
struct reftable_log_record *logs, | ||
size_t nlogs, | ||
struct reftable_write_options *_opts) | ||
{ | ||
struct reftable_write_options opts = { 0 }; | ||
const struct reftable_stats *stats; | ||
struct reftable_writer *writer; | ||
uint64_t min = 0xffffffff; | ||
uint64_t max = 0; | ||
int ret; | ||
|
||
if (_opts) | ||
opts = *_opts; | ||
|
||
for (size_t i = 0; i < nrefs; i++) { | ||
uint64_t ui = refs[i].update_index; | ||
if (ui > max) | ||
max = ui; | ||
if (ui < min) | ||
min = ui; | ||
} | ||
for (size_t i = 0; i < nlogs; i++) { | ||
uint64_t ui = logs[i].update_index; | ||
if (ui > max) | ||
max = ui; | ||
if (ui < min) | ||
min = ui; | ||
} | ||
|
||
writer = t_reftable_strbuf_writer(buf, &opts); | ||
reftable_writer_set_limits(writer, min, max); | ||
|
||
if (nrefs) { | ||
ret = reftable_writer_add_refs(writer, refs, nrefs); | ||
check_int(ret, ==, 0); | ||
} | ||
|
||
if (nlogs) { | ||
ret = reftable_writer_add_logs(writer, logs, nlogs); | ||
check_int(ret, ==, 0); | ||
} | ||
|
||
ret = reftable_writer_close(writer); | ||
check_int(ret, ==, 0); | ||
|
||
stats = reftable_writer_stats(writer); | ||
for (size_t i = 0; i < stats->ref_stats.blocks; i++) { | ||
size_t off = i * (opts.block_size ? opts.block_size | ||
: DEFAULT_BLOCK_SIZE); | ||
if (!off) | ||
off = header_size(opts.hash_id == GIT_SHA256_FORMAT_ID ? 2 : 1); | ||
check_char(buf->buf[off], ==, 'r'); | ||
} | ||
|
||
if (nrefs) | ||
check_int(stats->ref_stats.blocks, >, 0); | ||
if (nlogs) | ||
check_int(stats->log_stats.blocks, >, 0); | ||
|
||
reftable_writer_free(writer); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#ifndef LIB_REFTABLE_H | ||
#define LIB_REFTABLE_H | ||
|
||
#include "git-compat-util.h" | ||
#include "strbuf.h" | ||
#include "reftable/reftable-writer.h" | ||
|
||
void t_reftable_set_hash(uint8_t *p, int i, uint32_t id); | ||
|
||
struct reftable_writer *t_reftable_strbuf_writer(struct strbuf *buf, | ||
struct reftable_write_options *opts); | ||
|
||
void t_reftable_write_to_buf(struct strbuf *buf, | ||
struct reftable_ref_record *refs, | ||
size_t nrecords, | ||
struct reftable_log_record *logs, | ||
size_t nlogs, | ||
struct reftable_write_options *opts); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.