• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "atomicfile_mock.h"
17 
18 #include <fcntl.h>
19 #include <gtest/gtest.h>
20 
21 namespace OHOS {
22 namespace FileManagement {
23 namespace ModuleFileIO {
24 namespace Test {
25 using namespace std;
26 using namespace std::filesystem;
27 using namespace OHOS::FileManagement::ModuleFileIO;
28 
29 static const string g_atomicfilePath = "/data/test/AtomicfileMockTest.txt";
30 static const mode_t g_atomicfilePermission = 0644;
31 
32 class AtomicfileMockTest : public testing::Test {
33 public:
SetUpTestCase(void)34     static void SetUpTestCase(void)
35     {
36         AtomicfileMock::EnableMock();
37         int32_t fd = open(g_atomicfilePath.c_str(), O_CREAT | O_RDWR, g_atomicfilePermission);
38         close(fd);
39     };
TearDownTestCase()40     static void TearDownTestCase()
41     {
42         AtomicfileMock::DisableMock();
43         rmdir(g_atomicfilePath.c_str());
44     };
SetUp()45     void SetUp() {};
TearDown()46     void TearDown() {};
47 };
48 
49 /**
50  * @tc.name: AtomicfileFailWrite_0001
51  * @tc.desc: Test function of Atomicfile::FailWrite() interface for fail.
52  * @tc.size: MEDIUM
53  * @tc.type: FUNC
54  * @tc.level Level 1
55  */
56 HWTEST_F(AtomicfileMockTest, AtomicfileFailWrite_0001, testing::ext::TestSize.Level1)
57 {
58     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFailWrite_0001";
59     napi_env env = reinterpret_cast<napi_env>(0x1000);
60     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
61     AtomicFileEntity entity;
62     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
63 
64     auto mock_ = AtomicfileMock::GetMock();
65     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
66     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
67     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
68         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
69     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
70         .WillOnce(testing::Return(napi_ok));
71     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
72         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
73 
74     EXPECT_CALL(*mock_, remove(testing::_)).WillOnce(testing::Return(napi_ok));
75     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
76 
77     auto res = AtomicFileNExporter::FailWrite(env, info);
78     EXPECT_EQ(res, nullptr);
79 
80     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFailWrite_0001";
81 }
82 
83 /**
84  * @tc.name: AtomicfileFailWrite_0002
85  * @tc.desc: Test function of Atomicfile::FailWrite() interface for fail.
86  * @tc.size: MEDIUM
87  * @tc.type: FUNC
88  * @tc.level Level 1
89  */
90 HWTEST_F(AtomicfileMockTest, AtomicfileFailWrite_0002, testing::ext::TestSize.Level1)
91 {
92     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFailWrite_0002";
93     napi_env env = reinterpret_cast<napi_env>(0x1000);
94     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
95     AtomicFileEntity entity;
96     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
97 
98     auto mock_ = AtomicfileMock::GetMock();
99     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
100     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
101     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
102         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
103     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
104         .WillOnce(testing::Return(napi_ok));
105     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
106         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
107 
108     EXPECT_CALL(*mock_, remove(testing::_)).WillOnce(testing::Return(-1));
109     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
110     EXPECT_CALL(*mock_, ThrowErr(testing::_, testing::_));
111 
112     auto res = AtomicFileNExporter::FailWrite(env, info);
113     EXPECT_EQ(res, nullptr);
114 
115     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFailWrite_0002";
116 }
117 
118 /**
119  * @tc.name: AtomicfileFailWrite_0003
120  * @tc.desc: Test function of Atomicfile::FailWrite() interface for fail.
121  * @tc.size: MEDIUM
122  * @tc.type: FUNC
123  * @tc.level Level 1
124  */
125 HWTEST_F(AtomicfileMockTest, AtomicfileFailWrite_0003, testing::ext::TestSize.Level1)
126 {
127     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFailWrite_0003";
128     napi_env env = reinterpret_cast<napi_env>(0x1000);
129     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
130     AtomicFileEntity entity;
131     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
132 
133     auto mock_ = AtomicfileMock::GetMock();
134     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
135     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
136     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
137         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
138     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
139         .WillOnce(testing::Return(napi_ok));
140     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
141         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
142 
143     EXPECT_CALL(*mock_, remove(testing::_)).WillOnce(testing::Return(-1));
144     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_invalid_arg));
145     EXPECT_CALL(*mock_, ThrowErr(testing::_, testing::_));
146 
147     auto res = AtomicFileNExporter::FailWrite(env, info);
148     EXPECT_EQ(res, nullptr);
149 
150     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFailWrite_0003";
151 }
152 
153 /**
154  * @tc.name: AtomicfileFinishWrite_0001
155  * @tc.desc: Test function of Atomicfile::FinishWrite() interface for fail.
156  * @tc.size: MEDIUM
157  * @tc.type: FUNC
158  * @tc.level Level 1
159  */
160 HWTEST_F(AtomicfileMockTest, AtomicfileFinishWrite_0001, testing::ext::TestSize.Level1)
161 {
162     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFinishWrite_0001";
163     napi_env env = reinterpret_cast<napi_env>(0x1000);
164     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
165     AtomicFileEntity entity;
166     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
167 
168     auto mock_ = AtomicfileMock::GetMock();
169     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
170     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
171     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
172         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
173     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
174         .WillOnce(testing::Return(napi_ok));
175     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
176         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
177 
178     EXPECT_CALL(*mock_, rename(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
179     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
180 
181     auto res = AtomicFileNExporter::FinishWrite(env, info);
182     EXPECT_EQ(res, nullptr);
183 
184     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFinishWrite_0001";
185 }
186 
187 /**
188  * @tc.name: AtomicfileFinishWrite_0002
189  * @tc.desc: Test function of Atomicfile::FinishWrite() interface for fail.
190  * @tc.size: MEDIUM
191  * @tc.type: FUNC
192  * @tc.level Level 1
193  */
194 HWTEST_F(AtomicfileMockTest, AtomicfileFinishWrite_0002, testing::ext::TestSize.Level1)
195 {
196     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFinishWrite_0002";
197     napi_env env = reinterpret_cast<napi_env>(0x1000);
198     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
199     AtomicFileEntity entity;
200     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
201 
202     auto mock_ = AtomicfileMock::GetMock();
203     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
204     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
205     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
206         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
207     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
208         .WillOnce(testing::Return(napi_ok));
209     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
210         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
211 
212     EXPECT_CALL(*mock_, rename(testing::_, testing::_)).WillOnce(testing::Return(-1));
213     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
214     EXPECT_CALL(*mock_, ThrowErr(testing::_, testing::_));
215 
216     auto res = AtomicFileNExporter::FinishWrite(env, info);
217     EXPECT_EQ(res, nullptr);
218 
219     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFinishWrite_0002";
220 }
221 
222 /**
223  * @tc.name: AtomicfileFinishWrite_0003
224  * @tc.desc: Test function of Atomicfile::FinishWrite() interface for fail.
225  * @tc.size: MEDIUM
226  * @tc.type: FUNC
227  * @tc.level Level 1
228  */
229 HWTEST_F(AtomicfileMockTest, AtomicfileFinishWrite_0003, testing::ext::TestSize.Level1)
230 {
231     GTEST_LOG_(INFO) << "AtomicfileMockTest-begin AtomicfileFinishWrite_0003";
232     napi_env env = reinterpret_cast<napi_env>(0x1000);
233     napi_callback_info info = reinterpret_cast<napi_callback_info>(0x1000);
234     AtomicFileEntity entity;
235     std::tuple<AtomicFileEntity *, int32_t> tmp(&entity, 1);
236 
237     auto mock_ = AtomicfileMock::GetMock();
238     EXPECT_CALL(*mock_, InitArgs(testing::_)).WillOnce(testing::Return(true));
239     EXPECT_CALL(*mock_, GetThisVar()).WillOnce(testing::Return(reinterpret_cast<napi_value>(&entity)));
240     EXPECT_CALL(*mock_, napi_unwrap(testing::_, testing::_, testing::_))
241         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(static_cast<void *>(&entity)), testing::Return(napi_ok)));
242     EXPECT_CALL(*mock_, napi_get_reference_value(testing::_, testing::_, testing::_))
243         .WillOnce(testing::Return(napi_ok));
244     EXPECT_CALL(*mock_, napi_typeof(testing::_, testing::_, testing::_))
245         .WillOnce(testing::DoAll(testing::SetArgPointee<2>(napi_undefined), testing::Return(napi_ok)));
246 
247     EXPECT_CALL(*mock_, rename(testing::_, testing::_)).WillOnce(testing::Return(napi_ok));
248     EXPECT_CALL(*mock_, napi_delete_reference(testing::_, testing::_)).WillOnce(testing::Return(napi_invalid_arg));
249     EXPECT_CALL(*mock_, ThrowErr(testing::_, testing::_));
250 
251     auto res = AtomicFileNExporter::FinishWrite(env, info);
252     EXPECT_EQ(res, nullptr);
253 
254     GTEST_LOG_(INFO) << "AtomicfileMockTest-end AtomicfileFinishWrite_0003";
255 }
256 
257 } // namespace Test
258 } // namespace ModuleFileIO
259 } // namespace FileManagement
260 } // namespace OHOS