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