1 /*
2 * Copyright (c) 2024-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 #include "asset_callback_manager.h"
16
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
19
20 #include "asset_obj.h"
21 #include "asset_recv_callback_mock.h"
22 #include "asset_send_callback_mock.h"
23 #include "dfs_error.h"
24
25 namespace OHOS::Storage::DistributedFile::Test {
26 using namespace OHOS::FileManagement;
27 using namespace testing;
28 using namespace testing::ext;
29 using namespace std;
30
31 class AssetCallbackManagerTest : public testing::Test {
32 public:
33 static void SetUpTestCase(void);
34 static void TearDownTestCase(void);
35 void SetUp();
36 void TearDown();
37 };
38
SetUpTestCase(void)39 void AssetCallbackManagerTest::SetUpTestCase(void)
40 {
41 GTEST_LOG_(INFO) << "SetUpTestCase";
42 }
43
TearDownTestCase(void)44 void AssetCallbackManagerTest::TearDownTestCase(void)
45 {
46 GTEST_LOG_(INFO) << "TearDownTestCase";
47 }
48
SetUp(void)49 void AssetCallbackManagerTest::SetUp(void)
50 {
51 GTEST_LOG_(INFO) << "SetUp";
52 }
53
TearDown(void)54 void AssetCallbackManagerTest::TearDown(void)
55 {
56 GTEST_LOG_(INFO) << "TearDown";
57 }
58
59 /**
60 * @tc.name: AssetCallbackManager_AddRecvCallback_0100
61 * @tc.desc: verify AddRecvCallback failed.
62 * @tc.type: FUNC
63 * @tc.require: I7TDJK
64 */
65 HWTEST_F(AssetCallbackManagerTest, AssetCallbackManager_AddRecvCallback_0100, TestSize.Level1)
66 {
67 GTEST_LOG_(INFO) << "AssetCallbackManager_AddRecvCallback_0100 Start";
68 AssetCallbackManager::GetInstance().AddRecvCallback(nullptr);
69 AssetCallbackManager::GetInstance().recvCallbackList_.emplace_back(nullptr);
70 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 1); // 1: vec size
71 auto recvCallback = sptr(new IAssetRecvCallbackMock());
72 AssetCallbackManager::GetInstance().AddRecvCallback(recvCallback);
73 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 2); // 2: vec size
74 AssetCallbackManager::GetInstance().AddRecvCallback(recvCallback);
75 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 2); // 2: vec size
76 auto recvCallback2 = sptr(new IAssetRecvCallbackMock());
77 AssetCallbackManager::GetInstance().AddRecvCallback(recvCallback2);
78 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 3); // 3: vec size
79 AssetCallbackManager::GetInstance().recvCallbackList_.clear();
80 GTEST_LOG_(INFO) << "AssetCallbackManager_AddRecvCallback_0100 End";
81 }
82
83 /**
84 * @tc.name: AssetCallbackManager_RemoveRecvCallback_0100
85 * @tc.desc: verify RemoveRecvCallback.
86 * @tc.type: FUNC
87 * @tc.require: I7TDJK
88 */
89 HWTEST_F(AssetCallbackManagerTest, AssetCallbackManager_RemoveRecvCallback_0100, TestSize.Level1)
90 {
91 GTEST_LOG_(INFO) << "AssetCallbackManager_AddRecvCallback_0100 Start";
92 auto recvCallback = sptr(new IAssetRecvCallbackMock());
93 AssetCallbackManager::GetInstance().AddRecvCallback(recvCallback);
94 AssetCallbackManager::GetInstance().RemoveRecvCallback(nullptr);
95 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 1);
96 AssetCallbackManager::GetInstance().RemoveRecvCallback(recvCallback);
97 EXPECT_EQ(AssetCallbackManager::GetInstance().recvCallbackList_.size(), 0);
98 GTEST_LOG_(INFO) << "AssetCallbackManager_AddRecvCallback_0100 End";
99 }
100
101 /**
102 * @tc.name: AssetCallbackManager_SendCallback_0100
103 * @tc.desc: verify AddSendCallback and RemoveSendCallback.
104 * @tc.type: FUNC
105 * @tc.require: I7TDJK
106 */
107 HWTEST_F(AssetCallbackManagerTest, AssetCallbackManager_SendCallback_0100, TestSize.Level1)
108 {
109 GTEST_LOG_(INFO) << "AssetCallbackManager_SendCallback_0100 Start";
110 auto sendCallback = sptr(new IAssetSendCallbackMock());
111 AssetCallbackManager::GetInstance().AddSendCallback("", sendCallback);
112 EXPECT_EQ(AssetCallbackManager::GetInstance().sendCallbackMap_.size(), 0);
113 AssetCallbackManager::GetInstance().AddSendCallback("test", sendCallback);
114 EXPECT_EQ(AssetCallbackManager::GetInstance().sendCallbackMap_.size(), 1);
115 AssetCallbackManager::GetInstance().AddSendCallback("test", sendCallback);
116 EXPECT_EQ(AssetCallbackManager::GetInstance().sendCallbackMap_.size(), 1);
117
118 AssetCallbackManager::GetInstance().RemoveSendCallback("test2");
119 EXPECT_EQ(AssetCallbackManager::GetInstance().sendCallbackMap_.size(), 1);
120 AssetCallbackManager::GetInstance().RemoveSendCallback("test");
121 EXPECT_EQ(AssetCallbackManager::GetInstance().sendCallbackMap_.size(), 0);
122 GTEST_LOG_(INFO) << "AssetCallbackManager_SendCallback_0100 End";
123 }
124
125 /**
126 * @tc.name: AssetCallbackManager_NotifyAssetRecv_0100
127 * @tc.desc: verify NotifyAssetRecvStart, NotifyAssetRecvProgress and NotifyAssetRecvFinished.
128 * @tc.type: FUNC
129 * @tc.require: I7TDJK
130 */
131 HWTEST_F(AssetCallbackManagerTest, AssetCallbackManager_NotifyAssetRecv_0100, TestSize.Level1)
132 {
133 GTEST_LOG_(INFO) << "AssetCallbackManager_NotifyAssetRecv_0100 Start";
134 auto recvCallback = sptr(new IAssetRecvCallbackMock());
135 // OnStart OnFinished 预期只能调用一次
136 EXPECT_CALL(*recvCallback, OnStart(_, _, _, _)).WillOnce(Return(E_OK));
137 EXPECT_CALL(*recvCallback, OnRecvProgress(_, _, _, _)).Times(3).WillRepeatedly(Return(E_OK));
138 EXPECT_CALL(*recvCallback, OnFinished(_, _, _)).Times(2).WillRepeatedly(Return(E_OK));
139 try {
140 AssetCallbackManager::GetInstance().AddRecvCallback(recvCallback);
141 AssetCallbackManager::GetInstance().recvCallbackList_.emplace_back(nullptr);
142 AssetCallbackManager::GetInstance().NotifyAssetRecvStart("srcNetworkId", "dstNetworkId",
143 "sessionId", "dstBundleName");
144
145 sptr<AssetObj> assetObj1 (new (std::nothrow) AssetObj());
146 ASSERT_TRUE(assetObj1 != nullptr) << "assetObj1 assert failed!";
147 AssetCallbackManager::GetInstance().NotifyAssetRecvProgress("srcNetworkId", assetObj1, 1024, 256);
148
149 sptr<AssetObj> assetObj2 (new (std::nothrow) AssetObj());
150 ASSERT_TRUE(assetObj2 != nullptr) << "assetObj2 assert failed!";
151 AssetCallbackManager::GetInstance().NotifyAssetRecvProgress("srcNetworkId", nullptr, 1024, 512);
152 AssetCallbackManager::GetInstance().NotifyAssetRecvProgress("srcNetworkId", assetObj2, 1024, 512);
153
154 sptr<AssetObj> assetObj3 (new (std::nothrow) AssetObj());
155 ASSERT_TRUE(assetObj3 != nullptr) << "assetObj3 assert failed!";
156 AssetCallbackManager::GetInstance().NotifyAssetRecvFinished("srcNetworkId", nullptr, 0);
157 AssetCallbackManager::GetInstance().NotifyAssetRecvFinished("srcNetworkId", assetObj3, 0);
158 AssetCallbackManager::GetInstance().recvCallbackList_.clear();
159 EXPECT_TRUE(true);
160 } catch(...) {
161 EXPECT_TRUE(false);
162 }
163 GTEST_LOG_(INFO) << "AssetCallbackManager_NotifyAssetRecv_0100 End";
164 }
165
166 /**
167 * @tc.name: AssetCallbackManager_NotifyAssetSendResult_0100
168 * @tc.desc: verify NotifyAssetSendResult.
169 * @tc.type: FUNC
170 * @tc.require: I7TDJK
171 */
172 HWTEST_F(AssetCallbackManagerTest, AssetCallbackManager_NotifyAssetSendResult_0100, TestSize.Level1)
173 {
174 GTEST_LOG_(INFO) << "AssetCallbackManager_NotifyAssetSendResult_0100 Start";
175 auto sendCallback = sptr(new IAssetSendCallbackMock());
176 // 预期只能调用一次
177 EXPECT_CALL(*sendCallback, OnSendResult(_, _)).WillOnce(Return(E_OK));
178 try {
179 AssetCallbackManager::GetInstance().AddSendCallback("test", sendCallback);
180 AssetCallbackManager::GetInstance().AddSendCallback("test2", nullptr);
181
182 sptr<AssetObj> assetObj (new (std::nothrow) AssetObj());
183 ASSERT_TRUE(assetObj != nullptr) << "assetObj assert failed!";
184 AssetCallbackManager::GetInstance().NotifyAssetSendResult("test3", assetObj, 0);
185 AssetCallbackManager::GetInstance().NotifyAssetSendResult("test", assetObj, 0);
186 AssetCallbackManager::GetInstance().NotifyAssetSendResult("test2", assetObj, 0);
187 AssetCallbackManager::GetInstance().sendCallbackMap_.clear();
188 EXPECT_TRUE(true);
189 } catch(...) {
190 EXPECT_TRUE(false);
191 }
192 GTEST_LOG_(INFO) << "AssetCallbackManager_NotifyAssetSendResult_0100 End";
193 }
194 }