|
Packit |
0b5880 |
/*
|
|
Packit |
0b5880 |
* Check: a unit test framework for C
|
|
Packit |
0b5880 |
* Copyright (C) 2001, 2002 Arien Malec
|
|
Packit |
0b5880 |
*
|
|
Packit |
0b5880 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
0b5880 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
0b5880 |
* License as published by the Free Software Foundation; either
|
|
Packit |
0b5880 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
0b5880 |
*
|
|
Packit |
0b5880 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
0b5880 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
0b5880 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
0b5880 |
* Lesser General Public License for more details.
|
|
Packit |
0b5880 |
*
|
|
Packit |
0b5880 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
0b5880 |
* License along with this library; if not, write to the
|
|
Packit |
0b5880 |
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
|
Packit |
0b5880 |
* MA 02110-1301, USA.
|
|
Packit |
0b5880 |
*/
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
#include "../lib/libcompat.h"
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
#include <stdlib.h>
|
|
Packit |
0b5880 |
#include <stdio.h>
|
|
Packit |
0b5880 |
#include <string.h>
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
#include "check.h"
|
|
Packit |
0b5880 |
#include "check_pack.h"
|
|
Packit |
0b5880 |
#include "check_error.h"
|
|
Packit |
0b5880 |
#include "check_check.h"
|
|
Packit |
0b5880 |
#include "check_msg.h"
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
static char errm[512];
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_fmsg)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FailMsg *fmsg;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
fmsg = (FailMsg *)emalloc (sizeof (FailMsg));
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
fmsg->msg = (char *) "Hello, world!";
|
|
Packit |
0b5880 |
pack (CK_MSG_FAIL, &buf, (CheckMsg *) fmsg);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
fmsg->msg = NULL;
|
|
Packit |
0b5880 |
upack (buf, (CheckMsg *) fmsg, &type);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (type == CK_MSG_FAIL,
|
|
Packit |
0b5880 |
"Bad type unpacked for FailMsg");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (fmsg->msg != NULL,
|
|
Packit |
0b5880 |
"Unpacked string is NULL, should be Hello, World!");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (strcmp (fmsg->msg, "Hello, world!") != 0) {
|
|
Packit |
0b5880 |
snprintf (errm, sizeof(errm),
|
|
Packit |
0b5880 |
"Unpacked string is %s, should be Hello, World!",
|
|
Packit |
0b5880 |
fmsg->msg);
|
|
Packit |
0b5880 |
fail (errm);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (fmsg->msg);
|
|
Packit |
0b5880 |
free (fmsg);
|
|
Packit |
0b5880 |
free (buf);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_loc)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
LocMsg *lmsg;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
lmsg =(LocMsg *) emalloc (sizeof (LocMsg));
|
|
Packit |
0b5880 |
lmsg->file = (char *) "abc123.c";
|
|
Packit |
0b5880 |
lmsg->line = 125;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
pack (CK_MSG_LOC, &buf, (CheckMsg *) lmsg);
|
|
Packit |
0b5880 |
lmsg->file = NULL;
|
|
Packit |
0b5880 |
lmsg->line = 0;
|
|
Packit |
0b5880 |
upack (buf, (CheckMsg *) lmsg, &type);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (type == CK_MSG_LOC,
|
|
Packit |
0b5880 |
"Bad type unpacked for LocMsg");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (lmsg->line != 125) {
|
|
Packit |
0b5880 |
snprintf (errm, sizeof (errm),
|
|
Packit |
0b5880 |
"LocMsg line was %d, should be %d",
|
|
Packit |
0b5880 |
lmsg->line, 125);
|
|
Packit |
0b5880 |
fail (errm);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (strcmp (lmsg->file, "abc123.c") != 0) {
|
|
Packit |
0b5880 |
snprintf (errm, sizeof (errm),
|
|
Packit |
0b5880 |
"LocMsg file was %s, should be abc123.c",
|
|
Packit |
0b5880 |
lmsg->file);
|
|
Packit |
0b5880 |
fail (errm);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (lmsg->file);
|
|
Packit |
0b5880 |
free (lmsg);
|
|
Packit |
0b5880 |
free (buf);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_ctx)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_SETUP;
|
|
Packit |
0b5880 |
pack (CK_MSG_CTX, &buf, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEARDOWN;
|
|
Packit |
0b5880 |
upack (buf, (CheckMsg *) &cmsg, &type);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (type == CK_MSG_CTX,
|
|
Packit |
0b5880 |
"Bad type unpacked for CtxMsg");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (cmsg.ctx != CK_CTX_SETUP) {
|
|
Packit |
0b5880 |
snprintf (errm, sizeof (errm),
|
|
Packit |
0b5880 |
"CtxMsg ctx got %d, expected %d",
|
|
Packit |
0b5880 |
cmsg.ctx, CK_CTX_SETUP);
|
|
Packit |
0b5880 |
fail (errm);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (buf);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_len)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
int n = 0;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEST;
|
|
Packit |
0b5880 |
n = pack (CK_MSG_CTX, &buf, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ck_assert_msg (n > 0, "Return val from pack not set correctly");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
/* Value below may change with different implementations of pack */
|
|
Packit |
0b5880 |
ck_assert_msg (n == 8, "Return val from pack not correct");
|
|
Packit |
0b5880 |
n = upack (buf, (CheckMsg *) &cmsg, &type);
|
|
Packit |
0b5880 |
if (n != 8) {
|
|
Packit |
0b5880 |
snprintf (errm, sizeof (errm), "%d bytes read from upack, should be 8", n);
|
|
Packit |
0b5880 |
fail (errm);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (buf);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_abuse)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
/* Should report -1 (e.g. invalid) if no buffer is passed */
|
|
Packit |
0b5880 |
ck_assert_int_eq(pack(CK_MSG_CTX, NULL, (CheckMsg *) &cmsg), -1);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
/* Should report 0 (e.g. nothing packed) if no message is passed */
|
|
Packit |
0b5880 |
ck_assert_int_eq(pack(CK_MSG_CTX, &buf, NULL), 0);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
/* Should report -1 (e.g. invalid) if no buffer is passed */
|
|
Packit |
0b5880 |
ck_assert_int_eq(upack(NULL, (CheckMsg *) &cmsg, &type), -1);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_ctx_limit)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
CtxMsg *cmsgp = NULL;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = (enum ck_result_ctx)-1;
|
|
Packit |
0b5880 |
pack (CK_MSG_CTX, &buf, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
pack (CK_MSG_CTX, &buf, (CheckMsg *) cmsgp);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_fail_limit)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FailMsg fmsg;
|
|
Packit |
0b5880 |
FailMsg *fmsgp = NULL;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
fmsg.msg = (char *) "";
|
|
Packit |
0b5880 |
pack (CK_MSG_FAIL, &buf, (CheckMsg *) &fmsg);
|
|
Packit |
0b5880 |
fmsg.msg = NULL;
|
|
Packit |
0b5880 |
upack (buf, (CheckMsg *) &fmsg, &type);
|
|
Packit |
0b5880 |
free (buf);
|
|
Packit |
0b5880 |
ck_assert_msg (fmsg.msg != NULL,
|
|
Packit |
0b5880 |
"Empty string not handled properly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp (fmsg.msg, "") == 0,
|
|
Packit |
0b5880 |
"Empty string not handled properly");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (fmsg.msg);
|
|
Packit |
0b5880 |
fmsg.msg = NULL;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
pack (CK_MSG_FAIL, &buf, (CheckMsg *) &fmsg);
|
|
Packit |
0b5880 |
pack (CK_MSG_FAIL, &buf, (CheckMsg *) fmsgp);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_pack_loc_limit)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
LocMsg *lmsgp = NULL;
|
|
Packit |
0b5880 |
char *buf;
|
|
Packit |
0b5880 |
enum ck_msg_type type;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
lmsg.file = (char *) "";
|
|
Packit |
0b5880 |
lmsg.line = 0;
|
|
Packit |
0b5880 |
pack (CK_MSG_LOC, &buf, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
lmsg.file = NULL;
|
|
Packit |
0b5880 |
upack (buf, (CheckMsg *) &lmsg, &type);
|
|
Packit |
0b5880 |
ck_assert_msg (lmsg.file != NULL,
|
|
Packit |
0b5880 |
"Empty string not handled properly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp (lmsg.file, "") == 0,
|
|
Packit |
0b5880 |
"Empty string not handled properly");
|
|
Packit |
0b5880 |
free (lmsg.file);
|
|
Packit |
0b5880 |
lmsg.file = NULL;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
pack (CK_MSG_LOC, &buf, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
pack (CK_MSG_LOC, &buf, (CheckMsg *) lmsgp);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
/* the ppack probably means 'pipe' pack */
|
|
Packit |
0b5880 |
#if defined(HAVE_FORK) && HAVE_FORK==1
|
|
Packit |
0b5880 |
START_TEST(test_ppack)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
FailMsg fmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEST;
|
|
Packit |
0b5880 |
lmsg.file = (char *) "abc123.c";
|
|
Packit |
0b5880 |
lmsg.line = 10;
|
|
Packit |
0b5880 |
fmsg.msg = (char *) "oops";
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_FAIL, (CheckMsg *) &fmsg);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
rewind(result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg != NULL,
|
|
Packit |
0b5880 |
"Return value from ppack should always be malloc'ed");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->lastctx == CK_CTX_TEST,
|
|
Packit |
0b5880 |
"CTX not set correctly in ppack");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->fixture_line == -1,
|
|
Packit |
0b5880 |
"Default fixture loc not correct");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->fixture_file == NULL,
|
|
Packit |
0b5880 |
"Default fixture loc not correct");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->test_line == 10,
|
|
Packit |
0b5880 |
"Test line not received correctly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp(rmsg->test_file,"abc123.c") == 0,
|
|
Packit |
0b5880 |
"Test file not received correctly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp(rmsg->msg, "oops") == 0,
|
|
Packit |
0b5880 |
"Failure message not received correctly");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free(rmsg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_ppack_noctx)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
FailMsg fmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
lmsg.file = (char *) "abc123.c";
|
|
Packit |
0b5880 |
lmsg.line = 10;
|
|
Packit |
0b5880 |
fmsg.msg = (char *) "oops";
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_FAIL, (CheckMsg *) &fmsg);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
rewind(result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg == NULL,
|
|
Packit |
0b5880 |
"Result should be NULL with no CTX");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (rmsg != NULL)
|
|
Packit |
0b5880 |
free (rmsg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_ppack_onlyctx)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_SETUP;
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
rewind(result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg != NULL && rmsg->msg == NULL,
|
|
Packit |
0b5880 |
"Result message should be NULL with only CTX");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->fixture_line == -1,
|
|
Packit |
0b5880 |
"Result loc line should be -1 with only CTX");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->test_line == -1,
|
|
Packit |
0b5880 |
"Result loc line should be -1 with only CTX");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
if (rmsg != NULL)
|
|
Packit |
0b5880 |
free (rmsg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_ppack_multictx)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_SETUP;
|
|
Packit |
0b5880 |
lmsg.line = 5;
|
|
Packit |
0b5880 |
lmsg.file = (char *) "abc123.c";
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEST;
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEARDOWN;
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
rewind(result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg != NULL && rmsg->test_line == 5,
|
|
Packit |
0b5880 |
"Test loc not being preserved on CTX change");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->fixture_line == -1,
|
|
Packit |
0b5880 |
"Fixture not reset on CTX change");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (rmsg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_ppack_nofail)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
lmsg.file = (char *) "abc123.c";
|
|
Packit |
0b5880 |
lmsg.line = 10;
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_SETUP;
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
rewind (result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg != NULL && rmsg->msg == NULL,
|
|
Packit |
0b5880 |
"Failure result should be NULL with no failure message");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (rmsg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
#define BIG_MSG_LEN 1037
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
START_TEST(test_ppack_big)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
FILE * result_file;
|
|
Packit |
0b5880 |
char * result_file_name = NULL;
|
|
Packit |
0b5880 |
CtxMsg cmsg;
|
|
Packit |
0b5880 |
LocMsg lmsg;
|
|
Packit |
0b5880 |
FailMsg fmsg;
|
|
Packit |
0b5880 |
RcvMsg *rmsg;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
cmsg.ctx = CK_CTX_TEST;
|
|
Packit |
0b5880 |
lmsg.file = (char *)emalloc (BIG_MSG_LEN);
|
|
Packit |
0b5880 |
memset (lmsg.file,'a',BIG_MSG_LEN - 1);
|
|
Packit |
0b5880 |
lmsg.file[BIG_MSG_LEN - 1] = '\0';
|
|
Packit |
0b5880 |
lmsg.line = 10;
|
|
Packit |
0b5880 |
fmsg.msg = (char *)emalloc (BIG_MSG_LEN);
|
|
Packit |
0b5880 |
memset (fmsg.msg, 'a', BIG_MSG_LEN - 1);
|
|
Packit |
0b5880 |
fmsg.msg[BIG_MSG_LEN - 1] = '\0';
|
|
Packit |
0b5880 |
result_file = open_tmp_file(&result_file_name);
|
|
Packit |
0b5880 |
free(result_file_name);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_CTX, (CheckMsg *) &cmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_LOC, (CheckMsg *) &lmsg);
|
|
Packit |
0b5880 |
ppack (result_file, CK_MSG_FAIL, (CheckMsg *) &fmsg);
|
|
Packit |
0b5880 |
rewind (result_file);
|
|
Packit |
0b5880 |
rmsg = punpack (result_file);
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg != NULL,
|
|
Packit |
0b5880 |
"Return value from ppack should always be malloc'ed");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->lastctx == CK_CTX_TEST,
|
|
Packit |
0b5880 |
"CTX not set correctly in ppack");
|
|
Packit |
0b5880 |
ck_assert_msg (rmsg->test_line == 10,
|
|
Packit |
0b5880 |
"Test line not received correctly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp (rmsg->test_file, lmsg.file) == 0,
|
|
Packit |
0b5880 |
"Test file not received correctly");
|
|
Packit |
0b5880 |
ck_assert_msg (strcmp (rmsg->msg, fmsg.msg) == 0,
|
|
Packit |
0b5880 |
"Failure message not received correctly");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
free (rmsg);
|
|
Packit |
0b5880 |
free (lmsg.file);
|
|
Packit |
0b5880 |
free (fmsg.msg);
|
|
Packit |
0b5880 |
fclose(result_file);
|
|
Packit |
0b5880 |
}
|
|
Packit |
0b5880 |
END_TEST
|
|
Packit |
0b5880 |
#endif /* HAVE_FORK */
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
Suite *make_pack_suite(void)
|
|
Packit |
0b5880 |
{
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
Suite *s;
|
|
Packit |
0b5880 |
TCase *tc_core;
|
|
Packit |
0b5880 |
TCase *tc_limit;
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
s = suite_create ("Pack");
|
|
Packit |
0b5880 |
tc_core = tcase_create ("Core");
|
|
Packit |
0b5880 |
tc_limit = tcase_create ("Limit");
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
suite_add_tcase (s, tc_core);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_pack_fmsg);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_pack_loc);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_pack_ctx);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_pack_len);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_pack_abuse);
|
|
Packit |
0b5880 |
#if defined(HAVE_FORK) && HAVE_FORK==1
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_ppack);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_ppack_noctx);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_ppack_onlyctx);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_ppack_multictx);
|
|
Packit |
0b5880 |
tcase_add_test (tc_core, test_ppack_nofail);
|
|
Packit |
0b5880 |
#endif /* HAVE_FORK */
|
|
Packit |
0b5880 |
suite_add_tcase (s, tc_limit);
|
|
Packit |
0b5880 |
tcase_add_test (tc_limit, test_pack_ctx_limit);
|
|
Packit |
0b5880 |
tcase_add_test (tc_limit, test_pack_fail_limit);
|
|
Packit |
0b5880 |
tcase_add_test (tc_limit, test_pack_loc_limit);
|
|
Packit |
0b5880 |
#if defined(HAVE_FORK) && HAVE_FORK==1
|
|
Packit |
0b5880 |
tcase_add_test (tc_limit, test_ppack_big);
|
|
Packit |
0b5880 |
#endif /* HAVE_FORK */
|
|
Packit |
0b5880 |
|
|
Packit |
0b5880 |
return s;
|
|
Packit |
0b5880 |
}
|