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 <filesystem>
17 #include <fstream>
18 #include <gmock/gmock.h>
19 #include <gtest/gtest.h>
20
21 #include "mock/uv_fs_mock.h"
22 #include "open_core.h"
23 #include "unistd_mock.h"
24
25 namespace OHOS::FileManagement::ModuleFileIO::Test {
26 using namespace testing;
27 using namespace testing::ext;
28 using namespace std;
29
30 class OpenCoreMockTest : public testing::Test {
31 public:
32 static void SetUpTestCase(void);
33 static void TearDownTestCase(void);
34 void SetUp();
35 void TearDown();
36
37 private:
38 static inline shared_ptr<UvfsMock> uvMock = nullptr;
39 };
40
SetUpTestCase(void)41 void OpenCoreMockTest::SetUpTestCase(void)
42 {
43 GTEST_LOG_(INFO) << "SetUpTestCase";
44 uvMock = std::make_shared<UvfsMock>();
45 Uvfs::ins = uvMock;
46 UnistdMock::EnableMock();
47 }
48
TearDownTestCase(void)49 void OpenCoreMockTest::TearDownTestCase(void)
50 {
51 GTEST_LOG_(INFO) << "TearDownTestCase";
52 Uvfs::ins = nullptr;
53 uvMock = nullptr;
54 UnistdMock::DisableMock();
55 }
56
SetUp(void)57 void OpenCoreMockTest::SetUp(void)
58 {
59 GTEST_LOG_(INFO) << "SetUp";
60 }
61
TearDown(void)62 void OpenCoreMockTest::TearDown(void)
63 {
64 GTEST_LOG_(INFO) << "TearDown";
65 }
66
67 /**
68 * @tc.name: OpenCoreMockTest_DoOpen_001
69 * @tc.desc: Test function of OpenCore::DoOpen interface for SUCCESS.
70 * @tc.size: MEDIUM
71 * @tc.type: FUNC
72 * @tc.level Level 1
73 */
74 HWTEST_F(OpenCoreMockTest, OpenCoreMockTest_DoOpen_001, testing::ext::TestSize.Level1)
75 {
76 GTEST_LOG_(INFO) << "OpenCoreMockTest-begin OpenCoreMockTest_DoOpen_001";
77
78 string path = "/test/OpenCoreMockTest_DoOpen_001";
79 int32_t mode = 0;
80
81 EXPECT_CALL(*uvMock, uv_fs_open(_, _, _, _, _, _)).WillOnce(Return(0));
82 auto res = OpenCore::DoOpen(path, mode);
83 EXPECT_EQ(res.IsSuccess(), true);
84
85 GTEST_LOG_(INFO) << "OpenCoreMockTest-end OpenCoreMockTest_DoOpen_001";
86 }
87
88 /**
89 * @tc.name: OpenCoreMockTest_DoOpen_002
90 * @tc.desc: Test function of OpenCore::DoOpen interface for SUCCESS.
91 * @tc.size: MEDIUM
92 * @tc.type: FUNC
93 * @tc.level Level 1
94 */
95 HWTEST_F(OpenCoreMockTest, OpenCoreMockTest_DoOpen_002, testing::ext::TestSize.Level1)
96 {
97 GTEST_LOG_(INFO) << "OpenCoreMockTest-begin OpenCoreMockTest_DoOpen_002";
98
99 string path = "file://test/OpenCoreMockTest_DoOpen_002";
100 int32_t mode = 0;
101
102 auto unistdMock = UnistdMock::GetMock();
103 EXPECT_CALL(*uvMock, uv_fs_open(_, _, _, _, _, _)).WillOnce(Return(0));
104 EXPECT_CALL(*unistdMock, read(testing::_, testing::_, testing::_)).WillRepeatedly(testing::Return(1));
105 EXPECT_CALL(*unistdMock, access(testing::_, testing::_)).WillRepeatedly(testing::Return(0));
106 auto res = OpenCore::DoOpen(path, mode);
107 testing::Mock::VerifyAndClearExpectations(unistdMock.get());
108 EXPECT_EQ(res.IsSuccess(), true);
109
110 GTEST_LOG_(INFO) << "OpenCoreMockTest-end OpenCoreMockTest_DoOpen_002";
111 }
112
113 /**
114 * @tc.name: OpenCoreMockTest_DoOpen_003
115 * @tc.desc: Test function of OpenCore::DoOpen interface for FALSE.
116 * @tc.size: MEDIUM
117 * @tc.type: FUNC
118 * @tc.level Level 1
119 */
120 HWTEST_F(OpenCoreMockTest, OpenCoreMockTest_DoOpen_003, testing::ext::TestSize.Level1)
121 {
122 GTEST_LOG_(INFO) << "OpenCoreMockTest-begin OpenCoreMockTest_DoOpen_003";
123
124 string path = "file://test/OpenCoreMockTest_DoOpen_003";
125 int32_t mode = 0;
126
127 auto unistdMock = UnistdMock::GetMock();
128 EXPECT_CALL(*uvMock, uv_fs_open(_, _, _, _, _, _)).WillOnce(Return(-1));
129 EXPECT_CALL(*unistdMock, read(testing::_, testing::_, testing::_)).WillRepeatedly(testing::Return(1));
130 EXPECT_CALL(*unistdMock, access(testing::_, testing::_)).WillRepeatedly(testing::Return(0));
131 auto res = OpenCore::DoOpen(path, mode);
132 testing::Mock::VerifyAndClearExpectations(&unistdMock);
133 EXPECT_EQ(res.IsSuccess(), false);
134
135 GTEST_LOG_(INFO) << "OpenCoreMockTest-end OpenCoreMockTest_DoOpen_003";
136 }
137
138 /**
139 * @tc.name: OpenCoreMockTest_DoOpen_004
140 * @tc.desc: Test function of OpenCore::DoOpen interface for ERROR.
141 * @tc.size: MEDIUM
142 * @tc.type: FUNC
143 * @tc.level Level 1
144 */
145 HWTEST_F(OpenCoreMockTest, OpenCoreMockTest_DoOpen_004, testing::ext::TestSize.Level1)
146 {
147 GTEST_LOG_(INFO) << "OpenCoreMockTest-begin OpenCoreMockTest_DoOpen_004";
148
149 string path = "/test/OpenCoreMockTest_DoOpen_004";
150 int32_t mode = 0;
151
152 EXPECT_CALL(*uvMock, uv_fs_open(_, _, _, _, _, _)).WillOnce(Return(-1));
153 auto res = OpenCore::DoOpen(path, mode);
154 EXPECT_EQ(res.IsSuccess(), false);
155
156 GTEST_LOG_(INFO) << "OpenCoreMockTest-end OpenCoreMockTest_DoOpen_004";
157 }
158
159 } // namespace OHOS::FileManagement::ModuleFileIO::Test