1#include <config.h> 2 3#include <sys/resource.h> 4#include <sys/time.h> 5#include <check.h> 6#include <signal.h> 7 8#include <valgrind/valgrind.h> 9 10#include "litest.h" 11 12START_TEST(litest_assert_trigger) 13{ 14 litest_assert(1 == 2); 15} 16END_TEST 17 18START_TEST(litest_assert_notrigger) 19{ 20 litest_assert(1 == 1); 21} 22END_TEST 23 24START_TEST(litest_assert_msg_trigger) 25{ 26 litest_assert_msg(1 == 2, "1 is not 2\n"); 27} 28END_TEST 29 30START_TEST(litest_assert_msg_NULL_trigger) 31{ 32 litest_assert_msg(1 == 2, NULL); 33} 34END_TEST 35 36START_TEST(litest_assert_msg_notrigger) 37{ 38 litest_assert_msg(1 == 1, "1 is not 2\n"); 39 litest_assert_msg(1 == 1, NULL); 40} 41END_TEST 42 43START_TEST(litest_abort_msg_trigger) 44{ 45 litest_abort_msg("message\n"); 46} 47END_TEST 48 49START_TEST(litest_abort_msg_NULL_trigger) 50{ 51 litest_abort_msg(NULL); 52} 53END_TEST 54 55START_TEST(litest_int_eq_trigger) 56{ 57 int a = 10; 58 int b = 20; 59 litest_assert_int_eq(a, b); 60} 61END_TEST 62 63START_TEST(litest_int_eq_notrigger) 64{ 65 int a = 10; 66 int b = 10; 67 litest_assert_int_eq(a, b); 68} 69END_TEST 70 71START_TEST(litest_int_ne_trigger) 72{ 73 int a = 10; 74 int b = 10; 75 litest_assert_int_ne(a, b); 76} 77END_TEST 78 79START_TEST(litest_int_ne_notrigger) 80{ 81 int a = 10; 82 int b = 20; 83 litest_assert_int_ne(a, b); 84} 85END_TEST 86 87START_TEST(litest_int_lt_trigger_eq) 88{ 89 int a = 10; 90 int b = 10; 91 litest_assert_int_lt(a, b); 92} 93END_TEST 94 95START_TEST(litest_int_lt_trigger_gt) 96{ 97 int a = 11; 98 int b = 10; 99 litest_assert_int_lt(a, b); 100} 101END_TEST 102 103START_TEST(litest_int_lt_notrigger) 104{ 105 int a = 10; 106 int b = 11; 107 litest_assert_int_lt(a, b); 108} 109END_TEST 110 111START_TEST(litest_int_le_trigger) 112{ 113 int a = 11; 114 int b = 10; 115 litest_assert_int_le(a, b); 116} 117END_TEST 118 119START_TEST(litest_int_le_notrigger) 120{ 121 int a = 10; 122 int b = 11; 123 int c = 10; 124 litest_assert_int_le(a, b); 125 litest_assert_int_le(a, c); 126} 127END_TEST 128 129START_TEST(litest_int_gt_trigger_eq) 130{ 131 int a = 10; 132 int b = 10; 133 litest_assert_int_gt(a, b); 134} 135END_TEST 136 137START_TEST(litest_int_gt_trigger_lt) 138{ 139 int a = 9; 140 int b = 10; 141 litest_assert_int_gt(a, b); 142} 143END_TEST 144 145START_TEST(litest_int_gt_notrigger) 146{ 147 int a = 10; 148 int b = 9; 149 litest_assert_int_gt(a, b); 150} 151END_TEST 152 153START_TEST(litest_int_ge_trigger) 154{ 155 int a = 9; 156 int b = 10; 157 litest_assert_int_ge(a, b); 158} 159END_TEST 160 161START_TEST(litest_int_ge_notrigger) 162{ 163 int a = 10; 164 int b = 9; 165 int c = 10; 166 litest_assert_int_ge(a, b); 167 litest_assert_int_ge(a, c); 168} 169END_TEST 170 171START_TEST(litest_ptr_eq_notrigger) 172{ 173 int v = 10; 174 int *a = &v; 175 int *b = &v; 176 int *c = NULL; 177 int *d = NULL; 178 179 litest_assert_ptr_eq(a, b); 180 litest_assert_ptr_eq(c, d); 181} 182END_TEST 183 184START_TEST(litest_ptr_eq_trigger) 185{ 186 int v = 10; 187 int v2 = 11; 188 int *a = &v; 189 int *b = &v2; 190 191 litest_assert_ptr_eq(a, b); 192} 193END_TEST 194 195START_TEST(litest_ptr_eq_trigger_NULL) 196{ 197 int v = 10; 198 int *a = &v; 199 int *b = NULL; 200 201 litest_assert_ptr_eq(a, b); 202} 203END_TEST 204 205START_TEST(litest_ptr_eq_trigger_NULL2) 206{ 207 int v = 10; 208 int *a = &v; 209 int *b = NULL; 210 211 litest_assert_ptr_eq(b, a); 212} 213END_TEST 214 215START_TEST(litest_ptr_ne_trigger) 216{ 217 int v = 10; 218 int *a = &v; 219 int *b = &v; 220 221 litest_assert_ptr_ne(a, b); 222} 223END_TEST 224 225START_TEST(litest_ptr_ne_trigger_NULL) 226{ 227 int *a = NULL; 228 229 litest_assert_ptr_ne(a, NULL); 230} 231END_TEST 232 233START_TEST(litest_ptr_ne_trigger_NULL2) 234{ 235 int *a = NULL; 236 237 litest_assert_ptr_ne(NULL, a); 238} 239END_TEST 240 241START_TEST(litest_ptr_ne_notrigger) 242{ 243 int v1 = 10; 244 int v2 = 10; 245 int *a = &v1; 246 int *b = &v2; 247 int *c = NULL; 248 249 litest_assert_ptr_ne(a, b); 250 litest_assert_ptr_ne(a, c); 251 litest_assert_ptr_ne(c, b); 252} 253END_TEST 254 255START_TEST(litest_ptr_null_notrigger) 256{ 257 int *a = NULL; 258 259 litest_assert_ptr_null(a); 260 litest_assert_ptr_null(NULL); 261} 262END_TEST 263 264START_TEST(litest_ptr_null_trigger) 265{ 266 int v; 267 int *a = &v; 268 269 litest_assert_ptr_null(a); 270} 271END_TEST 272 273START_TEST(litest_ptr_notnull_notrigger) 274{ 275 int v; 276 int *a = &v; 277 278 litest_assert_ptr_notnull(a); 279} 280END_TEST 281 282START_TEST(litest_ptr_notnull_trigger) 283{ 284 int *a = NULL; 285 286 litest_assert_ptr_notnull(a); 287} 288END_TEST 289 290START_TEST(litest_ptr_notnull_trigger_NULL) 291{ 292 litest_assert_ptr_notnull(NULL); 293} 294END_TEST 295 296START_TEST(ck_double_eq_and_ne) 297{ 298 ck_assert_double_eq(0.4,0.4); 299 ck_assert_double_eq(0.4,0.4 + 1E-6); 300 ck_assert_double_ne(0.4,0.4 + 1E-3); 301} 302END_TEST 303 304START_TEST(ck_double_lt_gt) 305{ 306 ck_assert_double_lt(12.0,13.0); 307 ck_assert_double_gt(15.4,13.0); 308 ck_assert_double_le(12.0,12.0); 309 ck_assert_double_le(12.0,20.0); 310 ck_assert_double_ge(12.0,12.0); 311 ck_assert_double_ge(20.0,12.0); 312} 313END_TEST 314 315START_TEST(ck_double_eq_fails) 316{ 317 ck_assert_double_eq(0.41,0.4); 318} 319END_TEST 320 321START_TEST(ck_double_ne_fails) 322{ 323 ck_assert_double_ne(0.4 + 1E-7,0.4); 324} 325END_TEST 326 327START_TEST(ck_double_lt_fails) 328{ 329 ck_assert_double_lt(6,5); 330} 331END_TEST 332 333START_TEST(ck_double_gt_fails) 334{ 335 ck_assert_double_gt(5,6); 336} 337END_TEST 338 339START_TEST(ck_double_le_fails) 340{ 341 ck_assert_double_le(6,5); 342} 343END_TEST 344 345START_TEST(ck_double_ge_fails) 346{ 347 ck_assert_double_ge(5,6); 348} 349END_TEST 350 351START_TEST(zalloc_overflow) 352{ 353 zalloc((size_t)-1); 354} 355END_TEST 356 357START_TEST(zalloc_max_size) 358{ 359 /* Built-in alloc maximum */ 360 free(zalloc(1536 * 1024)); 361} 362END_TEST 363 364START_TEST(zalloc_too_large) 365{ 366 zalloc(1536 * 1024 + 1); 367} 368END_TEST 369 370static Suite * 371litest_assert_macros_suite(void) 372{ 373 TCase *tc; 374 Suite *s; 375 376 s = suite_create("litest:assert macros"); 377 tc = tcase_create("assert"); 378 tcase_add_test_raise_signal(tc, litest_assert_trigger, SIGABRT); 379 tcase_add_test(tc, litest_assert_notrigger); 380 tcase_add_test_raise_signal(tc, litest_assert_msg_trigger, SIGABRT); 381 tcase_add_test_raise_signal(tc, litest_assert_msg_NULL_trigger, SIGABRT); 382 tcase_add_test(tc, litest_assert_msg_notrigger); 383 suite_add_tcase(s, tc); 384 385 tc = tcase_create("abort"); 386 tcase_add_test_raise_signal(tc, litest_abort_msg_trigger, SIGABRT); 387 tcase_add_test_raise_signal(tc, litest_abort_msg_NULL_trigger, SIGABRT); 388 suite_add_tcase(s, tc); 389 390 tc = tcase_create("int comparison "); 391 tcase_add_test_raise_signal(tc, litest_int_eq_trigger, SIGABRT); 392 tcase_add_test(tc, litest_int_eq_notrigger); 393 tcase_add_test_raise_signal(tc, litest_int_ne_trigger, SIGABRT); 394 tcase_add_test(tc, litest_int_ne_notrigger); 395 tcase_add_test_raise_signal(tc, litest_int_le_trigger, SIGABRT); 396 tcase_add_test(tc, litest_int_le_notrigger); 397 tcase_add_test_raise_signal(tc, litest_int_lt_trigger_gt, SIGABRT); 398 tcase_add_test_raise_signal(tc, litest_int_lt_trigger_eq, SIGABRT); 399 tcase_add_test(tc, litest_int_lt_notrigger); 400 tcase_add_test_raise_signal(tc, litest_int_ge_trigger, SIGABRT); 401 tcase_add_test(tc, litest_int_ge_notrigger); 402 tcase_add_test_raise_signal(tc, litest_int_gt_trigger_eq, SIGABRT); 403 tcase_add_test_raise_signal(tc, litest_int_gt_trigger_lt, SIGABRT); 404 tcase_add_test(tc, litest_int_gt_notrigger); 405 suite_add_tcase(s, tc); 406 407 tc = tcase_create("pointer comparison "); 408 tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger, SIGABRT); 409 tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger_NULL, SIGABRT); 410 tcase_add_test_raise_signal(tc, litest_ptr_eq_trigger_NULL2, SIGABRT); 411 tcase_add_test(tc, litest_ptr_eq_notrigger); 412 tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger, SIGABRT); 413 tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger_NULL, SIGABRT); 414 tcase_add_test_raise_signal(tc, litest_ptr_ne_trigger_NULL2, SIGABRT); 415 tcase_add_test(tc, litest_ptr_ne_notrigger); 416 tcase_add_test_raise_signal(tc, litest_ptr_null_trigger, SIGABRT); 417 tcase_add_test(tc, litest_ptr_null_notrigger); 418 tcase_add_test_raise_signal(tc, litest_ptr_notnull_trigger, SIGABRT); 419 tcase_add_test_raise_signal(tc, litest_ptr_notnull_trigger_NULL, SIGABRT); 420 tcase_add_test(tc, litest_ptr_notnull_notrigger); 421 suite_add_tcase(s, tc); 422 423 tc = tcase_create("double comparison "); 424 tcase_add_test(tc, ck_double_eq_and_ne); 425 tcase_add_test(tc, ck_double_lt_gt); 426 tcase_add_exit_test(tc, ck_double_eq_fails, 1); 427 tcase_add_exit_test(tc, ck_double_ne_fails, 1); 428 tcase_add_exit_test(tc, ck_double_lt_fails, 1); 429 tcase_add_exit_test(tc, ck_double_gt_fails, 1); 430 tcase_add_exit_test(tc, ck_double_le_fails, 1); 431 tcase_add_exit_test(tc, ck_double_ge_fails, 1); 432 suite_add_tcase(s, tc); 433 434 tc = tcase_create("zalloc "); 435 tcase_add_test(tc, zalloc_max_size); 436 tcase_add_test_raise_signal(tc, zalloc_overflow, SIGABRT); 437 tcase_add_test_raise_signal(tc, zalloc_too_large, SIGABRT); 438 suite_add_tcase(s, tc); 439 440 return s; 441} 442 443int 444main (int argc, char **argv) 445{ 446 const struct rlimit corelimit = { 0, 0 }; 447 int nfailed; 448 Suite *s; 449 SRunner *sr; 450 451 /* when running under valgrind we're using nofork mode, so a signal 452 * raised by a test will fail in valgrind. There's nothing to 453 * memcheck here anyway, so just skip the valgrind test */ 454 if (RUNNING_ON_VALGRIND) 455 return 77; 456 457 if (setrlimit(RLIMIT_CORE, &corelimit) != 0) 458 perror("WARNING: Core dumps not disabled"); 459 460 s = litest_assert_macros_suite(); 461 sr = srunner_create(s); 462 463 srunner_run_all(sr, CK_ENV); 464 nfailed = srunner_ntests_failed(sr); 465 srunner_free(sr); 466 467 return (nfailed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 468} 469