• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 <charconv>
17 #include <gtest/gtest.h>
18 #include <functional>
19 
20 #include "app_caller_event.h"
21 #include "file_util.h"
22 #include "trace_common.h"
23 #include "trace_db_callback.h"
24 #include "trace_flow_controller.h"
25 #include "trace_state_machine.h"
26 #include "time_util.h"
27 
28 using namespace testing::ext;
29 using namespace OHOS::HiviewDFX;
30 using namespace OHOS::NativeRdb;
31 namespace {
32 const std::string TEST_DB_PATH = "/data/test/trace_storage_test/";
33 const std::vector<std::string> TAG_GROUPS = {"scene_performance"};
34 const std::string DEVELOPER_MODE_TRACE_ARGS = "tags:sched, freq, disk, sync, binder, mmc, membus, load, pagecache, \
35     workq, ipa, hdf, virse, net, dsched, graphic, multimodalinput, dinput, ark, ace, window, zaudio, daudio, zmedia, \
36     dcamera, zcamera, dhfwk, app, gresource, ability, power, samgr, ffrt clockType:boot1 bufferSize:32768 overwrite:0 \
37     fileLimit:20 fileSize:102400";
38 
InnerCreateAppCallerEvent(int32_t uid,uint64_t happendTime)39 std::shared_ptr<AppCallerEvent> InnerCreateAppCallerEvent(int32_t uid, uint64_t happendTime)
40 {
41     std::shared_ptr<AppCallerEvent> appCallerEvent = std::make_shared<AppCallerEvent>("HiViewService");
42     appCallerEvent->messageType_ = Event::MessageType::PLUGIN_MAINTENANCE;
43     appCallerEvent->eventName_ = "DUMP_APP_TRACE";
44     appCallerEvent->isBusinessJank_ = false;
45     appCallerEvent->bundleName_ = "com.example.helloworld";
46     appCallerEvent->bundleVersion_ = "2.0.1";
47     appCallerEvent->uid_ = uid;
48     appCallerEvent->pid_ = 1000;
49     appCallerEvent->happenTime_ = happendTime;
50     appCallerEvent->beginTime_ = 0;
51     appCallerEvent->endTime_ = 0;
52     appCallerEvent->taskBeginTime_ = static_cast<int64_t>(TimeUtil::GetMilliseconds());
53     appCallerEvent->taskEndTime_ = appCallerEvent->taskBeginTime_;
54     appCallerEvent->resultCode_ = 0;
55     appCallerEvent->foreground_ = 1;
56     appCallerEvent->threadName_ = "mainThread";
57     return appCallerEvent;
58 }
59 
60 class TestTelemetryCallback : public TelemetryCallback {
OnTelemetryStart()61     void OnTelemetryStart() override {}
OnTelemetryFinish()62     void OnTelemetryFinish() override {}
OnTelemetryTraceOn()63     void OnTelemetryTraceOn() override {}
OnTelemetryTraceOff()64     void OnTelemetryTraceOff() override {}
65 };
66 };
67 
68 class TraceManagerTest : public testing::Test {
69 public:
SetUp()70     void SetUp() override
71     {
72         if (!FileUtil::FileExists(TEST_DB_PATH)) {
73             FileUtil::ForceCreateDirectory(TEST_DB_PATH);
74         }
75     };
76 
TearDown()77     void TearDown() override
78     {
79         if (FileUtil::FileExists(TEST_DB_PATH)) {
80             FileUtil::ForceRemoveDirectory(TEST_DB_PATH);
81         }
82     };
83 
SetUpTestCase()84     static void SetUpTestCase() {};
TearDownTestCase()85     static void TearDownTestCase() {};
86 };
87 
88 /**
89  * @tc.name: TraceManagerTest001
90  * @tc.desc: used to test TraceFlowControl api: GetRemainingTraceSize
91  * @tc.type: FUNC
92 */
93 HWTEST_F(TraceManagerTest, TraceManagerTest001, TestSize.Level1)
94 {
95     auto flowController1 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
96         FlowController::DEFAULT_CONFIG_PATH);
97 
98     int64_t traceSize1 = 699 * 1024 * 1024; // xpower trace Threshold is 150M
99     int64_t remainingSize = flowController1->GetRemainingTraceSize();
100     ASSERT_GT(remainingSize, 0);
101     ASSERT_GT(remainingSize, traceSize1);
102     flowController1->StoreDb(traceSize1);
103 
104     sleep(1);
105     auto flowController2 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
106         FlowController::DEFAULT_CONFIG_PATH);
107     remainingSize = flowController2->GetRemainingTraceSize();
108     ASSERT_GT(remainingSize, 0);
109 
110     // NeedUpload allow 10% over limits
111     int64_t traceSize2 = 70 * 1024 * 1024;
112     ASSERT_GT(remainingSize, traceSize2);
113     flowController2->StoreDb(traceSize2);
114 
115     sleep(1);
116     auto flowController3 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
117         FlowController::DEFAULT_CONFIG_PATH);
118     remainingSize = flowController3->GetRemainingTraceSize();
119     ASSERT_LE(remainingSize, 0);
120 }
121 
122 /**
123  * @tc.name: TraceManagerTest002
124  * @tc.desc: used to test TraceFlowControl api: GetRemainingTraceSize
125  * @tc.type: FUNC
126 */
127 HWTEST_F(TraceManagerTest, TraceManagerTest002, TestSize.Level1)
128 {
129     auto flowController1 = std::make_shared<TraceFlowController>(CallerName::HIVIEW, TEST_DB_PATH,
130         FlowController::DEFAULT_CONFIG_PATH);
131     int64_t traceSize1 = 149 * 1024 * 1024; // HIVIEW trace Threshold is 150M
132     int64_t remainingSize = flowController1->GetRemainingTraceSize();
133     ASSERT_GT(remainingSize, 0);
134     ASSERT_GT(remainingSize, traceSize1);
135     flowController1->StoreDb(traceSize1);
136     sleep(1);
137 
138     auto flowController2 = std::make_shared<TraceFlowController>(CallerName::HIVIEW, TEST_DB_PATH,
139         FlowController::DEFAULT_CONFIG_PATH);
140     remainingSize = flowController2->GetRemainingTraceSize();
141     ASSERT_GT(remainingSize, 0);
142     int64_t traceSize2 = 100 * 1024 * 1024;
143     ASSERT_LE(remainingSize, traceSize2);
144 }
145 
146 /**
147  * @tc.name: TraceManagerTest003
148  * @tc.desc: used to test TraceFlowControl api: HasCallOnceToday CleanOldAppTrace RecordCaller
149  * @tc.type: FUNC
150 */
151 HWTEST_F(TraceManagerTest, TraceManagerTest003, TestSize.Level1)
152 {
153     auto flowController1 = std::make_shared<TraceFlowController>(ClientName::APP, TEST_DB_PATH,
154         FlowController::DEFAULT_CONFIG_PATH);
155     int32_t appid1 = 100;
156     uint64_t happenTime1 = TimeUtil::GetMilliseconds() - 10000;  // 10 seconds ago
157     auto appEvent1 = InnerCreateAppCallerEvent(appid1, happenTime1);
158     ASSERT_FALSE(flowController1->HasCallOnceToday(appid1, happenTime1));
159     flowController1->RecordCaller(appEvent1);
160     sleep(1);
161 
162     auto flowController21 = std::make_shared<TraceFlowController>(ClientName::APP, TEST_DB_PATH,
163         FlowController::DEFAULT_CONFIG_PATH);
164     uint64_t happenTime2 = TimeUtil::GetMilliseconds() - 5000; // 5 seconds ago
165     auto appEvent21 = InnerCreateAppCallerEvent(appid1, happenTime2);
166     ASSERT_TRUE(flowController21->HasCallOnceToday(appid1, happenTime2));
167     flowController21->RecordCaller(appEvent21);
168     sleep(1);
169 
170     auto flowController22 = std::make_shared<TraceFlowController>(ClientName::APP, TEST_DB_PATH,
171         FlowController::DEFAULT_CONFIG_PATH);
172     int32_t appid2 = 101;
173     ASSERT_FALSE(flowController22->HasCallOnceToday(appid2, happenTime2));
174     auto appEvent22 = InnerCreateAppCallerEvent(appid2, happenTime2);
175     flowController22->RecordCaller(appEvent22);
176 
177     sleep(1);
178     std::string date = TimeUtil::TimestampFormatToDate(TimeUtil::GetSeconds(), "%Y%m%d");
179     int32_t dateNum = 0;
180     auto result = std::from_chars(date.c_str(), date.c_str() + date.size(), dateNum);
181     ASSERT_EQ(result.ec, std::errc());
182     flowController22->CleanOldAppTrace(dateNum + 1);
183 
184     sleep(1);
185     auto flowController23 = std::make_shared<TraceFlowController>(ClientName::APP, TEST_DB_PATH,
186         FlowController::DEFAULT_CONFIG_PATH);
187     ASSERT_FALSE(flowController22->HasCallOnceToday(appid1, TimeUtil::GetMilliseconds()));
188     ASSERT_FALSE(flowController22->HasCallOnceToday(appid2, TimeUtil::GetMilliseconds()));
189 }
190 
191 /**
192  * @tc.name: TraceManagerTest004
193  * @tc.desc: used to test TraceFlowControl api: UseCacheTimeQuota
194  * @tc.type: FUNC
195 */
196 HWTEST_F(TraceManagerTest, TraceManagerTest004, TestSize.Level1)
197 {
198     auto flowController = std::make_shared<TraceFlowController>("behavior", TEST_DB_PATH,
199         FlowController::DEFAULT_CONFIG_PATH);
200     ASSERT_EQ(flowController->UseCacheTimeQuota(10), CacheFlow::SUCCESS);
201     sleep(1);
202     ASSERT_EQ(flowController->UseCacheTimeQuota(10 * 60), CacheFlow::SUCCESS);
203     sleep(1);
204     ASSERT_NE(flowController->UseCacheTimeQuota(10), CacheFlow::SUCCESS);
205 }
206 
207 /**
208  * @tc.name: TraceManagerTest005
209  * @tc.desc: used to test TraceFlowControl api: Telemetry interface
210  * @tc.type: FUNC
211 */
212 HWTEST_F(TraceManagerTest, TraceManagerTest005, TestSize.Level1)
213 {
214     std::map<std::string, int64_t> flowControlQuotas {
215         {CallerName::XPERF, 10000 },
216         {CallerName::XPOWER, 10000},
217         {CallerName::RELIABILITY, 10000},
218         {"Total", 25000}
219     };
220 
221     std::map<std::string, int64_t> flowControlQuota2 {
222         {CallerName::XPERF, 100 },
223         {CallerName::XPOWER, 120},
224         {"Total", 180}
225     };
226 
227     TraceFlowController flowController(BusinessName::TELEMETRY, TEST_DB_PATH, FlowController::DEFAULT_CONFIG_PATH);
228     int64_t runningTime = 0;
229     ASSERT_EQ(flowController.InitTelemetryData("id", runningTime, flowControlQuotas), TelemetryRet::SUCCESS);
230     sleep(1);
231     flowController.TelemetryStore(CallerName::XPERF, 9000);
232     ASSERT_EQ(flowController.NeedTelemetryDump(CallerName::XPERF), TelemetryRet::SUCCESS);
233     sleep(1);
234     flowController.TelemetryStore(CallerName::XPERF, 2000);
235     ASSERT_EQ(flowController.NeedTelemetryDump(CallerName::XPERF), TelemetryRet::OVER_FLOW);
236     sleep(1);
237     flowController.TelemetryStore(CallerName::XPOWER, 7000);
238     ASSERT_EQ(flowController.NeedTelemetryDump(CallerName::XPOWER), TelemetryRet::SUCCESS);
239     sleep(1);
240     flowController.TelemetryStore(CallerName::XPOWER, 6000);
241     ASSERT_EQ(flowController.NeedTelemetryDump(CallerName::XPOWER), TelemetryRet::OVER_FLOW);
242     sleep(1);
243 
244     // Total over flow
245     flowController.TelemetryStore(CallerName::RELIABILITY, 3000);
246     ASSERT_EQ(flowController.NeedTelemetryDump(CallerName::RELIABILITY), TelemetryRet::OVER_FLOW);
247     flowController.ClearTelemetryData();
248 
249     // data is cleared
250     TraceFlowController flowController2(BusinessName::TELEMETRY, TEST_DB_PATH);
251     ASSERT_EQ(flowController2.InitTelemetryData("id", runningTime, flowControlQuotas), TelemetryRet::SUCCESS);
252     flowController2.TelemetryStore(CallerName::XPOWER, 5000);
253     ASSERT_EQ(flowController2.NeedTelemetryDump(CallerName::XPOWER), TelemetryRet::SUCCESS);
254 
255     // do not clear db
256     TraceFlowController flowController3(BusinessName::TELEMETRY, TEST_DB_PATH);
257 
258     // Already init, old data still take effect
259     ASSERT_EQ(flowController2.InitTelemetryData("id", runningTime, flowControlQuota2), TelemetryRet::SUCCESS);
260 
261     // flowControlQuota2 do not take effect
262 
263     flowController2.TelemetryStore(CallerName::XPOWER, 500);
264     ASSERT_EQ(flowController2.NeedTelemetryDump(CallerName::XPOWER), TelemetryRet::SUCCESS);
265     flowController.ClearTelemetryData();
266 
267     // flowControlQuota2 take effect
268     TraceFlowController flowController4(BusinessName::TELEMETRY, TEST_DB_PATH);
269     ASSERT_EQ(flowController4.InitTelemetryData("id", runningTime, flowControlQuota2), TelemetryRet::SUCCESS);
270     flowController4.TelemetryStore(CallerName::XPOWER, 500);
271     ASSERT_EQ(flowController4.NeedTelemetryDump(CallerName::XPOWER), TelemetryRet::OVER_FLOW);
272 }
273 
274 /**
275  * @tc.name: TraceManagerTest005
276  * @tc.desc: used to test TraceFlowControl api: Telemetry interface
277  * @tc.type: FUNC
278 */
279 HWTEST_F(TraceManagerTest, TraceManagerTest006, TestSize.Level1)
280 {
281     std::map<std::string, int64_t> flowControlQuotas {
282         {CallerName::XPERF, 10000 },
283         {CallerName::XPOWER, 12000},
284         {"Total", 18000}
285     };
286     TraceFlowController flowController(BusinessName::TELEMETRY, TEST_DB_PATH, FlowController::DEFAULT_CONFIG_PATH);
287     int64_t runningTime1 = 0;
288     ASSERT_EQ(flowController.InitTelemetryData("id1", runningTime1, flowControlQuotas), TelemetryRet::SUCCESS);
289     ASSERT_EQ(runningTime1, 0);
290 
291     // if data init, correct btime2 etime2 value
292     TraceFlowController flowController2(BusinessName::TELEMETRY, TEST_DB_PATH, FlowController::DEFAULT_CONFIG_PATH);
293     int64_t runningTime2 = 100;
294     ASSERT_EQ(flowController2.InitTelemetryData("id1", runningTime2, flowControlQuotas), TelemetryRet::SUCCESS);
295     ASSERT_EQ(runningTime2, 0);
296     flowController2.UpdateRunningTime(400);
297     flowController2.QueryRunningTime(runningTime2);
298     ASSERT_EQ(runningTime2, 400);
299 }
300 
301 /**
302  * @tc.name: TraceManagerTest007
303  * @tc.desc: used to test TraceStateMachine command state
304  * @tc.type: FUNC
305 */
306 HWTEST_F(TraceManagerTest, TraceManagerTest007, TestSize.Level1)
307 {
308     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
309     ASSERT_TRUE(ret1.IsSuccess());
310 
311     // trans to command state
312     TraceRetInfo info;
313     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
314     ASSERT_TRUE(ret2.IsSuccess());
315     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
316     ASSERT_EQ(ret3.stateError_, TraceStateCode::FAIL);
317     TraceRet ret40 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
318     ASSERT_EQ(ret40.stateError_,  TraceStateCode::FAIL);
319     TraceRet ret4 = TraceStateMachine::GetInstance().TraceCacheOn();
320     ASSERT_EQ(ret4.stateError_, TraceStateCode::FAIL);
321     TraceRet ret5 = TraceStateMachine::GetInstance().TraceCacheOff();
322     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
323     TraceRet ret6 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
324     ASSERT_EQ(ret6.stateError_, TraceStateCode::FAIL);
325     TraceRet ret28 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
326     ASSERT_EQ(ret28.stateError_, TraceStateCode::FAIL);
327     TraceRet ret29 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
328     ASSERT_EQ(ret29.stateError_, TraceStateCode::FAIL);
329     TraceRet ret61 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
330     ASSERT_EQ(ret61.stateError_, TraceStateCode::FAIL);
331     TraceRet ret7 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
332     ASSERT_TRUE(ret7.IsSuccess());
333 
334     // trans to command drop state
335     TraceRet ret8 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
336     ASSERT_EQ(ret8.stateError_, TraceStateCode::FAIL);
337     TraceRet ret9 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
338     ASSERT_EQ(ret9.stateError_, TraceStateCode::FAIL);
339     TraceRet ret10 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
340     ASSERT_EQ(ret10.stateError_, TraceStateCode::FAIL);
341     TraceRet ret41 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
342     ASSERT_EQ(ret41.stateError_,  TraceStateCode::FAIL);
343     TraceRet ret20 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
344     ASSERT_EQ(ret20.stateError_, TraceStateCode::FAIL);
345     TraceRet ret21 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
346     ASSERT_EQ(ret21.stateError_, TraceStateCode::FAIL);
347     TraceRet ret50 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
348     ASSERT_EQ(ret50.stateError_, TraceStateCode::FAIL);
349     TraceRet ret22 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
350     ASSERT_TRUE(ret22.IsSuccess());
351 
352     // trans to close state
353     TraceRet ret31 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
354     ASSERT_TRUE(ret31.IsSuccess());
355     TraceRet ret30 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
356     ASSERT_TRUE(ret30.IsSuccess());
357 
358     // trans to command drop state
359     TraceRet ret25 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
360     ASSERT_EQ(ret25.stateError_, TraceStateCode::DENY);
361     TraceRet ret26 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
362     ASSERT_EQ(ret26.stateError_, TraceStateCode::DENY);
363     TraceRet ret27 = TraceStateMachine::GetInstance().OpenDynamicTrace(100);
364     ASSERT_EQ(ret27.stateError_, TraceStateCode::DENY);
365     TraceRet ret11 = TraceStateMachine::GetInstance().TraceCacheOn();
366     ASSERT_EQ(ret11.stateError_, TraceStateCode::FAIL);
367     TraceRet ret12 = TraceStateMachine::GetInstance().TraceCacheOff();
368     ASSERT_EQ(ret12.stateError_, TraceStateCode::FAIL);
369     TraceRet ret13 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
370     ASSERT_EQ(ret13.stateError_, TraceStateCode::FAIL);
371     TraceRet ret14 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
372     ASSERT_TRUE(ret14.IsSuccess());
373 
374     // trans to command state
375     TraceRet ret24 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
376     ASSERT_EQ(ret24.stateError_, TraceStateCode::DENY);
377     TraceRet ret15 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
378     ASSERT_EQ(ret15.stateError_, TraceStateCode::DENY);
379     TraceRet ret23 = TraceStateMachine::GetInstance().OpenDynamicTrace(100);
380     ASSERT_EQ(ret23.stateError_, TraceStateCode::DENY);
381     TraceRet ret17 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
382     ASSERT_EQ(ret17.stateError_, TraceStateCode::FAIL);
383     TraceRet ret51 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
384     ASSERT_EQ(ret51.stateError_, TraceStateCode::FAIL);
385     TraceRet ret18 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
386     ASSERT_EQ(ret18.stateError_, TraceStateCode::FAIL);
387     TraceRet ret19 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
388     ASSERT_TRUE(ret19.IsSuccess());
389 }
390 
391 /**
392  * @tc.name: TraceManagerTest008
393  * @tc.desc: used to test TraceStateMachine common state
394  * @tc.type: FUNC
395 */
396 HWTEST_F(TraceManagerTest, TraceManagerTest008, TestSize.Level1)
397 {
398     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
399     ASSERT_TRUE(ret1.IsSuccess());
400 
401     // trans to common state
402     TraceRetInfo info;
403     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
404     ASSERT_TRUE(ret2.IsSuccess());
405     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
406     ASSERT_TRUE(ret3.IsSuccess());
407     TraceRet ret4 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
408     ASSERT_EQ(ret4.stateError_, TraceStateCode::FAIL);
409     TraceRet ret41 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
410     ASSERT_EQ(ret41.stateError_,  TraceStateCode::FAIL);
411     TraceRet ret5 = TraceStateMachine::GetInstance().TraceCacheOn();
412     ASSERT_TRUE(ret5.IsSuccess());
413     TraceRet ret6 = TraceStateMachine::GetInstance().TraceCacheOff();
414     ASSERT_TRUE(ret6.IsSuccess());
415     TraceRet ret61 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
416     ASSERT_EQ(ret61.stateError_, TraceStateCode::FAIL);
417     TraceRet ret71 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
418     ASSERT_EQ(ret71.stateError_, TraceStateCode::FAIL);
419     TraceRet ret7 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
420     ASSERT_EQ(ret7.stateError_, TraceStateCode::FAIL);
421     TraceRet ret8 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
422     ASSERT_TRUE(ret8.IsSuccess());
423 
424     // trans to common drop state
425     TraceRet ret9 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
426     ASSERT_EQ(ret9.stateError_, TraceStateCode::FAIL);
427     TraceRet ret10 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
428     ASSERT_EQ(ret10.stateError_, TraceStateCode::FAIL);
429     TraceRet ret11 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
430     ASSERT_EQ(ret11.stateError_, TraceStateCode::FAIL);
431     TraceRet ret42 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
432     ASSERT_EQ(ret42.stateError_,  TraceStateCode::FAIL);
433     TraceRet ret12 = TraceStateMachine::GetInstance().TraceCacheOn();
434     ASSERT_EQ(ret12.stateError_, TraceStateCode::FAIL);
435     TraceRet ret13 = TraceStateMachine::GetInstance().TraceCacheOff();
436     ASSERT_EQ(ret13.stateError_, TraceStateCode::FAIL);
437     TraceRet ret14 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
438     ASSERT_EQ(ret14.stateError_, TraceStateCode::FAIL);
439     TraceRet ret15 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
440     ASSERT_EQ(ret15.stateError_, TraceStateCode::FAIL);
441     TraceRet ret23 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
442     ASSERT_EQ(ret23.stateError_, TraceStateCode::DENY);
443     TraceRet ret24 = TraceStateMachine::GetInstance().OpenDynamicTrace(100);
444     ASSERT_EQ(ret24.stateError_, TraceStateCode::DENY);
445     TraceRet ret25 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
446     ASSERT_TRUE(ret25.IsSuccess());
447 
448     // trans to command state
449     TraceStateMachine::GetInstance().SetTraceSwitchUcOn();
450     TraceRet ret21 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
451     ASSERT_TRUE(ret21.IsSuccess());
452     TraceRet ret22 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
453     ASSERT_TRUE(ret22.IsSuccess());
454 
455     // trans to common state
456     TraceRet ret34 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
457     ASSERT_TRUE(ret34.IsSuccess());
458 
459     // trans to common drop state
460     TraceRet ret26 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
461     ASSERT_EQ(ret26.stateError_, TraceStateCode::FAIL);
462     TraceRet ret51 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
463     ASSERT_EQ(ret51.stateError_, TraceStateCode::FAIL);
464     TraceRet ret27 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
465     ASSERT_EQ(ret27.stateError_, TraceStateCode::FAIL);
466     TraceRet ret28 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
467     ASSERT_EQ(ret28.stateError_, TraceStateCode::FAIL);
468     TraceRet ret16 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
469     ASSERT_EQ(ret16.stateError_, TraceStateCode::FAIL);
470     TraceRet ret17 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
471     ASSERT_TRUE(ret17.IsSuccess());
472 
473     // trans to common state
474     TraceRet ret18 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
475     ASSERT_EQ(ret18.stateError_, TraceStateCode::DENY);
476     TraceRet ret19 = TraceStateMachine::GetInstance().OpenDynamicTrace(100);
477     ASSERT_EQ(ret19.stateError_, TraceStateCode::DENY);
478     TraceRet ret20 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
479     ASSERT_TRUE(ret20.IsSuccess());
480 
481     // trans to command state
482     TraceRet ret32 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
483     ASSERT_TRUE(ret32.IsSuccess());
484     TraceRet ret33 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
485     ASSERT_TRUE(ret33.IsSuccess());
486 
487     // trans to common state again
488     TraceRet ret30 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
489     ASSERT_EQ(ret30.stateError_, TraceStateCode::FAIL);
490     TraceRet ret29 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
491     ASSERT_TRUE(ret29.IsSuccess());
492 
493     // still recover to common state
494     TraceRet ret31 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
495     ASSERT_TRUE(ret31.IsSuccess());
496 
497     // close version beta and trans to close state
498     TraceStateMachine::GetInstance().SetTraceSwitchFreezeOn();
499 
500     // trans to common state
501     TraceRet ret35 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
502     ASSERT_TRUE(ret35.IsSuccess());
503 
504     // still recover to common state
505     TraceRet ret36 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
506     ASSERT_TRUE(ret36.IsSuccess());
507     TraceStateMachine::GetInstance().SetTraceSwitchFreezeOff();
508     TraceStateMachine::GetInstance().SetTraceSwitchUcOff();
509 }
510 
TestFunction()511 void TestFunction()
512 {}
513 
514 /**
515  * @tc.name: TraceManagerTest009
516  * @tc.desc: used to test TraceStateMachine telemetry state
517  * @tc.type: FUNC
518 */
519 HWTEST_F(TraceManagerTest, TraceManagerTest009, TestSize.Level1)
520 {
521     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
522     ASSERT_TRUE(ret1.IsSuccess());
523 
524     // Trans to telemetry state
525     ASSERT_FALSE(TraceStateMachine::GetInstance().RegisterTelemetryCallback(nullptr));
526     TraceRetInfo info;
527     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
528     ASSERT_EQ(ret2.stateError_, TraceStateCode::FAIL);
529     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
530     ASSERT_EQ(ret3.stateError_, TraceStateCode::FAIL);
531     TraceRet ret4 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
532     ASSERT_EQ(ret4.stateError_,  TraceStateCode::FAIL);
533     TraceRet ret11 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
534     ASSERT_TRUE(ret11.IsSuccess());
535     TraceRet ret5 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
536     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
537     TraceRet ret6 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
538     ASSERT_EQ(ret6.stateError_, TraceStateCode::FAIL);
539     TraceRet ret7 = TraceStateMachine::GetInstance().TraceCacheOn();
540     ASSERT_EQ(ret7.stateError_, TraceStateCode::FAIL);
541     TraceRet ret8 = TraceStateMachine::GetInstance().TraceCacheOff();
542     ASSERT_EQ(ret8.stateError_, TraceStateCode::FAIL);
543     TraceRet ret9 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
544     ASSERT_EQ(ret9.stateError_, TraceStateCode::FAIL);
545     TraceRet ret10 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
546     ASSERT_EQ(ret10.stateError_, TraceStateCode::FAIL);
547     TraceRet ret26 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
548     ASSERT_EQ(ret26.stateError_, TraceStateCode::FAIL);
549     TraceRet ret27 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
550     ASSERT_EQ(ret27.stateError_, TraceStateCode::FAIL);
551     TraceRet ret28 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
552     ASSERT_EQ(ret28.stateError_, TraceStateCode::FAIL);
553     TraceRet ret51 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
554     ASSERT_TRUE(ret51.IsSuccess());
555 
556     // Trans to close state
557     ASSERT_FALSE(TraceStateMachine::GetInstance().RegisterTelemetryCallback(nullptr));
558     TraceRet ret15 = TraceStateMachine::GetInstance().OpenDynamicTrace(101);
559     ASSERT_TRUE(ret15.IsSuccess());
560 
561     // APP state to telemetry state success
562     TraceRet ret16 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
563     ASSERT_TRUE(ret16.IsSuccess());
564 
565     // Trans to telemetry state
566     TraceRet ret17 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
567     ASSERT_TRUE(ret17.IsSuccess());
568 
569     // Common state to telemetry deny
570     TraceRet ret18 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
571     ASSERT_EQ(ret18.GetStateError(), TraceStateCode::DENY);
572     TraceRet ret19 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
573     ASSERT_TRUE(ret19.IsSuccess());
574 
575     // Trans to close state
576     TraceRet ret20 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
577     ASSERT_TRUE(ret20.IsSuccess());
578 
579     // Command state to telemetry deny
580     TraceRet ret21 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
581     ASSERT_EQ(ret21.GetStateError(), TraceStateCode::DENY);
582 
583     TraceRet ret22 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
584     ASSERT_TRUE(ret22.IsSuccess());
585 }
586 
587 /**
588  * @tc.name: TraceManagerTest010
589  * @tc.desc: used to test TraceStateMachine app state
590  * @tc.type: FUNC
591 */
592 HWTEST_F(TraceManagerTest, TraceManagerTest010, TestSize.Level1)
593 {
594     TraceRet ret1 = TraceStateMachine::GetInstance().OpenDynamicTrace(100);
595     ASSERT_TRUE(ret1.IsSuccess());
596 
597     // Trans to app state
598     ASSERT_EQ(TraceStateMachine::GetInstance().GetCurrentAppPid(), 100);
599     ASSERT_GT(TraceStateMachine::GetInstance().GetTaskBeginTime(), 0);
600     TraceRetInfo info;
601     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
602     ASSERT_EQ(ret2.stateError_, TraceStateCode::FAIL);
603     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
604     ASSERT_EQ(ret3.stateError_, TraceStateCode::FAIL);
605     TraceRet ret4 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
606     ASSERT_EQ(ret4.GetStateError(), TraceStateCode::SUCCESS);
607     TraceRet ret42 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
608     ASSERT_EQ(ret42.stateError_,  TraceStateCode::FAIL);
609     TraceRet ret5 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
610     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
611     TraceRet ret6 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
612     ASSERT_EQ(ret6.stateError_, TraceStateCode::FAIL);
613     TraceRet ret7 = TraceStateMachine::GetInstance().TraceCacheOn();
614     ASSERT_EQ(ret7.stateError_, TraceStateCode::FAIL);
615     TraceRet ret8 = TraceStateMachine::GetInstance().TraceCacheOff();
616     ASSERT_EQ(ret8.stateError_, TraceStateCode::FAIL);
617     TraceRet ret9 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
618     ASSERT_EQ(ret9.stateError_, TraceStateCode::FAIL);
619     TraceRet ret10 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
620     ASSERT_EQ(ret10.stateError_, TraceStateCode::FAIL);
621     TraceRet ret11 = TraceStateMachine::GetInstance().OpenDynamicTrace(101);
622     ASSERT_EQ(ret11.stateError_, TraceStateCode::DENY);
623     TraceRet ret12 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, TAG_GROUPS);
624     ASSERT_TRUE(ret12.IsSuccess());
625 
626     // Trans to command state
627     TraceRet ret13 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
628     ASSERT_TRUE(ret13.IsSuccess());
629     TraceRet ret14 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
630     ASSERT_TRUE(ret14.IsSuccess());
631 
632     // Trans to close state
633     TraceRet ret15 = TraceStateMachine::GetInstance().OpenDynamicTrace(101);
634     ASSERT_TRUE(ret15.IsSuccess());
635 
636     // Trans to app state again
637     ASSERT_EQ(TraceStateMachine::GetInstance().GetCurrentAppPid(), 101);
638     TraceRet ret16 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, TAG_GROUPS);
639     ASSERT_TRUE(ret16.IsSuccess());
640 
641     // Trans to common state
642     TraceRet ret17 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
643     ASSERT_TRUE(ret17.IsSuccess());
644     TraceRet ret18 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
645     ASSERT_TRUE(ret18.IsSuccess());
646 }
647 
648 /**
649  * @tc.name: TraceManagerTest011
650  * @tc.desc: used to test TraceStateMachine close state
651  * @tc.type: FUNC
652 */
653 HWTEST_F(TraceManagerTest, TraceManagerTest011, TestSize.Level1)
654 {
655     TraceRetInfo info;
656     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMAND, 0, 0, info);
657     ASSERT_EQ(ret2.stateError_, TraceStateCode::FAIL);
658     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_COMMON, 0, 0, info);
659     ASSERT_EQ(ret3.stateError_, TraceStateCode::FAIL);
660     TraceRet ret4 = TraceStateMachine::GetInstance().DumpTrace(TraceScenario::TRACE_DYNAMIC, 0, 0, info);
661     ASSERT_EQ(ret4.stateError_, TraceStateCode::FAIL);
662     TraceRet ret42 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
663     ASSERT_EQ(ret42.stateError_,  TraceStateCode::FAIL);
664     TraceRet ret5 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
665     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
666     TraceRet ret6 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
667     ASSERT_EQ(ret6.stateError_, TraceStateCode::FAIL);
668     TraceRet ret7 = TraceStateMachine::GetInstance().TraceCacheOn();
669     ASSERT_EQ(ret7.stateError_, TraceStateCode::FAIL);
670     TraceRet ret8 = TraceStateMachine::GetInstance().TraceCacheOff();
671     ASSERT_EQ(ret8.stateError_, TraceStateCode::FAIL);
672     TraceRet ret9 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMAND, info);
673     ASSERT_EQ(ret9.stateError_, TraceStateCode::FAIL);
674     TraceRet ret10 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
675     ASSERT_EQ(ret10.stateError_, TraceStateCode::FAIL);
676     ASSERT_TRUE(TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND).IsSuccess());
677     ASSERT_TRUE(TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON).IsSuccess());
678     ASSERT_TRUE(TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC).IsSuccess());
679 }
680 
681 /**
682  * @tc.name: TraceManagerTest011
683  * @tc.desc: used to test TraceStateMachine close state
684  * @tc.type: FUNC
685 */
686 HWTEST_F(TraceManagerTest, TraceManagerTest012, TestSize.Level1)
687 {
688     // TraceStateMachine init close state
689     TraceStateMachine::GetInstance().SetTraceSwitchDevOn();
690     auto ret = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, DEVELOPER_MODE_TRACE_ARGS);
691     ASSERT_TRUE(ret.IsSuccess());
692 
693     // TranToCommandState
694     auto ret1 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, DEVELOPER_MODE_TRACE_ARGS);
695     ASSERT_EQ(ret1.stateError_, TraceStateCode::DENY);
696     auto ret2 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMAND);
697     ASSERT_TRUE(ret2.IsSuccess());
698 
699     // TranToCommandDropState
700     auto ret6 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMAND, DEVELOPER_MODE_TRACE_ARGS);
701     ASSERT_EQ(ret6.stateError_, TraceStateCode::DENY);
702 
703     auto ret3 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, DEVELOPER_MODE_TRACE_ARGS);
704     ASSERT_EQ(ret3.stateError_, TraceStateCode::DENY);
705     auto ret4 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMAND);
706     ASSERT_TRUE(ret4.IsSuccess());
707 
708     // TransToCLoseState
709     TraceStateMachine::GetInstance().SetTraceSwitchDevOff();
710     auto ret5 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, DEVELOPER_MODE_TRACE_ARGS);
711     ASSERT_TRUE(ret5.IsSuccess());
712     auto ret7 = TraceStateMachine::GetInstance().TraceDropOn(TraceScenario::TRACE_COMMON);
713     ASSERT_TRUE(ret7.IsSuccess());
714 
715     // TransToCommonDropStats
716     auto ret8 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, DEVELOPER_MODE_TRACE_ARGS);
717     ASSERT_EQ(ret8.stateError_, TraceStateCode::DENY);
718     TraceRetInfo info;
719     auto ret9 = TraceStateMachine::GetInstance().TraceDropOff(TraceScenario::TRACE_COMMON, info);
720     ASSERT_TRUE(ret9.IsSuccess());
721     auto ret10 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
722     ASSERT_TRUE(ret10.IsSuccess());
723 
724     // TransToDynamicState
725     auto ret11 = TraceStateMachine::GetInstance().OpenDynamicTrace(101);
726     ASSERT_TRUE(ret11.IsSuccess());
727     auto ret12 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_DYNAMIC);
728     ASSERT_TRUE(ret12.IsSuccess());
729     auto ret15 = TraceStateMachine::GetInstance().OpenDynamicTrace(102);
730     ASSERT_TRUE(ret15.IsSuccess());
731     auto ret16 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, DEVELOPER_MODE_TRACE_ARGS);
732     ASSERT_TRUE(ret16.IsSuccess());
733     auto ret17 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
734     ASSERT_TRUE(ret17.IsSuccess());
735 
736     auto ret13 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
737     ASSERT_TRUE(ret13.IsSuccess());
738     auto ret14 = TraceStateMachine::GetInstance().OpenTrace(TraceScenario::TRACE_COMMON, DEVELOPER_MODE_TRACE_ARGS);
739     ASSERT_TRUE(ret14.IsSuccess());
740     auto ret18 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_COMMON);
741     ASSERT_TRUE(ret18.IsSuccess());
742 }
743 
744 /**
745  * @tc.name: TraceManagerTest013
746  * @tc.desc: used to test power trace on/off
747  * @tc.type: FUNC
748 */
749 HWTEST_F(TraceManagerTest, TraceManagerTest013, TestSize.Level1)
750 {
751     TraceRetInfo info;
752     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::POWER);
753     ASSERT_TRUE(ret1.IsSuccess());
754     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
755     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
756     TraceRet ret2 = TraceStateMachine::GetInstance().PowerTelemetryOn();
757     ASSERT_TRUE(ret2.IsSuccess());
758     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
759     ASSERT_TRUE(ret3.IsSuccess());
760     TraceRet ret4 =TraceStateMachine::GetInstance().PowerTelemetryOff();
761     ASSERT_TRUE(ret4.IsSuccess());
762     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
763     ASSERT_TRUE(ret5.IsSuccess());
764 }
765 
766 /**
767  * @tc.name: TraceManagerTest014
768  * @tc.desc: used to test power trace on/off
769  * @tc.type: FUNC
770 */
771 HWTEST_F(TraceManagerTest, TraceManagerTest014, TestSize.Level1)
772 {
773     TraceRetInfo info;
774     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::DEFAULT);
775     ASSERT_TRUE(ret1.IsSuccess());
776     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
777     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
778     TraceRet ret2 = TraceStateMachine::GetInstance().PowerTelemetryOn();
779     ASSERT_EQ(ret2.stateError_, TraceStateCode::POLICY_ERROR);
780     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
781     ASSERT_TRUE(ret5.IsSuccess());
782 }
783 
784 /**
785  * @tc.name: TraceManagerTest015
786  * @tc.desc: used to test power trace on/off
787  * @tc.type: FUNC
788 */
789 HWTEST_F(TraceManagerTest, TraceManagerTest015, TestSize.Level1)
790 {
791     TraceRetInfo info;
792     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::POWER);
793     ASSERT_TRUE(ret1.IsSuccess());
794     TraceRet ret2 = TraceStateMachine::GetInstance().PowerTelemetryOn();
795     ASSERT_EQ(ret2.stateError_, TraceStateCode::POLICY_ERROR);
796     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
797     ASSERT_TRUE(ret5.IsSuccess());
798 }
799 
800 /**
801  * @tc.name: TraceManagerTest016
802  * @tc.desc: used to test power trace on/off
803  * @tc.type: FUNC
804 */
805 HWTEST_F(TraceManagerTest, TraceManagerTest016, TestSize.Level1)
806 {
807     TraceRetInfo info;
808     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::POWER);
809     ASSERT_TRUE(ret1.IsSuccess());
810     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
811     TraceRet ret2 = TraceStateMachine::GetInstance().PowerTelemetryOn();
812     ASSERT_TRUE(ret2.IsSuccess());
813     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
814     ASSERT_TRUE(ret5.IsSuccess());
815 }
816 
817 /**
818  * @tc.name: TraceManagerTest017
819  * @tc.desc: used to test power trace on/off
820  * @tc.type: FUNC
821 */
822 HWTEST_F(TraceManagerTest, TraceManagerTest017, TestSize.Level1)
823 {
824     TraceRetInfo info;
825     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
826     ASSERT_TRUE(ret1.IsSuccess());
827     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
828     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
829     TraceRet ret2 = TraceStateMachine::GetInstance().PowerTelemetryOn();
830     ASSERT_EQ(ret2.stateError_, TraceStateCode::POLICY_ERROR);
831     TraceRet ret3 = TraceStateMachine::GetInstance().PowerTelemetryOff();
832     ASSERT_EQ(ret3.stateError_, TraceStateCode::POLICY_ERROR);
833     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
834     ASSERT_TRUE(ret5.IsSuccess());
835 }
836 
837 /**
838  * @tc.name: TraceManagerTest018
839  * @tc.desc: used to test power trace on/off
840  * @tc.type: FUNC
841 */
842 HWTEST_F(TraceManagerTest, TraceManagerTest018, TestSize.Level1)
843 {
844     TraceRetInfo info;
845     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::POWER);
846     ASSERT_TRUE(ret1.IsSuccess());
847     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
848     TraceStateMachine::GetInstance().InitTelemetryStatus(true);
849     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
850     ASSERT_TRUE(ret3.IsSuccess());
851     TraceRet ret4 =TraceStateMachine::GetInstance().PowerTelemetryOff();
852     ASSERT_TRUE(ret4.IsSuccess());
853     TraceRet ret5 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
854     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
855     auto ret6 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
856     ASSERT_TRUE(ret6.IsSuccess());
857 }
858 
859 /**
860  * @tc.name: TraceManagerTest019
861  * @tc.desc: used to test power trace on/off
862  * @tc.type: FUNC
863 */
864 HWTEST_F(TraceManagerTest, TraceManagerTest019, TestSize.Level1)
865 {
866     TraceRetInfo info;
867     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
868     ASSERT_TRUE(ret1.IsSuccess());
869     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
870     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
871     TraceRet ret2 = TraceStateMachine::GetInstance().TraceTelemetryOn();
872     ASSERT_TRUE(ret2.IsSuccess());
873     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
874     ASSERT_TRUE(ret3.IsSuccess());
875     TraceRet ret4 =TraceStateMachine::GetInstance().TraceTelemetryOff();
876     ASSERT_TRUE(ret4.IsSuccess());
877     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
878     ASSERT_TRUE(ret5.IsSuccess());
879 }
880 
881 /**
882  * @tc.name: TraceManagerTest020
883  * @tc.desc: used to test power trace on/off
884  * @tc.type: FUNC
885 */
886 HWTEST_F(TraceManagerTest, TraceManagerTest020, TestSize.Level1)
887 {
888     TraceRetInfo info;
889     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
890     ASSERT_TRUE(ret1.IsSuccess());
891     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
892     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
893     TraceRet ret2 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
894     ASSERT_EQ(ret2.stateError_, TraceStateCode::FAIL);
895     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
896     ASSERT_TRUE(ret5.IsSuccess());
897 }
898 
899 /**
900  * @tc.name: TraceManagerTest021
901  * @tc.desc: used to test power trace on/off
902  * @tc.type: FUNC
903 */
904 HWTEST_F(TraceManagerTest, TraceManagerTest021, TestSize.Level1)
905 {
906     TraceRetInfo info;
907     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::POWER);
908     ASSERT_TRUE(ret1.IsSuccess());
909     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
910     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
911     TraceRet ret2 = TraceStateMachine::GetInstance().TraceTelemetryOn();
912     ASSERT_EQ(ret2.stateError_, TraceStateCode::POLICY_ERROR);
913     TraceRet ret3 = TraceStateMachine::GetInstance().TraceTelemetryOff();
914     ASSERT_EQ(ret3.stateError_, TraceStateCode::POLICY_ERROR);
915     auto ret5 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
916     ASSERT_TRUE(ret5.IsSuccess());
917 }
918 
919 /**
920  * @tc.name: TraceManagerTest022
921  * @tc.desc: used to test manual trace on/off
922  * @tc.type: FUNC
923 */
924 HWTEST_F(TraceManagerTest, TraceManagerTest022, TestSize.Level1)
925 {
926     TraceRetInfo info;
927     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
928     ASSERT_TRUE(ret1.IsSuccess());
929     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
930     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
931     TraceRet ret2 = TraceStateMachine::GetInstance().TraceTelemetryOn();
932     ASSERT_TRUE(ret2.IsSuccess());
933     TraceRet ret21 = TraceStateMachine::GetInstance().TraceTelemetryOn();
934     ASSERT_TRUE(ret21.IsSuccess());
935     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
936     ASSERT_TRUE(ret3.IsSuccess());
937     TraceRet ret4 = TraceStateMachine::GetInstance().TraceTelemetryOff();
938     ASSERT_EQ(ret4.stateError_, TraceStateCode::NO_TRIGGER);
939     TraceRet ret5 = TraceStateMachine::GetInstance().TraceTelemetryOff();
940     ASSERT_TRUE(ret5.IsSuccess());
941     auto ret6 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
942     ASSERT_TRUE(ret6.IsSuccess());
943 }
944 
945 /**
946  * @tc.name: TraceManagerTest023
947  * @tc.desc: used to test manual trace on/off
948  * @tc.type: FUNC
949 */
950 HWTEST_F(TraceManagerTest, TraceManagerTest023, TestSize.Level1)
951 {
952     TraceRetInfo info;
953     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
954     ASSERT_TRUE(ret1.IsSuccess());
955     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
956     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
957     TraceRet ret2 = TraceStateMachine::GetInstance().PostTelemetryOn(2);
958     ASSERT_TRUE(ret2.IsSuccess());
959     TraceRet ret3 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
960     ASSERT_TRUE(ret3.IsSuccess());
961     sleep(2);
962     TraceRet ret4 = TraceStateMachine::GetInstance().PostTelemetryTimeOut();
963     ASSERT_TRUE(ret4.IsSuccess());
964     TraceRet ret5 = TraceStateMachine::GetInstance().DumpTraceWithFilter(0, 0, info);
965     ASSERT_EQ(ret5.stateError_, TraceStateCode::FAIL);
966     auto ret6 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
967     ASSERT_TRUE(ret6.IsSuccess());
968 }
969 
970 /**
971  * @tc.name: TraceManagerTest024
972  * @tc.desc: used to test manual trace on/off
973  * @tc.type: FUNC
974 */
975 HWTEST_F(TraceManagerTest, TraceManagerTest024, TestSize.Level1)
976 {
977     TraceRetInfo info;
978     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
979     ASSERT_TRUE(ret1.IsSuccess());
980     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
981     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
982     TraceRet ret2 = TraceStateMachine::GetInstance().PostTelemetryOn(5);
983     ASSERT_TRUE(ret2.IsSuccess());
984     sleep(1);
985     TraceRet ret3 = TraceStateMachine::GetInstance().PostTelemetryOn(10);
986     ASSERT_EQ(ret3.stateError_, TraceStateCode::UPDATE_TIME);
987     auto ret4 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
988     ASSERT_TRUE(ret4.IsSuccess());
989 }
990 
991 /**
992  * @tc.name: TraceManagerTest025
993  * @tc.desc: used to test manual trace on/off
994  * @tc.type: FUNC
995 */
996 HWTEST_F(TraceManagerTest, TraceManagerTest025, TestSize.Level1)
997 {
998     TraceRetInfo info;
999     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
1000     ASSERT_TRUE(ret1.IsSuccess());
1001     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
1002     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
1003     TraceRet ret2 = TraceStateMachine::GetInstance().TraceTelemetryOn();
1004     TraceStateMachine::GetInstance().PostTelemetryOn(5);
1005     ASSERT_TRUE(ret2.IsSuccess());
1006     TraceRet ret3 = TraceStateMachine::GetInstance().TraceTelemetryOff();
1007     ASSERT_EQ(ret3.stateError_, TraceStateCode::NO_TRIGGER);
1008     auto ret4 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
1009     ASSERT_TRUE(ret4.IsSuccess());
1010 }
1011 
1012 /**
1013  * @tc.name: TraceManagerTest026
1014  * @tc.desc: used to test manual trace on/off
1015  * @tc.type: FUNC
1016 */
1017 HWTEST_F(TraceManagerTest, TraceManagerTest026, TestSize.Level1)
1018 {
1019     TraceRetInfo info;
1020     TraceRet ret1 = TraceStateMachine::GetInstance().OpenTelemetryTrace("", TelemetryPolicy::MANUAL);
1021     ASSERT_TRUE(ret1.IsSuccess());
1022     TraceStateMachine::GetInstance().RegisterTelemetryCallback(std::make_shared<TestTelemetryCallback>());
1023     TraceStateMachine::GetInstance().InitTelemetryStatus(false);
1024     TraceRet ret2 = TraceStateMachine::GetInstance().TraceTelemetryOn();
1025     TraceStateMachine::GetInstance().PostTelemetryOn(5);
1026     ASSERT_TRUE(ret2.IsSuccess());
1027     TraceRet ret3 = TraceStateMachine::GetInstance().PostTelemetryTimeOut();
1028     ASSERT_EQ(ret3.stateError_, TraceStateCode::NO_TRIGGER);
1029     auto ret4 = TraceStateMachine::GetInstance().CloseTrace(TraceScenario::TRACE_TELEMETRY);
1030     ASSERT_TRUE(ret4.IsSuccess());
1031 }
1032 
1033 /**
1034  * @tc.name: TraceManagerTest027
1035  * @tc.desc: used to test TraceDbStoreCallback
1036  * @tc.type: FUNC
1037 */
1038 HWTEST_F(TraceManagerTest, TraceManagerTest027, TestSize.Level1)
1039 {
1040     FileUtil::ForceRemoveDirectory(TEST_DB_PATH);
1041     FileUtil::ForceCreateDirectory(TEST_DB_PATH);
1042     std::string dbFile = std::string(TEST_DB_PATH) + "trace_flow_control.db";
1043     RdbStoreConfig config(dbFile);
1044     config.SetSecurityLevel(SecurityLevel::S1);
1045     auto ret = E_OK;
1046     TraceDbStoreCallback callback;
1047     auto dbStore = RdbHelper::GetRdbStore(config, 1, callback, ret);
1048     ASSERT_EQ(ret, E_OK);
1049     ret = callback.OnCreate(*dbStore);
1050     ASSERT_EQ(ret, E_OK);
1051     ret = callback.OnUpgrade(*dbStore, 1, 2); // test db upgrade from version 1 to version 2
1052     ASSERT_EQ(ret, E_OK);
1053 }
1054 
1055 /**
1056  * @tc.name: TraceManagerTest028
1057  * @tc.desc: used to test TraceDbStoreCallback
1058  * @tc.type: FUNC
1059 */
1060 HWTEST_F(TraceManagerTest, TraceManagerTest028, TestSize.Level1)
1061 {
1062     auto flowController1 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1063         FlowController::DEFAULT_CONFIG_PATH);
1064     int64_t traceSize1 = 601 * 1024 * 1024; // xpower trace Threshold is 700M
1065     ASSERT_GT(flowController1->GetRemainingTraceSize(), 0);
1066     flowController1->StoreDb(traceSize1);
1067 
1068     auto flowController2 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1069         FlowController::DEFAULT_CONFIG_PATH);
1070     ASSERT_FALSE(flowController2->IsOverLimit());
1071     ASSERT_GT(flowController2->GetRemainingTraceSize(), 0);
1072     flowController2->DecreaseDynamicThreshold(); // dynamic_threashold 650M
1073 
1074     auto flowController3 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1075         FlowController::DEFAULT_CONFIG_PATH);
1076     ASSERT_FALSE(flowController3->IsOverLimit());
1077     ASSERT_GT(flowController2->GetRemainingTraceSize(), 0);
1078     flowController3->DecreaseDynamicThreshold(); // dynamic_threashold 600M
1079 
1080     auto flowController4 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1081     FlowController::DEFAULT_CONFIG_PATH);
1082     ASSERT_TRUE(flowController4->IsOverLimit());
1083 }
1084 
1085 /**
1086  * @tc.name: TraceManagerTest028
1087  * @tc.desc: used to test TraceDbStoreCallback
1088  * @tc.type: FUNC
1089 */
1090 HWTEST_F(TraceManagerTest, TraceManagerTest029, TestSize.Level1)
1091 {
1092     auto flowController1 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1093         FlowController::DEFAULT_CONFIG_PATH);
1094     int64_t traceSize1 = 600 * 1024 * 1024; // xpower trace Threshold is 700M
1095     ASSERT_GT(flowController1->GetRemainingTraceSize(), 0);
1096     flowController1->StoreDb(traceSize1);
1097 
1098     auto flowController2 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1099         FlowController::DEFAULT_CONFIG_PATH);
1100     ASSERT_FALSE(flowController2->IsOverLimit());
1101     ASSERT_EQ(flowController2->GetRemainingTraceSize(), 170 * 1024 * 1024); // remaining size 170M
1102     flowController2->DecreaseDynamicThreshold(); // dynamic_threashold 650M
1103 
1104     auto flowController3 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1105     FlowController::DEFAULT_CONFIG_PATH);
1106     ASSERT_EQ(flowController2->GetRemainingTraceSize(), 170 * 1024 * 1024); // remaining size still 170M
1107 }
1108 
1109 /**
1110  * @tc.name: TraceManagerTest028
1111  * @tc.desc: used to test TraceDbStoreCallback
1112  * @tc.type: FUNC
1113 */
1114 HWTEST_F(TraceManagerTest, TraceManagerTest030, TestSize.Level1)
1115 {
1116     auto flowController1 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1117         FlowController::DEFAULT_CONFIG_PATH);
1118     flowController1->SetTestDate("2025-07-30");
1119     int64_t traceSize1 = 750 * 1024 * 1024; // xpower trace Threshold is 700M
1120     ASSERT_EQ(flowController1->GetRemainingTraceSize(), 770 * 1024 * 1024);
1121     flowController1->StoreDb(traceSize1); // greater than threshold but less than 10% deadline
1122     ASSERT_TRUE(flowController1->IsOverLimit());
1123 
1124     auto flowController2 = std::make_shared<TraceFlowController>(CallerName::XPOWER, TEST_DB_PATH,
1125         FlowController::DEFAULT_CONFIG_PATH);
1126     flowController1->SetTestDate("2025-07-31");
1127     ASSERT_FALSE(flowController1->IsOverLimit());
1128     ASSERT_EQ(flowController1->GetRemainingTraceSize(), 770 * 1024 * 1024);
1129 }
1130