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
16 #include <fcntl.h>
17 #include <gtest/gtest.h>
18 #include "securec.h"
19 #include <sys/stat.h>
20 #include <sys/types.h>
21
22 #include "client_trans_proxy_file_manager.c"
23 #include "client_trans_proxy_file_manager_mock.h"
24 #include "client_trans_proxy_manager.c"
25 #include "softbus_access_token_test.h"
26 #include "softbus_def.h"
27 #include "softbus_errcode.h"
28
29 using namespace testing;
30 using namespace testing::ext;
31
32 #define TEST_SESSION_ID 1026
33 #define TEST_HEADER_LENGTH 24
34 #define TEST_DATA_LENGTH 100
35 #define TEST_PACKET_SIZE 1024
36 #define TEST_FILE_LENGTH 12
37 #define TEST_FILE_DATA_SIZE 958
38 #define TEST_FILE_TEST_TXT_FILE 16
39
40 namespace OHOS {
41
42 const char *g_testProxyFileList[] = {
43 "/data/test.txt",
44 "/data/ss.txt",
45 };
46
47 class ClientTransProxyFileManagerMockTest : public testing::Test {
48 public:
ClientTransProxyFileManagerMockTest()49 ClientTransProxyFileManagerMockTest() {}
~ClientTransProxyFileManagerMockTest()50 ~ClientTransProxyFileManagerMockTest() {}
51 static void SetUpTestCase(void);
52 static void TearDownTestCase(void);
SetUp()53 void SetUp() override {}
TearDown()54 void TearDown() override {}
55 };
56
SetUpTestCase(void)57 void ClientTransProxyFileManagerMockTest::SetUpTestCase(void)
58 {
59 int32_t ret = ClinetTransProxyFileManagerInit();
60 EXPECT_EQ(SOFTBUS_OK, ret);
61 ClientTransProxyListInit();
62 }
63
TearDownTestCase(void)64 void ClientTransProxyFileManagerMockTest::TearDownTestCase(void)
65 {
66 ClinetTransProxyFileManagerDeinit();
67 ClientTransProxyListDeinit();
68 }
69
70 /**
71 * @tc.name: AddSendListenerInfoTest001
72 * @tc.desc: client add send listener info, use normal parameter.
73 * @tc.type: FUNC
74 * @tc.require:
75 */
76 HWTEST_F(ClientTransProxyFileManagerMockTest, AddSendListenerInfoTest001, TestSize.Level0)
77 {
78 // will free in DelSendListenerInfo
79 SendListenerInfo *info = (SendListenerInfo *)SoftBusCalloc(sizeof(SendListenerInfo));
80 EXPECT_TRUE(info != nullptr);
81 info->sessionId = TEST_SESSION_ID;
82
83 int32_t ret = AddSendListenerInfo(nullptr);
84 EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
85
86 ret = AddSendListenerInfo(info);
87 EXPECT_EQ(SOFTBUS_OK, ret);
88
89 ret = AddSendListenerInfo(info);
90 EXPECT_EQ(SOFTBUS_ALREADY_EXISTED, ret);
91
92 DelSendListenerInfo(info);
93 }
94
95 /**
96 * @tc.name: PackFileTransStartInfoTest001
97 * @tc.desc: client trans proxy pack file data frame test, use normal parameter.
98 * @tc.type: FUNC
99 * @tc.require:
100 */
101 HWTEST_F(ClientTransProxyFileManagerMockTest, PackFileTransStartInfoTest001, TestSize.Level0)
102 {
103 uint8_t data[TEST_DATA_LENGTH] = {0};
104 FileFrame fileFrame = {
105 .frameLength = 0,
106 .data = data,
107 .fileData = data,
108 };
109 SendListenerInfo info = {
110 .crc = APP_INFO_FILE_FEATURES_SUPPORT,
111 .osType = OH_TYPE,
112 .packetSize = 1,
113 };
114
115 int32_t ret = PackFileTransStartInfo(nullptr, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, &info);
116 EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
117
118 ret = PackFileTransStartInfo(&fileFrame, nullptr, TEST_FILE_TEST_TXT_FILE, &info);
119 EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
120
121 ret = PackFileTransStartInfo(&fileFrame, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, nullptr);
122 EXPECT_EQ(SOFTBUS_INVALID_PARAM, ret);
123
124 ret = PackFileTransStartInfo(&fileFrame, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, &info);
125 EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
126
127 info.packetSize = PROXY_BLE_MAX_PACKET_SIZE;
128 NiceMock<ClientTransProxyFileManagerInterfaceMock> ClientProxyFileManagerMock;
129 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusHtoLl).WillRepeatedly(Return(FILE_MAGIC_NUMBER));
130 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusHtoLll).WillRepeatedly(
131 Return(FILE_MAGIC_NUMBER + FRAME_MAGIC_OFFSET));
132 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusHtoLl).WillRepeatedly(Return(TEST_FILE_DATA_SIZE));
133 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusHtoLll).WillRepeatedly(Return(TEST_FILE_TEST_TXT_FILE));
134
135 ret = PackFileTransStartInfo(&fileFrame, g_testProxyFileList[0], TEST_FILE_TEST_TXT_FILE, &info);
136 EXPECT_EQ(SOFTBUS_OK, ret);
137 }
138
139 /**
140 * @tc.name: UnpackFileTransStartInfoTest001
141 * @tc.desc: client trans proxy pack file data frame test, use normal parameter.
142 * @tc.type: FUNC
143 * @tc.require:
144 */
145 HWTEST_F(ClientTransProxyFileManagerMockTest, UnpackFileTransStartInfoTest001, TestSize.Level0)
146 {
147 uint32_t packetSize = TEST_PACKET_SIZE;
148
149 uint8_t data[TEST_DATA_LENGTH] = {0};
150 FileFrame fileFrame = {
151 .frameLength = TEST_HEADER_LENGTH,
152 .data = data,
153 .fileData = data,
154 };
155 FileRecipientInfo info;
156 info.crc = APP_INFO_FILE_FEATURES_SUPPORT;
157 info.osType = OH_TYPE;
158 SingleFileInfo singleFileInfo;
159
160 NiceMock<ClientTransProxyFileManagerInterfaceMock> ClientProxyFileManagerMock;
161 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusLtoHl).WillOnce(Return(FILE_MAGIC_NUMBER))
162 .WillRepeatedly(Return(TEST_FILE_LENGTH));
163 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusLtoHll).WillOnce(Return(TEST_FILE_LENGTH))
164 .WillRepeatedly(Return(MAX_FILE_SIZE));
165
166 int32_t ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
167 EXPECT_EQ(SOFTBUS_OK, ret);
168
169 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusLtoHl).WillOnce(Return(FILE_MAGIC_NUMBER))
170 .WillRepeatedly(Return(TEST_FILE_LENGTH));
171 EXPECT_CALL(ClientProxyFileManagerMock, SoftBusLtoHll).WillOnce(Return(TEST_FILE_LENGTH))
172 .WillRepeatedly(Return(MAX_FILE_SIZE + 1));
173
174 ret = UnpackFileTransStartInfo(&fileFrame, &info, &singleFileInfo, packetSize);
175 EXPECT_EQ(SOFTBUS_TRANS_INVALID_DATA_LENGTH, ret);
176 }
177 } // namespace OHOS