From 0132e493e4b68867ea4b84dac5eab33c02949003 Mon Sep 17 00:00:00 2001 From: Nathan Fisher Date: Fri, 1 Dec 2023 16:03:31 -0500 Subject: [PATCH] Add tests for hardlink nodes --- test/Makefile | 1 + test/extract_hardlink_node.c | 60 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 test/extract_hardlink_node.c diff --git a/test/Makefile b/test/Makefile index edb73e1..1b492c1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -76,6 +76,7 @@ tests += extract_dir_node tests += extract_fifo_node tests += extract_file_node tests += extract_symlink_node +tests += extract_hardlink_node total != echo $(tests) | wc -w | awk '{ print $$1 }' diff --git a/test/extract_hardlink_node.c b/test/extract_hardlink_node.c new file mode 100644 index 0000000..b052e9c --- /dev/null +++ b/test/extract_hardlink_node.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "haggis.h" +#include "mq.h" + +int main() { + haggis_node *node0 = NULL, *node1 = NULL; + haggis_linkmap *map = NULL; + haggis_mq mq; + haggis_msg *msg; + char *orig = "Makefile"; + char *lnk = "output/Makefile"; + int ret = 0; + + map = haggis_linkmap_init(); + assert(map != NULL); + if (haggis_mq_init(&mq)) + return errno; + unlink(lnk); + ret = link(orig, lnk); + node0 = haggis_create_node(orig, sha256, map, &mq); + assert(node0 != NULL); + assert(node0->filetype.tag == normal); + assert(memcmp(node0->name.name, orig, 8) == 0); + if (ret) return ret; + node1 = haggis_create_node(lnk, sha256, map, &mq); + assert(node1 != NULL); + assert(node1->filetype.tag == hardlink); + assert(memcmp(node1->name.name, lnk, 15) == 0); + ret = haggis_extract_node("output/extracted", node0, &mq); + assert(ret == 0); + haggis_node_deinit(node0); + ret = haggis_extract_node("output/extracted", node1, &mq); + assert(ret == 0); + haggis_node_deinit(node1); + msg = haggis_mq_pop(&mq); + assert(msg->tag == NodeCreated); + assert(memcmp(msg->body.f_name, orig, 8) == 0); + haggis_msg_deinit(msg); + msg = haggis_mq_pop(&mq); + assert(msg->tag == NodeCreated); + assert(memcmp(msg->body.f_name, lnk, 15) == 0); + haggis_msg_deinit(msg); + msg = haggis_mq_pop(&mq); + assert(msg->tag == NodeExtracted); + assert(memcmp(msg->body.f_name, orig, 8) == 0); + haggis_msg_deinit(msg); + msg = haggis_mq_pop(&mq); + assert(msg->tag == NodeExtracted); + assert(memcmp(msg->body.f_name, lnk, 15) == 0); + haggis_msg_deinit(msg); + haggis_linkmap_deinit(map); + return 0; +}