1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
/**
* SPDX-License-Identifier: Apache-2.0
*
* @file fileop_test_utils.cpp
* @brief Unit test fot fileop.c
*/
#include <gtest/gtest.h>
#include "mock/syscall_io_mock.hpp"
// Test Terget files ---------------------------------------
extern "C" {
#include "../lib/fileop.c"
}
// Test Terget files ---------------------------------------
using namespace ::testing;
struct fileop_test_utils : Test, SyscallIOMockBase {};
//--------------------------------------------------------------------------------------------------------
TEST_F(fileop_test_utils, fileop_test_utils_refop_header_create__success)
{
s_refop_file_header header;
s_refop_file_header *head = &header;
refop_header_create(head, 0, 0);
refop_header_create(head, 0x1234, 1*1024*1024*1024);
refop_header_create(head, 0x5678, 64*1024*1024*1024ul);
}
//--------------------------------------------------------------------------------------------------------
TEST_F(fileop_test_utils, fileop_test_utils_refop_header_validation__invalid_header)
{
s_refop_file_header header;
s_refop_file_header *head = &header;
int ret = -1;
// broken magic
refop_header_create(head, 0x1234, 64*1024*1024);
head->magic = 0;
ret = refop_header_validation(head);
ASSERT_EQ(-1, ret);
// broken version
refop_header_create(head, 0x1234, 64*1024*1024);
head->version = 0x88888888;
head->version_inv = 0x88888888;
ret = refop_header_validation(head);
ASSERT_EQ(-1, ret);
// invalid version
refop_header_create(head, 0x1234, 64*1024*1024);
head->version = 0x88888888;
head->version_inv = ~head->version;
ret = refop_header_validation(head);
ASSERT_EQ(-1, ret);
// broken crc
refop_header_create(head, 0x1234, 64*1024*1024);
head->crc16 = 0x8888;
head->crc16_inv = 0x8888;
ret = refop_header_validation(head);
ASSERT_EQ(-1, ret);
// broken size
refop_header_create(head, 0x1234, 64*1024*1024);
head->size_inv = head->size;
ret = refop_header_validation(head);
ASSERT_EQ(-1, ret);
}
//--------------------------------------------------------------------------------------------------------
TEST_F(fileop_test_utils, fileop_test_utils_refop_header_validation__valid_header)
{
s_refop_file_header header;
s_refop_file_header *head = &header;
int ret = -1;
// Valid header
refop_header_create(head, 0x1234, 64*1024*1024);
ret = refop_header_validation(head);
ASSERT_EQ(0, ret);
// Valid header
refop_header_create(head, 0xabcd, 64*1024);
ret = refop_header_validation(head);
ASSERT_EQ(0, ret);
// Valid header
refop_header_create(head, 0x0000, 1*1024*1024);
ret = refop_header_validation(head);
ASSERT_EQ(0, ret);
}
//--------------------------------------------------------------------------------------------------------
TEST_F(fileop_test_utils, fileop_test_utils_refop_file_test__stat_error)
{
int ret = -1;
//dummy data
char testfilename[] = "/tmp/test.bin";
/* stat error case
EACCES
EFAULT
ELOOP
ENAMETOOLONG
ENOENT
ENOMEM
ENOTDIR
EOVERFLOW
*/
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(ENOENT, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-1, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(EACCES, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(EFAULT, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(ELOOP, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(ENAMETOOLONG, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(ENOMEM, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(ENOTDIR, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(SetErrnoAndReturn(EOVERFLOW, -1));
ret = refop_file_test(testfilename);
ASSERT_EQ(-2, ret);
EXPECT_CALL(sysiom, stat(testfilename, _)).WillOnce(Return(0));
ret = refop_file_test(testfilename);
ASSERT_EQ(0, ret);
}
|