1 /*
2 * Copyright (c) 2022-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 <benchmark/benchmark.h>
17 #include "accesstoken_kit.h"
18 #include "nativetoken_kit.h"
19 #include "softbus_bus_center.h"
20 #include "token_setproc.h"
21
22 namespace OHOS {
23 static int g_subscribeId = 0;
24 static int g_publishId = 0;
25 static const char *g_pkgName = "Softbus_Kits";
26 static bool g_flag = true;
AddPermission()27 void AddPermission()
28 {
29 if (g_flag) {
30 uint64_t tokenId;
31 const char *perms[2];
32 perms[0] = OHOS_PERMISSION_DISTRIBUTED_DATASYNC;
33 perms[1] = OHOS_PERMISSION_DISTRIBUTED_SOFTBUS_CENTER;
34 NativeTokenInfoParams infoInstance = {
35 .dcapsNum = 0,
36 .permsNum = 2,
37 .aclsNum = 0,
38 .dcaps = NULL,
39 .perms = perms,
40 .acls = NULL,
41 .processName = "Softbus_Kits",
42 .aplStr = "normal",
43 };
44 tokenId = GetAccessTokenId(&infoInstance);
45 SetSelfTokenID(tokenId);
46 OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
47 g_flag = false;
48 }
49 }
50
51 class DiscoveryTest : public benchmark::Fixture {
52 public:
DiscoveryTest()53 DiscoveryTest()
54 {
55 Iterations(iterations);
56 Repetitions(repetitions);
57 ReportAggregatesOnly();
58 }
59 ~DiscoveryTest() override = default;
60 static void SetUpTestCase(void);
61 static void TearDownTestCase(void);
SetUp(const::benchmark::State & state)62 void SetUp(const ::benchmark::State &state) override
63 {
64 AddPermission();
65 }
TearDown(const::benchmark::State & state)66 void TearDown(const ::benchmark::State &state) override
67 {}
68
69 protected:
70 const int32_t repetitions = 3;
71 const int32_t iterations = 1000;
72 };
73
SetUpTestCase(void)74 void DiscoveryTest::SetUpTestCase(void)
75 {}
76
TearDownTestCase(void)77 void DiscoveryTest::TearDownTestCase(void)
78 {}
79
GetSubscribeId(void)80 static int GetSubscribeId(void)
81 {
82 g_subscribeId++;
83 return g_subscribeId;
84 }
85
GetPublishId(void)86 static int GetPublishId(void)
87 {
88 g_publishId++;
89 return g_publishId;
90 }
91
92 static SubscribeInfo g_sInfo = {
93 .subscribeId = 1,
94 .mode = DISCOVER_MODE_ACTIVE,
95 .medium = COAP,
96 .freq = MID,
97 .isSameAccount = true,
98 .isWakeRemote = false,
99 .capability = "dvKit",
100 .capabilityData = (unsigned char *)"capdata3",
101 .dataLen = strlen("capdata3")
102 };
103
104 static PublishInfo g_pInfo = {
105 .publishId = 1,
106 .mode = DISCOVER_MODE_ACTIVE,
107 .medium = COAP,
108 .freq = MID,
109 .capability = "dvKit",
110 .capabilityData = (unsigned char *)"capdata4",
111 .dataLen = strlen("capdata4")
112 };
113
TestDeviceFound(const DeviceInfo * device)114 static void TestDeviceFound(const DeviceInfo *device)
115 {}
116
TestDiscoverResult(int32_t refreshId,RefreshResult reason)117 static void TestDiscoverResult(int32_t refreshId, RefreshResult reason)
118 {}
119
TestPublishResult(int publishId,PublishResult reason)120 static void TestPublishResult(int publishId, PublishResult reason)
121 {}
122
123 static IRefreshCallback g_refreshCb = {
124 .OnDeviceFound = TestDeviceFound,
125 .OnDiscoverResult = TestDiscoverResult
126 };
127
128 static IPublishCb g_publishCb = {
129 .OnPublishResult = TestPublishResult
130 };
131
132 /**
133 * @tc.name: PublishLNNTestCase
134 * @tc.desc: PublishService Performance Testing
135 * @tc.type: FUNC
136 * @tc.require: PublishService normal operation
137 */
BENCHMARK_F(DiscoveryTest,PublishLNNTestCase)138 BENCHMARK_F(DiscoveryTest, PublishLNNTestCase)(benchmark::State &state)
139 {
140 while (state.KeepRunning()) {
141 g_pInfo.publishId = GetPublishId();
142 state.ResumeTiming();
143 int ret = PublishLNN(g_pkgName, &g_pInfo, &g_publishCb);
144 if (ret != 0) {
145 state.SkipWithError("PublishLNNTestCase failed.");
146 }
147 state.PauseTiming();
148 ret = StopPublishLNN(g_pkgName, g_pInfo.publishId);
149 if (ret != 0) {
150 state.SkipWithError("StopPublishLNNTestCase failed.");
151 }
152 }
153 }
154 BENCHMARK_REGISTER_F(DiscoveryTest, PublishLNNTestCase);
155
156 /**
157 * @tc.name: StopPublishLNNTestCase
158 * @tc.desc: UnPublishService Performance Testing
159 * @tc.type: FUNC
160 * @tc.require: UnPublishService normal operation
161 */
BENCHMARK_F(DiscoveryTest,StopPublishLNNTestCase)162 BENCHMARK_F(DiscoveryTest, StopPublishLNNTestCase)(benchmark::State &state)
163 {
164 while (state.KeepRunning()) {
165 g_pInfo.publishId = GetPublishId();
166 state.PauseTiming();
167 int ret = PublishLNN(g_pkgName, &g_pInfo, &g_publishCb);
168 if (ret != 0) {
169 state.SkipWithError("PublishLNNTestCase failed.");
170 }
171 state.ResumeTiming();
172 ret = StopPublishLNN(g_pkgName, g_pInfo.publishId);
173 if (ret != 0) {
174 state.SkipWithError("StopPublishLNNTestCase failed.");
175 }
176 }
177 }
178 BENCHMARK_REGISTER_F(DiscoveryTest, StopPublishLNNTestCase);
179
180 /**
181 * @tc.name: RefreshLNNTestCase
182 * @tc.desc: StartDiscovery Performance Testing
183 * @tc.type: FUNC
184 * @tc.require: StartDiscovery normal operation
185 */
BENCHMARK_F(DiscoveryTest,RefreshLNNTestCase)186 BENCHMARK_F(DiscoveryTest, RefreshLNNTestCase)(benchmark::State &state)
187 {
188 while (state.KeepRunning()) {
189 g_sInfo.subscribeId = GetSubscribeId();
190 state.ResumeTiming();
191 int ret = RefreshLNN(g_pkgName, &g_sInfo, &g_refreshCb);
192 if (ret != 0) {
193 state.SkipWithError("RefreshLNNTestCase failed.");
194 }
195 state.PauseTiming();
196 ret = StopRefreshLNN(g_pkgName, g_sInfo.subscribeId);
197 if (ret != 0) {
198 state.SkipWithError("StoptRefreshLNNTestCase failed.");
199 }
200 }
201 }
202 BENCHMARK_REGISTER_F(DiscoveryTest, RefreshLNNTestCase);
203
204 /**
205 * @tc.name: StoptRefreshLNNTestCase
206 * @tc.desc: StoptDiscovery Performance Testing
207 * @tc.type: FUNC
208 * @tc.require: StoptDiscovery normal operation
209 */
BENCHMARK_F(DiscoveryTest,StoptRefreshLNNTestCase)210 BENCHMARK_F(DiscoveryTest, StoptRefreshLNNTestCase)(benchmark::State &state)
211 {
212 while (state.KeepRunning()) {
213 g_sInfo.subscribeId = GetSubscribeId();
214 state.PauseTiming();
215 int ret = RefreshLNN(g_pkgName, &g_sInfo, &g_refreshCb);
216 if (ret != 0) {
217 state.SkipWithError("RefreshLNNTestCase failed.");
218 }
219 state.ResumeTiming();
220 ret = StopRefreshLNN(g_pkgName, g_sInfo.subscribeId);
221 if (ret != 0) {
222 state.SkipWithError("StoptRefreshLNNTestCase failed.");
223 }
224 }
225 }
226 BENCHMARK_REGISTER_F(DiscoveryTest, StoptRefreshLNNTestCase);
227 }
228
229 // Run the benchmark
230 BENCHMARK_MAIN();