1 /*
2 * Copyright (c) 2024 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/asset_send_callback_stub.h>
16
17 #include <gmock/gmock.h>
18 #include <gtest/gtest.h>
19
20 #include "asset/asset_callback_interface_code.h"
21 #include "dfs_error.h"
22 #include "asset/i_asset_recv_callback.h"
23
24 namespace OHOS::Storage::DistributedFile::Test {
25 using namespace OHOS::FileManagement;
26 using namespace testing;
27 using namespace testing::ext;
28 using namespace std;
29
30 class MockAssetSendCallbackStub final : public AssetSendCallbackStub {
31 public:
32 MOCK_METHOD2(OnSendResult, int32_t(const sptr<AssetObj> &assetObj, int32_t result));
33 };
34
35 class AssetSendCallbackStubTest : public testing::Test {
36 public:
37 static void SetUpTestCase(void);
38 static void TearDownTestCase(void);
39 void SetUp();
40 void TearDown();
41 public:
42 static inline shared_ptr<MockAssetSendCallbackStub> mockStub_ = nullptr;
43 };
44
SetUpTestCase(void)45 void AssetSendCallbackStubTest::SetUpTestCase(void)
46 {
47 GTEST_LOG_(INFO) << "SetUpTestCase";
48 mockStub_ = make_shared<MockAssetSendCallbackStub>();
49 }
50
TearDownTestCase(void)51 void AssetSendCallbackStubTest::TearDownTestCase(void)
52 {
53 GTEST_LOG_(INFO) << "TearDownTestCase";
54 mockStub_ = nullptr;
55 }
56
SetUp(void)57 void AssetSendCallbackStubTest::SetUp(void)
58 {
59 GTEST_LOG_(INFO) << "SetUp";
60 }
61
TearDown(void)62 void AssetSendCallbackStubTest::TearDown(void)
63 {
64 GTEST_LOG_(INFO) << "TearDown";
65 }
66
67 /**
68 * @tc.name: AssetSendCallbackStub_OnRemoteRequest_0100
69 * @tc.desc: The execution of the OnRemoteRequest failed.
70 * @tc.type: FUNC
71 * @tc.require: I7TDJK
72 */
73 HWTEST_F(AssetSendCallbackStubTest, AssetSendCallbackStub_OnRemoteRequest_0100, TestSize.Level1)
74 {
75 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0100 Start";
76 uint32_t code = static_cast<uint32_t>(AssetCallbackInterfaceCode::ASSET_CALLBACK_ON_SEND_RESULT);
77 MessageParcel data;
78 MessageParcel reply;
79 MessageOption option;
80 data.WriteInterfaceToken(IAssetRecvCallback::GetDescriptor());
81 auto ret = mockStub_->OnRemoteRequest(code, data, reply, option);
82 EXPECT_EQ(ret, AssetSendCallbackStub::ASSET_SEND_CALLBACK_DESCRIPTOR_IS_EMPTY);
83 }
84
85 /**
86 * @tc.name: AssetSendCallbackStub_OnRemoteRequest_0200
87 * @tc.desc: The execution of the OnRemoteRequest failed.
88 * @tc.type: FUNC
89 * @tc.require: I7TDJK
90 */
91 HWTEST_F(AssetSendCallbackStubTest, AssetSendCallbackStub_OnRemoteRequest_0200, TestSize.Level1)
92 {
93 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0200 Start";
94 MessageParcel data;
95 MessageParcel reply;
96 MessageOption option;
97 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
98 uint32_t errCode = 65535;
99 auto ret = mockStub_->OnRemoteRequest(errCode, data, reply, option);
100 EXPECT_EQ(ret, 305);
101
102 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
103 mockStub_->opToInterfaceMap_.insert(make_pair(errCode, nullptr));
104 ret = mockStub_->OnRemoteRequest(errCode, data, reply, option);
105 EXPECT_EQ(ret, 305);
106 mockStub_->opToInterfaceMap_.erase(errCode);
107 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0200 End";
108 }
109 /**
110 * @tc.name: AssetSendCallbackStub_OnRemoteRequest_0300
111 * @tc.desc: The execution of the OnRemoteRequest success.
112 * @tc.type: FUNC
113 * @tc.require: I7TDJK
114 */
115 HWTEST_F(AssetSendCallbackStubTest, AssetSendCallbackStub_OnRemoteRequest_0300, TestSize.Level1)
116 {
117 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0300 Start";
118 uint32_t code = static_cast<uint32_t>(AssetCallbackInterfaceCode::ASSET_CALLBACK_ON_SEND_RESULT);
119 MessageParcel data;
120 MessageParcel reply;
121 MessageOption option;
122 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
123 auto ret = mockStub_->OnRemoteRequest(code, data, reply, option);
124 EXPECT_EQ(ret, E_INVAL_ARG);
125
126 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
127 sptr<AssetObj> assetObj(new (std::nothrow) AssetObj());
128 data.WriteParcelable(assetObj);
129 ret = mockStub_->OnRemoteRequest(code, data, reply, option);
130 EXPECT_EQ(ret, E_INVAL_ARG);
131
132 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
133 data.WriteParcelable(assetObj);
134 data.WriteInt32(0);
135 EXPECT_CALL(*mockStub_, OnSendResult(_, _)).WillOnce(Return(E_PERMISSION_DENIED));
136 ret = mockStub_->OnRemoteRequest(code, data, reply, option);
137 EXPECT_EQ(ret, E_BROKEN_IPC);
138 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0300 End";
139 }
140
141 /**
142 * @tc.name: AssetSendCallbackStub_OnRemoteRequest_0400
143 * @tc.desc: verify OnRemoteRequest.
144 * @tc.type: FUNC
145 * @tc.require: I7TDJK
146 */
147 HWTEST_F(AssetSendCallbackStubTest, AssetSendCallbackStub_OnRemoteRequest_0400, TestSize.Level1)
148 {
149 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0400 Start";
150 MessageParcel data;
151 MessageParcel reply;
152 data.WriteInterfaceToken(IAssetSendCallback::GetDescriptor());
153 sptr<AssetObj> assetObj(new (std::nothrow) AssetObj());
154 data.WriteParcelable(assetObj);
155 data.WriteInt32(0);
156 EXPECT_CALL(*mockStub_, OnSendResult(_, _)).WillOnce(Return(E_OK));
157 auto ret = mockStub_->HandleOnSendResult(data, reply);
158 EXPECT_EQ(ret, E_OK);
159 GTEST_LOG_(INFO) << "AssetSendCallbackStub_OnRemoteRequest_0400 End";
160 }
161 }