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 }