From bb5e8b9c3635beadea06a8ef7e8710880b4f1591 Mon Sep 17 00:00:00 2001 From: Ivan Leskin Date: Mon, 12 Aug 2019 13:48:41 -0700 Subject: [PATCH] Add unit tests for rmgrdesc Co-authored-by: David Kimura --- src/backend/access/rmgrdesc/test/Makefile | 7 ++ .../access/rmgrdesc/test/xactdesc_test.c | 87 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/backend/access/rmgrdesc/test/Makefile create mode 100644 src/backend/access/rmgrdesc/test/xactdesc_test.c diff --git a/src/backend/access/rmgrdesc/test/Makefile b/src/backend/access/rmgrdesc/test/Makefile new file mode 100644 index 0000000000..7ed5ee3365 --- /dev/null +++ b/src/backend/access/rmgrdesc/test/Makefile @@ -0,0 +1,7 @@ +subdir=src/backend/access/rmgrdesc +top_builddir=../../../../.. +include $(top_builddir)/src/Makefile.global + +TARGETS=xactdesc + +include $(top_builddir)/src/backend/mock.mk diff --git a/src/backend/access/rmgrdesc/test/xactdesc_test.c b/src/backend/access/rmgrdesc/test/xactdesc_test.c new file mode 100644 index 0000000000..050d989110 --- /dev/null +++ b/src/backend/access/rmgrdesc/test/xactdesc_test.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include "cmockery.h" + +#include "postgres.h" + +#include "utils/memutils.h" +#include "access/xlog.h" +#include "pgtime.h" + +/* Actual function body */ +#include "../xactdesc.c" + +static void +test_xactdescprepareCommit(void **state) +{ + StringInfo buf = makeStringInfo(); + XLogRecord *rec = palloc(SizeOfXLogRecord + MAXALIGN(sizeof(TwoPhaseFileHeader))); + + rec->xl_info = XLOG_XACT_PREPARE; + TwoPhaseFileHeader* tpfh = (TwoPhaseFileHeader*) XLogRecGetData(rec); + + tpfh->prepared_at = 617826371830030; + strcpy(tpfh->gid, "4242424242-0000000042"); + tpfh->tablespace_oid_to_delete_on_commit = 42; + tpfh->tablespace_oid_to_delete_on_abort = InvalidOid; + + xact_desc(buf, rec); + + assert_string_equal("prepare: at = 2019-07-30 18:26:11.83003+00; gid = 4242424242-0000000042; tablespace_oid_to_delete_on_commit = 42", buf->data); +} + +static void +test_xactdescprepareAbort(void **state) +{ + StringInfo buf = makeStringInfo(); + XLogRecord *rec = palloc(SizeOfXLogRecord + MAXALIGN(sizeof(TwoPhaseFileHeader))); + + rec->xl_info = XLOG_XACT_PREPARE; + TwoPhaseFileHeader* tpfh = (TwoPhaseFileHeader*) XLogRecGetData(rec); + + tpfh->prepared_at = 617826371830030; + strcpy(tpfh->gid, "4242424242-0000000042"); + tpfh->tablespace_oid_to_delete_on_commit = InvalidOid; + tpfh->tablespace_oid_to_delete_on_abort = 42; + + xact_desc(buf, rec); + + assert_string_equal("prepare: at = 2019-07-30 18:26:11.83003+00; gid = 4242424242-0000000042; tablespace_oid_to_delete_on_abort = 42", buf->data); +} + +static void +test_xactdescprepareNone(void **state) +{ + StringInfo buf = makeStringInfo(); + XLogRecord *rec = palloc(SizeOfXLogRecord + MAXALIGN(sizeof(TwoPhaseFileHeader))); + + rec->xl_info = XLOG_XACT_PREPARE; + TwoPhaseFileHeader* tpfh = (TwoPhaseFileHeader*) XLogRecGetData(rec); + + tpfh->prepared_at = 617826371830030; + strcpy(tpfh->gid, "4242424242-0000000042"); + tpfh->tablespace_oid_to_delete_on_commit = InvalidOid; + tpfh->tablespace_oid_to_delete_on_abort = InvalidOid; + + xact_desc(buf, rec); + + assert_string_equal("prepare: at = 2019-07-30 18:26:11.83003+00; gid = 4242424242-0000000042", buf->data); +} + +int +main(int argc, char* argv[]) +{ + cmockery_parse_arguments(argc, argv); + + MemoryContextInit(); + pg_timezone_initialize(); + + const UnitTest tests[] = { + unit_test(test_xactdescprepareCommit), + unit_test(test_xactdescprepareAbort), + unit_test(test_xactdescprepareNone) + }; + + return run_tests(tests); +} -- GitLab