-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
In the recent codebase update (8bf6fbd (Merge branch 'js/doc-unit-tests', 2023-12-09)), a new unit testing framework was merged, providing a standardized approach for testing C code. Prior to this update, some unit tests relied on the test helper mechanism, lacking a dedicated unit testing framework. It's more natural to perform these unit tests using the new unit test framework. This commit migrates the unit tests for hash_to_hex_algop functionality from the legacy approach using the test-tool command `test-tool sha1` and `test-tool sha256` in helper/test-sha256.c and helper/test-sha1.c to the new unit testing framework (t/unit-tests/test-lib.h). The migration involves refactoring the tests to utilize the testing macros provided by the framework (TEST() and check_*()). Mentored-by: Christian Couder <[email protected]> Signed-off-by: Achu Luma <[email protected]>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#include "test-lib.h" | ||
#include "hash-ll.h" | ||
#include "hex.h" | ||
#include "strbuf.h" | ||
|
||
static void repeat(struct strbuf *buf, const char *pattern, size_t repetitions) { | ||
for (size_t i = 0; i < repetitions; i++) { | ||
strbuf_addstr(buf, pattern); | ||
} | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
} | ||
|
||
static void check_hash_data(const void *data, size_t data_length, const char *expected, int algo) { | ||
git_hash_ctx ctx; | ||
unsigned char hash[GIT_MAX_HEXSZ]; | ||
const struct git_hash_algo *algop = &hash_algos[algo]; | ||
|
||
if (!check(!!data)) { | ||
test_msg("Error: No data provided"); | ||
return; | ||
} | ||
|
||
algop->init_fn(&ctx); | ||
algop->update_fn(&ctx, data, data_length); | ||
algop->final_fn(hash, &ctx); | ||
|
||
check_str(hash_to_hex_algop(hash, algop), expected); | ||
} | ||
|
||
static void check_hash_str(const void *data, const char *expected, int algo) { | ||
check_hash_data(data, strlen(data), expected, algo); | ||
} | ||
|
||
#define TEST_SHA1_STR(data, expected_output) \ | ||
TEST(check_hash_str(data, expected_output, GIT_HASH_SHA1 ), \ | ||
"SHA1 (%s) works", #data) | ||
This comment has been minimized.
Sorry, something went wrong.
chriscool
|
||
|
||
#define TEST_SHA1_DATA(data, data_length, expected_output) \ | ||
TEST(check_hash_data(data, data_length, expected_output, GIT_HASH_SHA1 ), \ | ||
"SHA1 (%s) works", #data) | ||
This comment has been minimized.
Sorry, something went wrong.
chriscool
|
||
|
||
|
||
#define TEST_SHA256_STR(data, expected_output) \ | ||
TEST(check_hash_str(data, expected_output, GIT_HASH_SHA256 ), \ | ||
"SHA256 (%s) works", #data) | ||
|
||
#define TEST_SHA256_DATA(data, data_length, expected_output) \ | ||
TEST(check_hash_data(data, data_length, expected_output, GIT_HASH_SHA256 ), \ | ||
"SHA256 (%s) works", #data) | ||
|
||
|
||
int cmd_main(int argc, const char **argv) { | ||
struct strbuf aaaaaaaaaa_100000 = STRBUF_INIT; | ||
struct strbuf alphabet_100000 = STRBUF_INIT; | ||
|
||
setenv("LANG", "C", 1); | ||
|
||
repeat(&aaaaaaaaaa_100000, "aaaaaaaaaa", 100000); | ||
repeat(&alphabet_100000, "abcdefghijklmnopqrstuvwxyz", 100000); | ||
|
||
TEST_SHA1_STR("", "da39a3ee5e6b4b0d3255bfef95601890afd80709"); | ||
TEST_SHA1_STR("a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"); | ||
TEST_SHA1_STR("abc", "a9993e364706816aba3e25717850c26c9cd0d89d"); | ||
TEST_SHA1_STR("message digest", "c12252ceda8be8994d5fa0290a47231c1d16aae3"); | ||
TEST_SHA1_STR("abcdefghijklmnopqrstuvwxyz", "32d10c7b8cf96570ca04ce37f2a19d84240d3a89"); | ||
TEST_SHA1_STR(aaaaaaaaaa_100000.buf, "34aa973cd4c4daa4f61eeb2bdbad27316534016f"); | ||
TEST_SHA1_DATA("blob 0\0", 7, "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391"); | ||
TEST_SHA1_DATA("blob 3\0abc", 10, "f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f"); | ||
TEST_SHA1_DATA("tree 0\0", 7, "4b825dc642cb6eb9a060e54bf8d69288fbee4904"); | ||
|
||
TEST_SHA256_STR("", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"); | ||
TEST_SHA256_STR("a", "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"); | ||
TEST_SHA256_STR("abc", "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"); | ||
TEST_SHA256_STR("message digest", "f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650"); | ||
TEST_SHA256_STR("abcdefghijklmnopqrstuvwxyz", "71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73"); | ||
TEST_SHA256_STR(aaaaaaaaaa_100000.buf, "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"); | ||
TEST_SHA256_STR(alphabet_100000.buf, "e406ba321ca712ad35a698bf0af8d61fc4dc40eca6bdcea4697962724ccbde35"); | ||
TEST_SHA256_DATA("blob 0\0", 7, "473a0f4c3be8a93681a267e3b1e9a7dcda1185436fe141f7749120a303721813"); | ||
TEST_SHA256_DATA("blob 3\0abc", 10, "c1cf6e465077930e88dc5136641d402f72a229ddd996f627d60e9639eaba35a6"); | ||
TEST_SHA256_DATA("tree 0\0", 7, "6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321"); | ||
|
||
This comment has been minimized.
Sorry, something went wrong.
chriscool
|
||
return test_done(); | ||
} |
We don't need the
{
and}
when there is only one instruction between those characters.