static void setup_pipe (Pipe *p);
static void setup_messaging_with_key (int key);
static void teardown_messaging_with_key (int key);
+static TestResult *construct_test_result (RcvMsg *rmsg, int waserror);
+static void tr_set_loc_by_ctx (TestResult *tr, enum ck_result_ctx ctx,
+ RcvMsg *rmsg);
void send_failure_info (int key, char *msg)
{
return tr;
}
+TestResult *new_receive_test_result (int key, int waserror)
+{
+ Pipe *p;
+ RcvMsg *rmsg;
+
+ p = get_pipe_by_key(key);
+ if (p == NULL)
+ eprintf("Couldn't find pipe with key %d",__FILE__, __LINE__, key);
+ close(p->sendfd);
+ rmsg = new_punpack(p->recvfd);
+ close(p->recvfd);
+ setup_pipe(p);
+ return construct_test_result (rmsg, waserror);
+}
+
+static void tr_set_loc_by_ctx (TestResult *tr, enum ck_result_ctx ctx,
+ RcvMsg *rmsg)
+{
+ if (ctx == CK_CTX_TEST) {
+ tr->file = rmsg->test_file;
+ tr->line = rmsg->test_line;
+ } else {
+ tr->file = rmsg->fixture_file;
+ tr->line = rmsg->fixture_line;
+ }
+}
+
+static TestResult *construct_test_result (RcvMsg *rmsg, int waserror)
+{
+ TestResult *tr;
+
+ if (rmsg == NULL)
+ return NULL;
+
+ tr = emalloc (sizeof(TestResult));
+ /*
+ a message with an error message (non null) is assigned to the lastctx
+ if waserror, then assign to the lastctx
+ otherwise assign to the lastctx if it is setup, and to test otherwise
+ */
+ if (rmsg->msg != NULL || waserror) {
+ tr->ctx = rmsg->lastctx;
+ tr->msg = rmsg->msg;
+ tr_set_loc_by_ctx(tr, rmsg->lastctx, rmsg);
+ } else if (rmsg->lastctx == CK_CTX_SETUP) {
+ tr->ctx = CK_CTX_SETUP;
+ tr->msg = NULL;
+ tr_set_loc_by_ctx(tr, CK_CTX_SETUP, rmsg);
+ } else {
+ tr->ctx = CK_CTX_TEST;
+ tr->msg = NULL;
+ tr_set_loc_by_ctx(tr, CK_CTX_TEST, rmsg);
+ }
+
+ return tr;
+
+}
+
void setup_messaging(void)
{
setup_messaging_with_key(get_recv_key());
send_ctx_info(get_test_key(),CK_CTX_SETUP);
send_loc_info(get_test_key(),"abc123.c", 10);
send_ctx_info(get_test_key(),CK_CTX_TEST);
- send_loc_info(get_test_key(),"abc123.c", 22);
- send_loc_info(get_test_key(),"abc123.c", 25);
+ send_loc_info(get_test_key(),"abc124.c", 22);
+ send_loc_info(get_test_key(),"abc125.c", 25);
send_failure_info(get_test_key(),"Oops");
- tr = receive_test_result(get_test_key());
+ tr = new_receive_test_result(get_test_key(), 0);
teardown_test_messaging();
+ fail_unless (tr != NULL,
+ "No test result received");
fail_unless (tr_ctx(tr) == CK_CTX_TEST,
"Bad CTX received");
fail_unless (strcmp(tr_msg(tr), "Oops") == 0,
"Bad failure msg received");
- fail_unless (strcmp(tr_lfile(tr), "abc123.c") == 0,
+ fail_unless (strcmp(tr_lfile(tr), "abc125.c") == 0,
"Bad loc file received");
fail_unless (tr_lno(tr) == 25,
"Bad loc line received");
+ if (tr != NULL)
+ free(tr);
}
END_TEST
+START_TEST(test_send_with_passing_teardown)
+{
+ TestResult *tr;
+ setup_test_messaging();
+ send_ctx_info(get_test_key(),CK_CTX_SETUP);
+ send_loc_info(get_test_key(),"abc123.c", 10);
+ send_ctx_info(get_test_key(),CK_CTX_TEST);
+ send_loc_info(get_test_key(),"abc124.c", 22);
+ send_loc_info(get_test_key(),"abc125.c", 25);
+ send_ctx_info(get_test_key(),CK_CTX_TEARDOWN);
+ send_loc_info(get_test_key(),"abc126.c", 54);
+ tr = new_receive_test_result(get_test_key(), 0);
+ teardown_test_messaging();
+
+ fail_unless (tr != NULL,
+ "No test result received");
+ fail_unless (tr_ctx(tr) == CK_CTX_TEST,
+ "Bad CTX received");
+ fail_unless (tr_msg(tr) == NULL,
+ "Bad failure msg received");
+ fail_unless (strcmp(tr_lfile(tr), "abc125.c") == 0,
+ "Bad loc file received");
+ fail_unless (tr_lno(tr) == 25,
+ "Bad loc line received");
+ if (tr != NULL)
+ free(tr);
+}
+END_TEST
+
+START_TEST(test_send_with_error_teardown)
+{
+ TestResult *tr;
+ setup_test_messaging();
+ send_ctx_info(get_test_key(),CK_CTX_SETUP);
+ send_loc_info(get_test_key(),"abc123.c", 10);
+ send_ctx_info(get_test_key(),CK_CTX_TEST);
+ send_loc_info(get_test_key(),"abc124.c", 22);
+ send_loc_info(get_test_key(),"abc125.c", 25);
+ send_ctx_info(get_test_key(),CK_CTX_TEARDOWN);
+ send_loc_info(get_test_key(),"abc126.c", 54);
+ tr = new_receive_test_result(get_test_key(), 1);
+ teardown_test_messaging();
+
+ fail_unless (tr != NULL,
+ "No test result received");
+ fail_unless (tr_ctx(tr) == CK_CTX_TEARDOWN,
+ "Bad CTX received");
+ fail_unless (tr_msg(tr) == NULL,
+ "Bad failure msg received");
+ fail_unless (strcmp(tr_lfile(tr), "abc126.c") == 0,
+ "Bad loc file received");
+ fail_unless (tr_lno(tr) == 54,
+ "Bad loc line received");
+ if (tr != NULL)
+ free(tr);
+}
+END_TEST
+
+
Suite *make_msg_suite (void)
{
Suite *s;
s = suite_create("Msg");
tc = tcase_create("Core Tests");
tcase_add_test(tc, test_send);
+ tcase_add_test(tc, test_send_with_passing_teardown);
+ tcase_add_test(tc, test_send_with_error_teardown);
suite_add_tcase(s, tc);
return s;
}
}
END_TEST
+START_TEST(test_ppack_nofail)
+{
+ int filedes[2];
+ CtxMsg cmsg;
+ LocMsg lmsg;
+ RcvMsg *rmsg;
+
+ lmsg.file = "abc123.c";
+ lmsg.line = 10;
+ cmsg.ctx = CK_CTX_SETUP;
+ pipe(filedes);
+ ppack(filedes[1],CK_MSG_CTX, &cmsg);
+ ppack(filedes[1],CK_MSG_LOC, &lmsg);
+ close(filedes[1]);
+ rmsg = new_punpack(filedes[0]);
+
+ fail_unless (rmsg->msg == NULL,
+ "Failure result should be NULL with no failure message");
+ if (rmsg != NULL)
+ free(rmsg);
+}
+END_TEST
+
Suite *make_pack_suite(void)
{
tcase_add_test(tc_core, test_ppack_noctx);
tcase_add_test(tc_core, test_ppack_onlyctx);
tcase_add_test(tc_core, test_ppack_multictx);
+ tcase_add_test(tc_core, test_ppack_nofail);
suite_add_tcase(s, tc_limit);
tcase_add_test(tc_limit, test_pack_ctx_limit);
tcase_add_test(tc_limit, test_pack_fail_limit);