Branch data Line data Source code
1 : : #include "sute.h"
2 : : #include "mocks.h"
3 : : #include <errno.h>
4 : :
5 : : #define READ_FAIL_REL_PATH "tests/fixtures/diffs/diff1/path1/AAA/ZAW/D/e/f/b_file.txt"
6 : :
7 : : /**
8 : : * Simulate fread failure for a specific file to verify error handling.
9 : : */
10 : 1 : Return test0031(void)
11 : : {
12 : 1 : INITTEST;
13 : :
14 : 1 : create(char,result);
15 : 1 : create(char,pattern);
16 : 1 : create(char,error_buffer);
17 : :
18 : 1 : ASSERT(SUCCESS == set_environment_variable("TESTING","true"));
19 : :
20 : 1 : ASSERT(SUCCESS == move_path("tests/fixtures/diffs/diff1","tests/fixtures/diff1_backup"));
21 : 1 : ASSERT(SUCCESS == copy_path("tests/fixtures/diff1_backup","tests/fixtures/diffs/diff1"));
22 : :
23 : 1 : const char *arguments = "--database=read_fail.db --progress"
24 : : " tests/fixtures/diffs/diff1";
25 : :
26 : : /* Configure the fread mock to fail once for the target file only. */
27 : 1 : mocks_fread_reset();
28 : 1 : mocks_fread_set_target_suffix(READ_FAIL_REL_PATH);
29 : 1 : mocks_fread_enable(true);
30 : 1 : mocks_fread_set_errno(EIO);
31 : :
32 : 1 : ASSERT(SUCCESS == runit(arguments,result,error_buffer,COMPLETED,ALLOW_BOTH));
33 : :
34 : : /* Always disable the mock and restore the previous run mode. */
35 : 1 : mocks_fread_enable(false);
36 : :
37 : 1 : ASSERT(error_buffer->length == 0);
38 : :
39 : 1 : const char *filename = "templates/0031_001.txt";
40 : :
41 : 1 : ASSERT(SUCCESS == get_file_content(filename,pattern));
42 : 1 : ASSERT(SUCCESS == match_pattern(result,pattern,filename));
43 : :
44 : 1 : ASSERT(SUCCESS == delete_path("read_fail.db"));
45 : 1 : ASSERT(SUCCESS == delete_path("tests/fixtures/diffs/diff1"));
46 : :
47 : 1 : ASSERT(SUCCESS == move_path("tests/fixtures/diff1_backup","tests/fixtures/diffs/diff1"));
48 : :
49 : : /* The wrapper should have injected exactly one read failure. */
50 : 1 : ASSERT(mocks_fread_call_count() == 1);
51 : 1 : mocks_fread_reset();
52 : :
53 : 1 : del(pattern);
54 : 1 : del(result);
55 : 1 : del(error_buffer);
56 : :
57 : 1 : RETURN_STATUS;
58 : : }
|