aboutsummaryrefslogtreecommitdiffstats
path: root/test/fileop_test_utils.cpp
blob: f95fa6fc619267cb8338574ae666966ff5579bd1 (plain)
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;

	// broaken magic
	refop_header_create(head, 0x1234, 64*1024*1024);
	head->magic = 0;
	ret = refop_header_validation(head);
	ASSERT_EQ(-1, ret);

	// broaken 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);

	// broaken 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);

	// broaken 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);
}