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();