23#include "osal/file/osal_file_ops.h"
28#include "lexleo_cmocka.h"
45 assert_non_null(ret->
open);
46 assert_non_null(ret->
read);
47 assert_non_null(ret->
write);
48 assert_non_null(ret->
flush);
49 assert_non_null(ret->
close);
172 size_t fail_call_idx;
176 out_expect_t out_expect;
177} test_osal_file_open_case_t;
198 const char *pathname;
204 const test_osal_file_open_case_t *tc;
205} test_osal_file_open_fixture_t;
214static int setup_osal_file_open(
void **state)
216 const test_osal_file_open_case_t *tc =
217 (
const test_osal_file_open_case_t *)(*state);
219 test_osal_file_open_fixture_t *fx =
220 (test_osal_file_open_fixture_t *)
osal_malloc(
sizeof(*fx));
228 fake_memory_fail_only_on_call(tc->fail_call_idx);
236 fx->pathname =
"unit_test_osal_file.tmp";
246static int teardown_osal_file_open(
void **state)
248 test_osal_file_open_fixture_t *fx =
249 (test_osal_file_open_fixture_t *)(*state);
251 if (fx->out && fx->out != fx->snapshot) {
258 assert_true(fake_memory_no_leak());
259 assert_true(fake_memory_no_invalid_free());
260 assert_true(fake_memory_no_double_free());
274static void test_osal_file_open(
void **state)
276 test_osal_file_open_fixture_t *fx =
277 (test_osal_file_open_fixture_t *)(*state);
278 const test_osal_file_open_case_t *tc =
279 (
const test_osal_file_open_case_t *)fx->tc;
283 fx->out = (
OSAL_FILE *)(uintptr_t)0xDEADC0DEu;
285 const char *pathname_arg = fx->pathname;
286 const char *mode_arg = fx->mode;
309 fx->snapshot = fx->out;
312 ret = fx->file_ops->open(out_arg, pathname_arg, mode_arg, mem_ops_arg);
315 assert_int_equal(ret, tc->expected_ret);
317 switch (tc->out_expect) {
320 case OUT_EXPECT_NON_NULL:
321 assert_non_null(fx->out);
322 assert_ptr_not_equal(fx->out, fx->snapshot);
324 case OUT_EXPECT_UNCHANGED:
325 assert_ptr_equal(fx->out, fx->snapshot);
336static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_OUT_NULL = {
337 .name =
"osal_file_open_out_null",
342 .out_expect = OUT_CHECK_NONE
345static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_PATHNAME_NULL = {
346 .name =
"osal_file_open_pathname_null",
351 .out_expect = OUT_EXPECT_UNCHANGED
354static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_PATHNAME_EMPTY = {
355 .name =
"osal_file_open_pathname_empty",
360 .out_expect = OUT_EXPECT_UNCHANGED
363static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_MODE_NULL = {
364 .name =
"osal_file_open_mode_null",
369 .out_expect = OUT_EXPECT_UNCHANGED
372static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_MODE_UNSUPPORTED = {
373 .name =
"osal_file_open_mode_unsupported",
378 .out_expect = OUT_EXPECT_UNCHANGED
381static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_MEM_OPS_NULL = {
382 .name =
"osal_file_open_mem_ops_null",
387 .out_expect = OUT_EXPECT_UNCHANGED
390static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_OOM_1 = {
391 .name =
"osal_file_open_oom_1",
396 .out_expect = OUT_EXPECT_UNCHANGED
399static const test_osal_file_open_case_t CASE_OSAL_FILE_OPEN_OK = {
400 .name =
"osal_file_open_ok",
405 .out_expect = OUT_EXPECT_NON_NULL
412#define OSAL_FILE_OPEN_CASES(X) \
413X(CASE_OSAL_FILE_OPEN_OUT_NULL) \
414X(CASE_OSAL_FILE_OPEN_PATHNAME_NULL) \
415X(CASE_OSAL_FILE_OPEN_PATHNAME_EMPTY) \
416X(CASE_OSAL_FILE_OPEN_MODE_NULL) \
417X(CASE_OSAL_FILE_OPEN_MODE_UNSUPPORTED) \
418X(CASE_OSAL_FILE_OPEN_MEM_OPS_NULL) \
419X(CASE_OSAL_FILE_OPEN_OOM_1) \
420X(CASE_OSAL_FILE_OPEN_OK)
422#define OSAL_FILE_MAKE_OPEN_TEST(case_sym) \
423LEXLEO_MAKE_TEST(osal_file_open, case_sym)
425static const struct CMUnitTest osal_file_open_tests[] = {
426 OSAL_FILE_OPEN_CASES(OSAL_FILE_MAKE_OPEN_TEST)
429#undef OSAL_FILE_OPEN_CASES
430#undef OSAL_FILE_MAKE_OPEN_TEST
599 uint8_t file_content[16];
600 size_t file_content_len;
608 size_t first_expected_ret;
610 size_t second_expected_ret;
612} test_osal_file_read_case_t;
633 uint8_t first_read_content[16];
634 uint8_t second_read_content[16];
642 const test_osal_file_read_case_t *tc;
643} test_osal_file_read_fixture_t;
652static int setup_osal_file_read(
void **state)
654 const test_osal_file_read_case_t *tc =
655 (
const test_osal_file_read_case_t *)(*state);
657 test_osal_file_read_fixture_t *fx =
658 (test_osal_file_read_fixture_t *)
osal_malloc(
sizeof(*fx));
672 &fx->writable_osal_file,
673 "osal_file_read_tmp_file.txt",
684 tc->file_content_len,
685 fx->writable_osal_file,
688 (
size_t)tc->file_content_len
693 fx->writable_osal_file
697 fx->writable_osal_file = NULL;
700 &fx->readable_osal_file,
701 "osal_file_read_tmp_file.txt",
715static int teardown_osal_file_read(
void **state)
717 test_osal_file_read_fixture_t *fx =
718 (test_osal_file_read_fixture_t *)(*state);
720 if (fx->readable_osal_file) {
724 fx->readable_osal_file = NULL;
727 assert_true(fake_memory_no_leak());
728 assert_true(fake_memory_no_invalid_free());
729 assert_true(fake_memory_no_double_free());
743static void test_osal_file_read(
void **state)
745 test_osal_file_read_fixture_t *fx =
746 (test_osal_file_read_fixture_t *)(*state);
747 const test_osal_file_read_case_t *tc =
748 (
const test_osal_file_read_case_t *)fx->tc;
751 size_t ret = (size_t)-1;
752 void *ptr_arg = fx->first_read_content;
753 size_t size_arg = tc->first_size;
754 size_t nmemb_arg = tc->first_nmemb;
755 OSAL_FILE *stream_arg = fx->readable_osal_file;
770 ret = fx->file_ops->read(ptr_arg, size_arg, nmemb_arg, stream_arg, st_arg);
773 assert_int_equal(ret, tc->first_expected_ret);
775 assert_int_equal(*st_arg, tc->first_expected_st);
777 if (tc->first_expected_ret > 0) {
779 fx->first_read_content,
781 (tc->first_expected_ret * tc->first_size <= tc->file_content_len) ?
782 tc->first_expected_ret * tc->first_size
788 if (!tc->do_second_read) {
794 ptr_arg = fx->second_read_content;
795 size_arg = tc->second_size;
796 nmemb_arg = tc->second_nmemb;
797 stream_arg = fx->readable_osal_file;
798 st_arg = &fx->second_st_storage;
801 ret = fx->file_ops->read(ptr_arg, size_arg, nmemb_arg, stream_arg, st_arg);
804 assert_int_equal(ret, tc->second_expected_ret);
806 assert_int_equal(*st_arg, tc->second_expected_st);
808 if (tc->second_expected_ret > 0) {
810 tc->file_content_len >= tc->first_expected_ret * tc->first_size
813 fx->second_read_content,
814 tc->file_content + tc->first_expected_ret * tc->first_size,
815 (tc->second_expected_ret * tc->second_size + tc->first_expected_ret * tc->first_size <= tc->file_content_len) ?
816 tc->second_expected_ret * tc->second_size : tc->file_content_len - tc->first_expected_ret * tc->first_size
825static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_PTR_NULL = {
826 .name =
"osal_file_read_ptr_null",
830 .file_content =
"dummy content",
831 .file_content_len = 14,
834 .do_second_read =
false,
837 .first_expected_ret = 0,
841static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_ST_NULL = {
842 .name =
"osal_file_read_st_null",
846 .file_content =
"dummy content",
847 .file_content_len = 14,
850 .do_second_read =
false,
853 .first_expected_ret = 0,
856static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_STREAM_NULL = {
857 .name =
"osal_file_read_stream_null",
861 .file_content =
"dummy content",
862 .file_content_len = 14,
865 .do_second_read =
false,
868 .first_expected_ret = 0,
872static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_LESS_THAN_AVAILABLE = {
873 .name =
"osal_file_read_less_than_available",
877 .file_content =
"dummy content",
878 .file_content_len = 14,
881 .do_second_read =
false,
884 .first_expected_ret = 10,
888static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_EXACT_AVAILABLE = {
889 .name =
"osal_file_read_exact_available",
893 .file_content =
"dummy content",
894 .file_content_len = 14,
897 .do_second_read =
false,
900 .first_expected_ret = 14,
904static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_MORE_THAN_AVAILABLE = {
905 .name =
"osal_file_read_more_than_available",
909 .file_content =
"dummy content",
910 .file_content_len = 14,
913 .do_second_read =
false,
916 .first_expected_ret = 14,
920static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_EMPTY_FILE = {
921 .name =
"osal_file_read_empty_file",
926 .file_content_len = 0,
929 .do_second_read =
false,
932 .first_expected_ret = 0,
936static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_SEQUENTIAL_READS_PARTIAL_THEN_PARTIAL = {
937 .name =
"osal_file_read_sequential_reads_partial_then_partial",
941 .file_content =
"dummy content",
942 .file_content_len = 14,
945 .do_second_read =
true,
950 .first_expected_ret = 6,
952 .second_expected_ret = 4,
956static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_AFTER_EOF = {
957 .name =
"osal_file_read_after_eof",
961 .file_content =
"dummy content",
962 .file_content_len = 14,
965 .do_second_read =
true,
970 .first_expected_ret = 14,
972 .second_expected_ret = 0,
976static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_ZERO_SIZE = {
977 .name =
"osal_file_read_zero_size",
981 .file_content =
"dummy content",
982 .file_content_len = 14,
985 .do_second_read =
false,
988 .first_expected_ret = 0,
992static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_ZERO_NMEMB = {
993 .name =
"osal_file_read_zero_nmemb",
997 .file_content =
"dummy content",
998 .file_content_len = 14,
1001 .do_second_read =
false,
1004 .first_expected_ret = 0,
1008static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_LESS_THAN_AVAILABLE_SIZE_GT_1 = {
1009 .name =
"osal_file_read_read_less_than_available_size_gt_1",
1013 .file_content =
"dummy content",
1014 .file_content_len = 14,
1017 .do_second_read =
false,
1020 .first_expected_ret = 4,
1024static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_EXACT_AVAILABLE_SIZE_GT_1 = {
1025 .name =
"osal_file_read_read_exact_available_size_gt_1",
1029 .file_content =
"dummy content",
1030 .file_content_len = 14,
1033 .do_second_read =
false,
1036 .first_expected_ret = 7,
1040static const test_osal_file_read_case_t CASE_OSAL_FILE_READ_READ_MORE_THAN_AVAILABLE_SIZE_GT_1 = {
1041 .name =
"osal_file_read_more_than_available_size_gt_1",
1045 .file_content =
"dummy content",
1046 .file_content_len = 14,
1049 .do_second_read =
false,
1052 .first_expected_ret = 4,
1060#define OSAL_FILE_READ_CASES(X) \
1061X(CASE_OSAL_FILE_READ_PTR_NULL) \
1062X(CASE_OSAL_FILE_READ_ST_NULL) \
1063X(CASE_OSAL_FILE_READ_STREAM_NULL) \
1064X(CASE_OSAL_FILE_READ_LESS_THAN_AVAILABLE) \
1065X(CASE_OSAL_FILE_READ_READ_EXACT_AVAILABLE) \
1066X(CASE_OSAL_FILE_READ_READ_MORE_THAN_AVAILABLE) \
1067X(CASE_OSAL_FILE_READ_EMPTY_FILE) \
1068X(CASE_OSAL_FILE_READ_SEQUENTIAL_READS_PARTIAL_THEN_PARTIAL) \
1069X(CASE_OSAL_FILE_READ_AFTER_EOF) \
1070X(CASE_OSAL_FILE_READ_READ_ZERO_SIZE) \
1071X(CASE_OSAL_FILE_READ_READ_ZERO_NMEMB) \
1072X(CASE_OSAL_FILE_READ_READ_LESS_THAN_AVAILABLE_SIZE_GT_1) \
1073X(CASE_OSAL_FILE_READ_READ_EXACT_AVAILABLE_SIZE_GT_1) \
1074X(CASE_OSAL_FILE_READ_READ_MORE_THAN_AVAILABLE_SIZE_GT_1)
1076#define OSAL_FILE_MAKE_READ_TEST(case_sym) \
1077LEXLEO_MAKE_TEST(osal_file_read, case_sym)
1079static const struct CMUnitTest osal_file_read_tests[] = {
1080 OSAL_FILE_READ_CASES(OSAL_FILE_MAKE_READ_TEST)
1083#undef OSAL_FILE_READ_CASES
1084#undef OSAL_FILE_MAKE_READ_TEST
1196 uint8_t initial_file_content[16];
1197 size_t initial_file_content_len;
1198 const uint8_t first_write_content[16];
1201 bool do_second_write;
1202 const uint8_t second_write_content[16];
1204 size_t second_nmemb;
1207 size_t first_expected_ret;
1209 size_t second_expected_ret;
1211 uint8_t expected_file_content[16];
1212 size_t expected_file_content_len;
1213} test_osal_file_write_case_t;
1240 const test_osal_file_write_case_t *tc;
1241} test_osal_file_write_fixture_t;
1250static int setup_osal_file_write(
void **state)
1252 const test_osal_file_write_case_t *tc =
1253 (
const test_osal_file_write_case_t *)(*state);
1255 test_osal_file_write_fixture_t *fx =
1256 (test_osal_file_write_fixture_t *)
osal_malloc(
sizeof(*fx));
1263 fake_memory_reset();
1270 &fx->writable_osal_file,
1271 "osal_file_write_tmp_file.txt",
1279 fx->file_ops->write(
1280 tc->initial_file_content,
1282 tc->initial_file_content_len,
1283 fx->writable_osal_file,
1286 (
size_t)tc->initial_file_content_len
1297static int teardown_osal_file_write(
void **state)
1299 test_osal_file_write_fixture_t *fx =
1300 (test_osal_file_write_fixture_t *)(*state);
1302 if (fx->verification_osal_file) {
1306 fx->verification_osal_file = NULL;
1309 if (fx->writable_osal_file) {
1313 fx->writable_osal_file = NULL;
1316 assert_true(fake_memory_no_leak());
1317 assert_true(fake_memory_no_invalid_free());
1318 assert_true(fake_memory_no_double_free());
1332static void test_osal_file_write(
void **state)
1334 test_osal_file_write_fixture_t *fx =
1335 (test_osal_file_write_fixture_t *)(*state);
1336 const test_osal_file_write_case_t *tc =
1337 (
const test_osal_file_write_case_t *)fx->tc;
1340 size_t first_write_ret = (size_t)-1;
1342 const void *ptr_arg = tc->first_write_content;
1343 size_t size_arg = tc->first_size;
1344 size_t nmemb_arg = tc->first_nmemb;
1345 OSAL_FILE *stream_arg = fx->writable_osal_file;
1356 first_write_st_arg = NULL;
1360 first_write_ret = fx->file_ops->write(ptr_arg, size_arg, nmemb_arg, stream_arg, first_write_st_arg);
1364 size_t second_write_ret = (size_t)-1;
1365 if (tc->do_second_write) {
1367 ptr_arg = tc->second_write_content;
1368 size_arg = tc->second_size;
1369 nmemb_arg = tc->second_nmemb;
1370 stream_arg = fx->writable_osal_file;
1371 second_write_st_arg = &fx->second_st_storage;
1374 second_write_ret = fx->file_ops->write(ptr_arg, size_arg, nmemb_arg, stream_arg, second_write_st_arg);
1378 assert_true(first_write_ret == tc->first_expected_ret);
1379 if (first_write_st_arg) {
1380 assert_int_equal(*first_write_st_arg, tc->first_expected_st);
1382 if (tc->do_second_write) {
1383 assert_true(second_write_ret == tc->second_expected_ret);
1384 if (second_write_st_arg) {
1385 assert_int_equal(*second_write_st_arg, tc->second_expected_st);
1390 tc->initial_file_content_len
1392 tc->first_expected_ret * tc->first_size
1394 ((tc->do_second_write) ? tc->second_expected_ret * tc->second_size : 0);
1396 tc->expected_file_content_len
1401 fx->file_ops->close(fx->writable_osal_file)
1406 fx->writable_osal_file = NULL;
1408 if (tc->expected_file_content_len > 0) {
1412 &fx->verification_osal_file,
1413 "osal_file_write_tmp_file.txt",
1419 uint8_t read_buf[16] = { 0 };
1422 fx->file_ops->read(read_buf, 1, tc->expected_file_content_len, fx->verification_osal_file, &st)
1424 tc->expected_file_content_len
1427 assert_memory_equal(
1429 tc->expected_file_content,
1430 tc->expected_file_content_len
1433 fx->file_ops->close(
1434 fx->verification_osal_file
1438 fx->verification_osal_file = NULL;
1446static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_PTR_NULL = {
1447 .name =
"osal_file_write_ptr_null",
1450 .initial_file_content =
"abc",
1451 .initial_file_content_len = 3,
1454 .do_second_write =
false,
1456 .first_expected_ret = 0,
1458 .expected_file_content =
"abc",
1459 .expected_file_content_len = 3
1462static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_STREAM_NULL = {
1463 .name =
"osal_file_write_stream_null",
1466 .initial_file_content =
"abc",
1467 .initial_file_content_len = 3,
1468 .first_write_content =
"first",
1471 .do_second_write =
false,
1473 .first_expected_ret = 0,
1475 .expected_file_content =
"abc",
1476 .expected_file_content_len = 3
1479static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_ST_NULL = {
1480 .name =
"osal_file_write_st_null",
1483 .initial_file_content =
"abc",
1484 .initial_file_content_len = 3,
1485 .first_write_content =
"first",
1488 .do_second_write =
false,
1490 .first_expected_ret = 0,
1491 .expected_file_content =
"abc",
1492 .expected_file_content_len = 3
1495static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_ZERO_SIZE = {
1496 .name =
"osal_file_write_zero_size",
1499 .initial_file_content =
"abc",
1500 .initial_file_content_len = 3,
1501 .first_write_content =
"first",
1504 .do_second_write =
false,
1506 .first_expected_ret = 0,
1508 .expected_file_content =
"abc",
1509 .expected_file_content_len = 3
1512static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_ZERO_NMEMB = {
1513 .name =
"osal_file_write_zero_nmemb",
1516 .initial_file_content =
"abc",
1517 .initial_file_content_len = 3,
1518 .first_write_content =
"first",
1521 .do_second_write =
false,
1523 .first_expected_ret = 0,
1525 .expected_file_content =
"abc",
1526 .expected_file_content_len = 3
1529static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_ONE_ELEMENT_OK = {
1530 .name =
"osal_file_write_one_element_ok",
1533 .initial_file_content =
"abc",
1534 .initial_file_content_len = 3,
1535 .first_write_content =
"first",
1538 .do_second_write =
false,
1540 .first_expected_ret = 1,
1542 .expected_file_content =
"abcfi",
1543 .expected_file_content_len = 5
1546static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_MULTIPLE_ELEMENTS_SIZE_1_OK = {
1547 .name =
"osal_file_write_multiple_elements_size_1_ok",
1550 .initial_file_content =
"abc",
1551 .initial_file_content_len = 3,
1552 .first_write_content =
"first",
1555 .do_second_write =
false,
1557 .first_expected_ret = 4,
1559 .expected_file_content =
"abcfirs",
1560 .expected_file_content_len = 7
1563static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_MULTIPLE_ELEMENTS_SIZE_GT_1_OK = {
1564 .name =
"osal_file_write_multiple_elements_size_gt_1_ok",
1567 .initial_file_content =
"abc",
1568 .initial_file_content_len = 3,
1569 .first_write_content =
"first",
1572 .do_second_write =
false,
1574 .first_expected_ret = 2,
1576 .expected_file_content =
"abcfirs",
1577 .expected_file_content_len = 7
1580static const test_osal_file_write_case_t CASE_OSAL_FILE_WRITE_SEQUENTIAL_WRITES_OK = {
1581 .name =
"osal_file_write_sequential_writes_ok",
1584 .initial_file_content =
"abc",
1585 .initial_file_content_len = 3,
1586 .first_write_content =
"first",
1589 .do_second_write =
true,
1590 .second_write_content =
"second",
1594 .first_expected_ret = 5,
1596 .second_expected_ret = 3,
1598 .expected_file_content =
"abcfirstsecond",
1599 .expected_file_content_len = 14
1606#define OSAL_FILE_WRITE_CASES(X) \
1607X(CASE_OSAL_FILE_WRITE_PTR_NULL) \
1608X(CASE_OSAL_FILE_WRITE_STREAM_NULL) \
1609X(CASE_OSAL_FILE_WRITE_ST_NULL) \
1610X(CASE_OSAL_FILE_WRITE_ZERO_SIZE) \
1611X(CASE_OSAL_FILE_WRITE_ZERO_NMEMB) \
1612X(CASE_OSAL_FILE_WRITE_ONE_ELEMENT_OK) \
1613X(CASE_OSAL_FILE_WRITE_MULTIPLE_ELEMENTS_SIZE_1_OK) \
1614X(CASE_OSAL_FILE_WRITE_MULTIPLE_ELEMENTS_SIZE_GT_1_OK) \
1615X(CASE_OSAL_FILE_WRITE_SEQUENTIAL_WRITES_OK)
1617#define OSAL_FILE_MAKE_WRITE_TEST(case_sym) \
1618LEXLEO_MAKE_TEST(osal_file_write, case_sym)
1620static const struct CMUnitTest osal_file_write_tests[] = {
1621 OSAL_FILE_WRITE_CASES(OSAL_FILE_MAKE_WRITE_TEST)
1624#undef OSAL_FILE_WRITE_CASES
1625#undef OSAL_FILE_MAKE_WRITE_TEST
1667 uint8_t file_content[16];
1668 size_t file_content_len;
1672} test_osal_file_flush_case_t;
1693 const test_osal_file_flush_case_t *tc;
1694} test_osal_file_flush_fixture_t;
1703static int setup_osal_file_flush(
void **state)
1705 const test_osal_file_flush_case_t *tc =
1706 (
const test_osal_file_flush_case_t *)(*state);
1708 test_osal_file_flush_fixture_t *fx =
1709 (test_osal_file_flush_fixture_t *)
osal_malloc(
sizeof(*fx));
1716 fake_memory_reset();
1723 &fx->writable_osal_file,
1724 "osal_file_flush_tmp_file.txt",
1732 fx->file_ops->write(
1735 tc->file_content_len,
1736 fx->writable_osal_file,
1739 tc->file_content_len
1750static int teardown_osal_file_flush(
void **state)
1752 test_osal_file_flush_fixture_t *fx =
1753 (test_osal_file_flush_fixture_t *)(*state);
1755 if (fx->writable_osal_file) {
1759 fx->writable_osal_file = NULL;
1762 assert_true(fake_memory_no_leak());
1763 assert_true(fake_memory_no_invalid_free());
1764 assert_true(fake_memory_no_double_free());
1778static void test_osal_file_flush(
void **state)
1780 test_osal_file_flush_fixture_t *fx =
1781 (test_osal_file_flush_fixture_t *)(*state);
1782 const test_osal_file_flush_case_t *tc =
1783 (
const test_osal_file_flush_case_t *)fx->tc;
1786 OSAL_FILE *stream_arg = fx->writable_osal_file;
1798 assert_int_equal(ret, tc->expected_ret);
1805static const test_osal_file_flush_case_t CASE_OSAL_FILE_FLUSH_STREAM_NULL = {
1806 .name =
"osal_file_flush_stream_null",
1809 .file_content =
"abc",
1810 .file_content_len = 3,
1815static const test_osal_file_flush_case_t CASE_OSAL_FILE_FLUSH_OK = {
1816 .name =
"osal_file_flush_ok",
1819 .file_content =
"abc",
1820 .file_content_len = 3,
1829#define OSAL_FILE_FLUSH_CASES(X) \
1830X(CASE_OSAL_FILE_FLUSH_STREAM_NULL) \
1831X(CASE_OSAL_FILE_FLUSH_OK)
1833#define OSAL_FILE_MAKE_FLUSH_TEST(case_sym) \
1834LEXLEO_MAKE_TEST(osal_file_flush, case_sym)
1836static const struct CMUnitTest osal_file_flush_tests[] = {
1837 OSAL_FILE_FLUSH_CASES(OSAL_FILE_MAKE_FLUSH_TEST)
1840#undef OSAL_FILE_FLUSH_CASES
1841#undef OSAL_FILE_MAKE_FLUSH_TEST
1882} test_osal_file_close_case_t;
1903 const test_osal_file_close_case_t *tc;
1904} test_osal_file_close_fixture_t;
1913static int setup_osal_file_close(
void **state)
1915 const test_osal_file_close_case_t *tc =
1916 (
const test_osal_file_close_case_t *)(*state);
1918 test_osal_file_close_fixture_t *fx =
1919 (test_osal_file_close_fixture_t *)
osal_malloc(
sizeof(*fx));
1926 fake_memory_reset();
1934 "osal_file_close_tmp_file.txt",
1948static int teardown_osal_file_close(
void **state)
1950 test_osal_file_close_fixture_t *fx =
1951 (test_osal_file_close_fixture_t *)(*state);
1953 if (fx->osal_file) {
1955 fx->file_ops->close(fx->osal_file),
1958 fx->osal_file = NULL;
1961 assert_true(fake_memory_no_leak());
1962 assert_true(fake_memory_no_invalid_free());
1963 assert_true(fake_memory_no_double_free());
1977static void test_osal_file_close(
void **state)
1979 test_osal_file_close_fixture_t *fx =
1980 (test_osal_file_close_fixture_t *)(*state);
1981 const test_osal_file_close_case_t *tc =
1982 (
const test_osal_file_close_case_t *)fx->tc;
1995 fx->osal_file = NULL;
1999 assert_int_equal(ret, tc->expected_ret);
2006static const test_osal_file_close_case_t CASE_OSAL_FILE_CLOSE_STREAM_NULL = {
2007 .name =
"osal_file_close_stream_null",
2013static const test_osal_file_close_case_t CASE_OSAL_FILE_CLOSE_OK = {
2014 .name =
"osal_file_close_ok",
2024#define OSAL_FILE_CLOSE_CASES(X) \
2025X(CASE_OSAL_FILE_CLOSE_STREAM_NULL) \
2026X(CASE_OSAL_FILE_CLOSE_OK)
2028#define OSAL_FILE_MAKE_CLOSE_TEST(case_sym) \
2029LEXLEO_MAKE_TEST(osal_file_close, case_sym)
2031static const struct CMUnitTest osal_file_close_tests[] = {
2032 OSAL_FILE_CLOSE_CASES(OSAL_FILE_MAKE_CLOSE_TEST)
2035#undef OSAL_FILE_CLOSE_CASES
2036#undef OSAL_FILE_MAKE_CLOSE_TEST
2047 static const struct CMUnitTest osal_file_non_parametric_tests[] = {
2052 failed += cmocka_run_group_tests(osal_file_non_parametric_tests, NULL, NULL);
2053 failed += cmocka_run_group_tests(osal_file_open_tests, NULL, NULL);
2054 failed += cmocka_run_group_tests(osal_file_read_tests, NULL, NULL);
2055 failed += cmocka_run_group_tests(osal_file_write_tests, NULL, NULL);
2056 failed += cmocka_run_group_tests(osal_file_flush_tests, NULL, NULL);
2057 failed += cmocka_run_group_tests(osal_file_close_tests, NULL, NULL);
const osal_file_ops_t * osal_file_default_ops(void)
Return the default OSAL file operations for the active platform.
@ OSAL_FILE_STATUS_INVALID
void * osal_memset(void *s, int c, size_t n)
void * osal_malloc(size_t size)
void osal_free(void *ptr)
const osal_mem_ops_t * osal_mem_test_fake_ops(void)
Private representation of an acquired OSAL file handle.
size_t(* write)(osal_file_t *f, const void *buf, size_t n, osal_file_status_t *status)
osal_file_status_t(* close)(osal_file_t *f)
osal_file_status_t(* flush)(osal_file_t *f)
size_t(* read)(osal_file_t *f, void *buf, size_t n, osal_file_status_t *status)
osal_file_t *(* open)(const char *path_utf8, uint32_t flags, osal_file_status_t *status, const osal_file_env_t *env)
osal_file_write_scenario_t
Scenarios for osal_file_ops_t::write().
@ OSAL_FILE_WRITE_SCENARIO_WRITE_MULTIPLE_ELEMENTS_SIZE_GT_1_OK
@ OSAL_FILE_WRITE_SCENARIO_ST_NULL
@ OSAL_FILE_WRITE_SCENARIO_ZERO_SIZE
@ OSAL_FILE_WRITE_SCENARIO_WRITE_MULTIPLE_ELEMENTS_SIZE_1_OK
@ OSAL_FILE_WRITE_SCENARIO_ZERO_NMEMB
@ OSAL_FILE_WRITE_SCENARIO_STREAM_NULL
@ OSAL_FILE_WRITE_SCENARIO_PTR_NULL
@ OSAL_FILE_WRITE_SCENARIO_WRITE_ONE_ELEMENT_OK
@ OSAL_FILE_WRITE_SCENARIO_SEQUENTIAL_WRITES_OK
osal_file_close_scenario_t
Scenarios for osal_file_ops_t::close().
@ OSAL_FILE_CLOSE_SCENARIO_OK
@ OSAL_FILE_CLOSE_SCENARIO_STREAM_NULL
static void test_osal_file_default_ops(void **state)
Test osal_file_default_ops().
osal_file_flush_scenario_t
Scenarios for osal_file_ops_t::flush().
@ OSAL_FILE_FLUSH_SCENARIO_OK
@ OSAL_FILE_FLUSH_SCENARIO_STREAM_NULL
osal_file_read_scenario_t
Scenarios for osal_file_ops_t::read().
@ OSAL_FILE_READ_SCENARIO_READ_AFTER_EOF
@ OSAL_FILE_READ_SCENARIO_PTR_NULL
@ OSAL_FILE_READ_SCENARIO_SEQUENTIAL_READS_PARTIAL_THEN_PARTIAL
@ OSAL_FILE_READ_SCENARIO_ZERO_NMEMB
@ OSAL_FILE_READ_SCENARIO_READ_EXACT_AVAILABLE_SIZE_GT_1
@ OSAL_FILE_READ_SCENARIO_READ_LESS_THAN_AVAILABLE_SIZE_GT_1
@ OSAL_FILE_READ_SCENARIO_READ_EXACT_AVAILABLE
@ OSAL_FILE_READ_SCENARIO_ZERO_SIZE
@ OSAL_FILE_READ_SCENARIO_READ_MORE_THAN_AVAILABLE_SIZE_GT_1
@ OSAL_FILE_READ_SCENARIO_STREAM_NULL
@ OSAL_FILE_READ_SCENARIO_READ_MORE_THAN_AVAILABLE
@ OSAL_FILE_READ_SCENARIO_READ_LESS_THAN_AVAILABLE
@ OSAL_FILE_READ_SCENARIO_EMPTY_FILE
@ OSAL_FILE_READ_SCENARIO_ST_NULL
osal_file_open_scenario_t
Scenarios for osal_file_ops_t::open().
@ OSAL_FILE_OPEN_SCENARIO_MODE_NULL
@ OSAL_FILE_OPEN_SCENARIO_PATHNAME_EMPTY
@ OSAL_FILE_OPEN_SCENARIO_PATHNAME_NULL
@ OSAL_FILE_OPEN_SCENARIO_OOM
@ OSAL_FILE_OPEN_SCENARIO_MODE_UNSUPPORTED
@ OSAL_FILE_OPEN_SCENARIO_OK
@ OSAL_FILE_OPEN_SCENARIO_MEM_OPS_NULL
@ OSAL_FILE_OPEN_SCENARIO_OUT_NULL