1 /*
2 * Copyright (c) 2023 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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18
19 #include "ipc/daemon_stub.h"
20 #include "ipc/distributed_file_daemon_ipc_interface_code.h"
21 #include "i_daemon_mock.h"
22 #include "utils_log.h"
23
24 namespace OHOS::Storage::DistributedFile::Test {
25 using namespace testing;
26 using namespace testing::ext;
27 using namespace std;
28
29 namespace {
30 DistributedHardware::DmDeviceInfo deviceInfo = {
31 .deviceId = "testdevid",
32 .deviceName = "testdevname",
33 .networkId = "testnetworkid",
34 };
35 }
36
37 const std::string srcUri = "file://docs/storage/Users/currentUser/""Documents?networkid=xxxxx";
38 const std::string dstUri = "file://docs/storage/Users/currentUser/Documents";
39 const std::string srcDeviceId = "testSrcDeviceId";
40 const sptr<IRemoteObject> listener = sptr(new DaemonServiceMock());
41
42 class MockDaemonStub : public DaemonStub {
43 public:
44 MOCK_METHOD1(OpenP2PConnection, int32_t(const DistributedHardware::DmDeviceInfo &deviceInfo));
45 MOCK_METHOD1(CloseP2PConnection, int32_t(const DistributedHardware::DmDeviceInfo &deviceInfo));
46 MOCK_METHOD4(RequestSendFile,
47 int32_t(const std::string &srcUri,
48 const std::string &dstPath,
49 const std::string &remoteDeviceId,
50 const std::string &sessionName));
51 MOCK_METHOD4(PrepareSession,
52 int32_t(const std::string &srcUri,
53 const std::string &dstUri,
54 const std::string &srcDeviceId,
55 const sptr<IRemoteObject> &listener));
56 };
57
58 class DaemonStubTest : public testing::Test {
59 public:
60 static void SetUpTestCase(void);
61 static void TearDownTestCase(void);
62 void SetUp();
63 void TearDown();
64 std::shared_ptr<DaemonStub> daemonStub_;
65 };
66
SetUpTestCase(void)67 void DaemonStubTest::SetUpTestCase(void)
68 {
69 GTEST_LOG_(INFO) << "SetUpTestCase";
70 }
71
TearDownTestCase(void)72 void DaemonStubTest::TearDownTestCase(void)
73 {
74 GTEST_LOG_(INFO) << "TearDownTestCase";
75 }
76
SetUp(void)77 void DaemonStubTest::SetUp(void)
78 {
79 daemonStub_ = std::make_shared<MockDaemonStub>();
80 GTEST_LOG_(INFO) << "SetUp";
81 }
82
TearDown(void)83 void DaemonStubTest::TearDown(void)
84 {
85 GTEST_LOG_(INFO) << "TearDown";
86 }
87
88 /**
89 * @tc.name: DaemonStubOnRemoteRequestTest001
90 * @tc.desc: Verify the OnRemoteRequest function
91 * @tc.type: FUNC
92 * @tc.require: I7M6L1
93 */
94 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest001, TestSize.Level1)
95 {
96 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest001 Start";
97 try {
98 MessageParcel data;
99 MessageParcel reply;
100 MessageOption option;
101 int ret = daemonStub_->OnRemoteRequest(
102 static_cast<uint32_t>(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_OPEN_P2P_CONNECTION), data,
103 reply, option);
104 EXPECT_EQ(ret, IDaemon::DFS_DAEMON_DESCRIPTOR_IS_EMPTY);
105 } catch (...) {
106 EXPECT_TRUE(false);
107 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest001 ERROR";
108 }
109 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest001 End";
110 }
111
112 /**
113 * @tc.name: DaemonStubOnRemoteRequestTest002
114 * @tc.desc: Verify the OnRemoteRequest function
115 * @tc.type: FUNC
116 * @tc.require: I7M6L1
117 */
118 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest002, TestSize.Level1)
119 {
120 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest002 Start";
121 try {
122 MessageParcel data;
123 MessageParcel reply;
124 MessageOption option;
125 int ret = daemonStub_->OnRemoteRequest(
126 static_cast<uint32_t>(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_CLOSE_P2P_CONNECTION), data,
127 reply, option);
128 EXPECT_EQ(ret, IDaemon::DFS_DAEMON_DESCRIPTOR_IS_EMPTY);
129 } catch (...) {
130 EXPECT_TRUE(false);
131 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest002 ERROR";
132 }
133 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest002 End";
134 }
135
136 /**
137 * @tc.name: DaemonStubOnRemoteRequestTest003
138 * @tc.desc: Verify the OnRemoteRequest function
139 * @tc.type: FUNC
140 * @tc.require: I7M6L1
141 */
142 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest003, TestSize.Level1)
143 {
144 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest003 Start";
145 try {
146 int32_t code = 1000;
147 MessageParcel data;
148 EXPECT_TRUE(data.WriteInterfaceToken(IDaemon::GetDescriptor()));
149 MessageParcel reply;
150 MessageOption option;
151 int ret = daemonStub_->OnRemoteRequest(code, data, reply, option);
152 EXPECT_NE(ret, 0);
153 } catch (...) {
154 EXPECT_TRUE(false);
155 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest003 ERROR";
156 }
157 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest003 End";
158 }
159
160 /**
161 * @tc.name: DaemonStubOnRemoteRequestTest004
162 * @tc.desc: Verify the DaemonStubOnRemoteRequest function
163 * @tc.type: FUNC
164 * @tc.require: I7M6L1
165 */
166 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest004, TestSize.Level1)
167 {
168 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest004 Start";
169 try {
170 MessageParcel data;
171 EXPECT_TRUE(data.WriteInterfaceToken(IDaemon::GetDescriptor()));
172 MessageParcel reply;
173 MessageOption option;
174
175 EXPECT_TRUE(data.WriteCString(deviceInfo.deviceId));
176 EXPECT_TRUE(data.WriteCString(deviceInfo.deviceName));
177 EXPECT_TRUE(data.WriteCString(deviceInfo.networkId));
178
179 int ret = daemonStub_->OnRemoteRequest(
180 static_cast<uint32_t>(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_OPEN_P2P_CONNECTION), data,
181 reply, option);
182 EXPECT_EQ(ret, 0);
183 } catch (...) {
184 EXPECT_TRUE(false);
185 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest004 ERROR";
186 }
187 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest004 End";
188 }
189
190 /**
191 * @tc.name: DaemonStubOnRemoteRequestTest005
192 * @tc.desc: Verify the DaemonStubOnRemoteRequest function
193 * @tc.type: FUNC
194 * @tc.require: I7M6L1
195 */
196 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest005, TestSize.Level1)
197 {
198 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest005 Start";
199 try {
200 MessageParcel data;
201 EXPECT_TRUE(data.WriteInterfaceToken(IDaemon::GetDescriptor()));
202 MessageParcel reply;
203 MessageOption option;
204
205 EXPECT_TRUE(data.WriteCString(deviceInfo.deviceId));
206 EXPECT_TRUE(data.WriteCString(deviceInfo.deviceName));
207 EXPECT_TRUE(data.WriteCString(deviceInfo.networkId));
208
209 int ret = daemonStub_->OnRemoteRequest(
210 static_cast<uint32_t>(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_CLOSE_P2P_CONNECTION), data,
211 reply, option);
212 EXPECT_EQ(ret, 0);
213 } catch (...) {
214 EXPECT_TRUE(false);
215 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest005 ERROR";
216 }
217 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest005 End";
218 }
219
220 /**
221 * @tc.name: DaemonStubOnRemoteRequestTest006
222 * @tc.desc: Verify the DaemonStubOnRemoteRequest function
223 * @tc.type: FUNC
224 * @tc.require: I7M6L1
225 */
226 HWTEST_F(DaemonStubTest, DaemonStubOnRemoteRequestTest006, TestSize.Level1)
227 {
228 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest006 Start";
229 try {
230 MessageParcel data;
231 MessageParcel reply;
232 MessageOption option;
233
234 EXPECT_TRUE(data.WriteString(srcUri));
235 EXPECT_TRUE(data.WriteString(dstUri));
236 EXPECT_TRUE(data.WriteString(srcDeviceId));
237 EXPECT_TRUE(data.WriteRemoteObject(listener));
238 int ret = daemonStub_->OnRemoteRequest(
239 static_cast<uint32_t>(DistributedFileDaemonInterfaceCode::DISTRIBUTED_FILE_PREPARE_SESSION), data,
240 reply, option);
241 EXPECT_EQ(ret, 1);
242 } catch (...) {
243 EXPECT_TRUE(false);
244 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest006 ERROR";
245 }
246 GTEST_LOG_(INFO) << "DaemonStubOnRemoteRequestTest006 End";
247 }
248 } // namespace OHOS::Storage::DistributedFile::Test