• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2021 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 */
15import faultlogger from '@ohos.faultLogger'
16import hiSysEvent from '@ohos.hiSysEvent'
17import faultloggerTestNapi from "libfaultlogger_test_napi_xts.so"
18import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
19export default function FaultlogJsTest() {
20
21describe("FaultlogJsTest", function () {
22    beforeAll(function() {
23        console.info('FaultlogJsTest beforeAll called')
24    })
25
26    afterAll(function() {
27        console.info('FaultlogJsTest afterAll called')
28    })
29
30    beforeEach(function() {
31        console.info('FaultlogJsTest beforeEach called')
32    })
33
34    afterEach(function() {
35        console.info('FaultlogJsTest afterEach called')
36    })
37
38    async function msleep(time) {
39        let timeoutID = null;
40        let promise = new Promise((resolve, reject) => {
41            timeoutID = setTimeout(() => resolve("done!"), time)
42        });
43        let result = await promise;
44        clearTimeout(timeoutID);
45    }
46
47    function BeginSubscriptionOnEvent(domainName, eventName, onEventCallback) {
48        let watchRules = [{
49            domain: domainName,
50            name: eventName,
51            ruleType: hiSysEvent.RuleType.WHOLE_WORD,
52        }]
53        let watcher = {
54            rules: watchRules,
55            onEvent: (info) => {
56                onEventCallback(info)
57            },
58            onServiceDied: () => {
59                // do something here.
60            }
61        }
62        try {
63            hiSysEvent.addWatcher(watcher)
64        } catch (err) {
65            console.error(`>>> error code: ${err.code}, error msg: ${err.message}`);
66            expect(false).assertTrue();
67        }
68        return watcher
69    }
70
71    function EndSubscriptionOnEvent(watcher) {
72        try {
73            hiSysEvent.removeWatcher(watcher)
74        } catch (err) {
75            console.error(`>>> error code: ${err.code}, error msg: ${err.message}`);
76            expect(false).assertTrue();
77        }
78    }
79
80    /**
81     * @tc.number test_0200
82     * @tc.name DFX_DFR_Faultlogger_Interface_0200
83     * @tc.desc 检验函数参数输入错误时程序是否会崩溃
84     * @tc.size MediumTest
85     * @tc.type Function
86     * @tc.level Level2
87     */
88    it('DFX_DFR_Faultlogger_Interface_0200', 0, async function (done) {
89        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0200----------------------------------");
90        try {
91            let ret1 = faultlogger.querySelfFaultLog("faultloggertestsummary01");
92            console.info("DFX_DFR_Faultlogger_Interface_0200 ret1 == " + ret1);
93            expect(ret1).assertEqual(undefined);
94
95            let ret2 = faultlogger.querySelfFaultLog(faultlogger.FaultType.JS_CRASH, "faultloggertestsummary01");
96            console.info("DFX_DFR_Faultlogger_Interface_0200 ret2 == " + ret2);
97            expect(ret2).assertEqual(undefined);
98
99            let ret3 = faultlogger.querySelfFaultLog();
100            console.info("DFX_DFR_Faultlogger_Interface_0200 ret3 == " + ret3);
101            expect(ret3).assertEqual(undefined);
102            done();
103            return;
104        } catch(err) {
105            console.info(err);
106        }
107        expect(false).assertTrue();
108        done();
109    })
110
111    /**
112     * @tc.number test_0400
113     * @tc.name DFX_DFR_Faultlogger_Interface_0400
114     * @tc.desc 检验promise同步方式获取faultlog CPP_CRASH日志
115     * @tc.size MediumTest
116     * @tc.type Function
117     * @tc.level Level2
118     */
119    it('DFX_DFR_Faultlogger_Interface_0400', 0, async function (done) {
120        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0400----------------------------------");
121        try {
122            let now = Date.now();
123            console.info("DFX_DFR_Faultlogger_Interface_0400 2 + " + now);
124            let subscribedEventCnt = 0;
125            let watcher = BeginSubscriptionOnEvent("RELIABILITY", "CPP_CRASH", (info) => {
126                subscribedEventCnt++
127            })
128            console.info("start triggerCppCrash");
129            const res = faultloggerTestNapi.triggerCppCrash();
130            console.info("DFX_DFR_Faultlogger_Interface_0400 res:" + res);
131            while (subscribedEventCnt < 1) {
132                await msleep(100);
133            }
134            EndSubscriptionOnEvent(watcher)
135            console.info("--------DFX_DFR_Faultlogger_Interface_0400 4" + "----------");
136            let ret = await faultlogger.querySelfFaultLog(faultlogger.FaultType.CPP_CRASH);
137            console.info("DFX_DFR_Faultlogger_Interface_0400 query ret length:" + ret.length);
138            expect(ret.length).assertLarger(0);
139            console.info("DFX_DFR_Faultlogger_Interface_0400 check reason, index:" + (ret[0].reason.indexOf("Signal:SIGABRT")));
140            expect(ret[0].reason.indexOf("Signal:SIGABRT") != -1).assertTrue();
141            console.info("DFX_DFR_Faultlogger_Interface_0400 fullLog length:" + ret[0].fullLog.length);
142            console.info("DFX_DFR_Faultlogger_Interface_0400 check fullLog, index:" + ret[0].fullLog.indexOf("Fault thread info"));
143            expect(ret[0].fullLog.indexOf("Fault thread info") != -1).assertTrue();
144            expect(typeof(ret[0].pid) == "number").assertTrue();
145            expect(typeof(ret[0].uid) == "number").assertTrue();
146            expect(typeof(ret[0].type) == "number").assertTrue();
147            expect(typeof(ret[0].timestamp) == "number").assertTrue();
148            expect(typeof(ret[0].reason) == "string").assertTrue();
149            expect(typeof(ret[0].module) == "string").assertTrue();
150            expect(typeof(ret[0].summary) == "string").assertTrue();
151            expect(typeof(ret[0].fullLog) == "string").assertTrue();
152            console.info("--------DFX_DFR_Faultlogger_Interface_0400 5" + "----------");
153            done();
154            return;
155        } catch (err) {
156            console.info("catch (err) == " + err);
157        }
158        console.info("DFX_DFR_Faultlogger_Interface_0400 error");
159        expect(false).assertTrue();
160        done();
161    })
162
163     /**
164     * @tc.number test_0500
165     * @tc.name DFX_DFR_Faultlogger_Interface_0500
166     * @tc.desc 检验promise同步方式获取faultlog JS_CRASH日志
167     * @tc.size MediumTest
168     * @tc.type Function
169     * @tc.level Level2
170     */
171     it('DFX_DFR_Faultlogger_Interface_0500', 0, async function (done) {
172        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0500----------------------------------");
173        try {
174            const loopTimes = 10;
175            let subscribedEventCnt = 0;
176            let watcher = BeginSubscriptionOnEvent("ACE", "JS_ERROR", (info) => {
177                subscribedEventCnt++
178            })
179            let now = Date.now();
180            console.info("DFX_DFR_Faultlogger_Interface_0500 2 + " + now);
181            hiSysEvent.write({
182                domain: "ACE",
183                name: "JS_ERROR",
184                eventType: hiSysEvent.EventType.FAULT,
185                params: {
186                    PID: 487,
187                    UID:103,
188                    PACKAGE_NAME: "com.ohos.faultlogger.test",
189                    PROCESS_NAME: "com.ohos.faultlogger.test",
190                    MSG: "faultlogger testcase test.",
191                    REASON: "faultlogger testcase test."
192                }
193            }).then(
194                (value) => {
195                    console.log(`HiSysEvent json-callback-success value=${value}`);
196                })
197            while (subscribedEventCnt < 1) {
198                await msleep(100);
199            }
200            EndSubscriptionOnEvent(watcher)
201            console.info("--------DFX_DFR_Faultlogger_Interface_0500 4" + "----------");
202            let ret = await faultlogger.querySelfFaultLog(faultlogger.FaultType.JS_CRASH);
203            console.info("DFX_DFR_Faultlogger_Interface_0500 ret == " + ret.length);
204            if (ret.length > 0) {
205                expect(true).assertTrue();
206            } else {
207                expect(false).assertTrue();
208            }
209            for (let i = 0; i < ret.length; i++) {
210                console.info("faultloggertestsummary03 " + i + " fullLog.length " + ret[i].fullLog.length);
211            }
212            done();
213            return;
214        } catch (err) {
215            console.info("catch (err) == " + err);
216        }
217        console.info("DFX_DFR_Faultlogger_Interface_0500 error");
218        expect(false).assertTrue();
219        done();
220    })
221
222     /**
223     * @tc.number test_0300
224     * @tc.name DFX_DFR_Faultlogger_Interface_0300
225     * @tc.desc 检验promise同步方式获取faultlog APP_FREEZE日志
226     * @tc.size MediumTest
227     * @tc.type Function
228     * @tc.level Level2
229     */
230     it('DFX_DFR_Faultlogger_Interface_0300', 0, async function (done) {
231        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0300----------------------------------");
232        try {
233            let now = Date.now();
234            console.info("DFX_DFR_Faultlogger_Interface_0300 2 + " + now);
235            let module = "ohos.faultloggerjs.test";
236            const loopTimes = 10;
237            let subscribedEventCnt = 0;
238            let watcher = BeginSubscriptionOnEvent("RELIABILITY", "APP_FREEZE", (info) => {
239                subscribedEventCnt++
240            })
241            for (let i = 0; i < loopTimes; i++) {
242                console.info("--------DFX_DFR_Faultlogger_Interface_0300 3 + " + i + "----------");
243                faultlogger.addFaultLog(i - 400,
244                    faultlogger.FaultType.APP_FREEZE, module, "faultloggertestsummary04 " + i);
245                await msleep(300);
246            }
247            while (subscribedEventCnt < loopTimes) {
248                await msleep(100);
249            }
250            EndSubscriptionOnEvent(watcher)
251
252            console.info("--------DFX_DFR_Faultlogger_Interface_0300 4" + "----------");
253            let ret = await faultlogger.querySelfFaultLog(faultlogger.FaultType.APP_FREEZE);
254            console.info("DFX_DFR_Faultlogger_Interface_0300 ret == " + ret.length);
255            expect(ret.length).assertEqual(loopTimes);
256            for (let i = 0; i < loopTimes; i++) {
257                console.info("faultloggertestsummary04 " + i + " fullLog.length " + ret[i].fullLog.length);
258                if (ret[i].fullLog.indexOf("faultloggertestsummary04 " + (loopTimes - 1 - i)) != -1) {
259                    console.info("DFX_DFR_Faultlogger_Interface_0300 " + ret[i].fullLog.length);
260                    expect(true).assertTrue();
261                } else {
262                    expect(false).assertTrue();
263                }
264            }
265            done();
266            return;
267        } catch (err) {
268            console.info("catch (err) == " + err);
269        }
270        console.info("DFX_DFR_Faultlogger_Interface_0300 error");
271        expect(false).assertTrue();
272        done();
273    })
274
275     /**
276     * @tc.number test_0100
277     * @tc.name DFX_DFR_Faultlogger_Interface_0100
278     * @tc.desc 检验通过回调方式获取faultlog日志
279     * @tc.size MediumTest
280     * @tc.type Function
281     * @tc.level Level2
282     */
283    it('DFX_DFR_Faultlogger_Interface_0100', 0, async function (done) {
284        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0100----------------------------------");
285        try {
286            let now = Date.now();
287            console.info("DFX_DFR_Faultlogger_Interface_0100 start + " + now);
288            let subscribedEventCnt = 0;
289            let watcher = BeginSubscriptionOnEvent("RELIABILITY", "CPP_CRASH", (info) => {
290                subscribedEventCnt++
291            })
292            console.info("start triggerCppCrash");
293            const res = faultloggerTestNapi.triggerCppCrash();
294            console.info("DFX_DFR_Faultlogger_Interface_0100 res:" + res);
295            while (subscribedEventCnt < 1) {
296                await msleep(100);
297            }
298            EndSubscriptionOnEvent(watcher)
299            console.info("--------DFX_DFR_Faultlogger_Interface_0100 4----------");
300            function queryFaultLogCallback(error, ret) {
301                if (error) {
302                    console.info('DFX_DFR_Faultlogger_Interface_0100  once error is ' + error);
303                } else {
304                    console.info("DFX_DFR_Faultlogger_Interface_0100 query ret length:" + ret.length);
305                    expect(ret.length).assertLarger(0);
306                    console.info("DFX_DFR_Faultlogger_Interface_0100 check reason, index:" + (ret[0].reason.indexOf("Signal:SIGABRT")));
307                    expect(ret[0].reason.indexOf("Signal:SIGABRT") != -1).assertTrue();
308                    console.info("DFX_DFR_Faultlogger_Interface_0100 check fullLog, index:" + ret[0].fullLog.indexOf("Fault thread info"));
309                    expect(ret[0].fullLog.indexOf("Fault thread info") != -1).assertTrue();
310                }
311                done();
312            }
313            faultlogger.querySelfFaultLog(faultlogger.FaultType.CPP_CRASH, queryFaultLogCallback);
314            return;
315        } catch (err) {
316            console.info(err);
317        }
318        console.info("DFX_DFR_Faultlogger_Interface_0100 error");
319        expect(false).assertTrue();
320        done();
321    })
322
323     /**
324     * @tc.number test_0600
325     * @tc.name DFX_DFR_Faultlogger_Interface_0600
326     * @tc.desc 检验query函数正常入参
327     * @tc.size MediumTest
328     * @tc.type Function
329     * @tc.level Level2
330     */
331    it('DFX_DFR_Faultlogger_Interface_0600', 0, function () {
332        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0600----------------------------------");
333        try {
334            let ret = faultlogger.query("faultloggertestsummary06");
335            console.info("DFX_DFR_Faultlogger_Interface_0600 ret == " + ret);
336            expect(ret).assertTrue();
337            return;
338        } catch(err) {
339            console.info(err.code);
340            console.info(err.message);
341            expect(err.code == 401).assertTrue();
342        }
343    })
344
345     /**
346     * @tc.number test_0700
347     * @tc.name DFX_DFR_Faultlogger_Interface_0700
348     * @tc.desc 检验query函数入参数量为2时程序是否会崩溃
349     * @tc.size MediumTest
350     * @tc.type Function
351     * @tc.level Level2
352     */
353    it('DFX_DFR_Faultlogger_Interface_0700', 0, function () {
354        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0700----------------------------------");
355        try {
356            let ret = faultlogger.query(faultlogger.FaultType.JS_CRASH, "faultloggertestsummary07");
357            console.info("DFX_DFR_Faultlogger_Interface_0700 ret == " + ret);
358            return;
359        } catch(err) {
360            console.info(err.code);
361            console.info(err.message);
362            expect(err.code == 401).assertTrue();
363        }
364    })
365
366     /**
367     * @tc.number test_0800
368     * @tc.name DFX_DFR_Faultlogger_Interface_0800
369     * @tc.desc 检验query函数入参为空时程序是否会崩溃
370     * @tc.size MediumTest
371     * @tc.type Function
372     * @tc.level Level2
373     */
374    it('DFX_DFR_Faultlogger_Interface_0800', 0, function () {
375        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0800----------------------------------");
376        try {
377            let ret = faultlogger.query();
378            console.info("DFX_DFR_Faultlogger_Interface_0800 ret == " + ret);
379            return;
380        } catch(err) {
381            console.info(err.code);
382            console.info(err.message);
383            expect(err.code == 401).assertTrue();
384        }
385    })
386
387     /**
388     * @tc.number test_0900
389     * @tc.name DFX_DFR_Faultlogger_Interface_0900
390     * @tc.desc 检验promise同步方式获取faultlog JS_CRASH日志
391     * @tc.size MediumTest
392     * @tc.type Function
393     * @tc.level Level2
394     */
395     it('DFX_DFR_Faultlogger_Interface_0900', 0, async function (done) {
396        console.info("---------------------------DFX_DFR_Faultlogger_Interface_0900----------------------------------");
397        try {
398            let subscribedEventCnt = 0;
399            let watcher = BeginSubscriptionOnEvent("ACE", "JS_ERROR", (info) => {
400                subscribedEventCnt++
401            })
402            let now = Date.now();
403            console.info("DFX_DFR_Faultlogger_Interface_0900 2 + " + now);
404            hiSysEvent.write({
405                domain: "ACE",
406                name: "JS_ERROR",
407                eventType: hiSysEvent.EventType.FAULT,
408                params: {
409                    PID: 487,
410                    UID:103,
411                    PACKAGE_NAME: "com.ohos.faultlogger.test",
412                    PROCESS_NAME: "com.ohos.faultlogger.test",
413                    MSG: "faultlogger testcase test.",
414                    REASON: "faultlogger testcase test."
415                }
416            }).then(
417                (value) => {
418                    console.log(`HiSysEvent json-callback-success value=${value}`);
419                })
420            while (subscribedEventCnt < 1) {
421                await msleep(100);
422            }
423            EndSubscriptionOnEvent(watcher)
424            console.info("--------DFX_DFR_Faultlogger_Interface_0900 4" + "----------");
425            let ret = await faultlogger.query(faultlogger.FaultType.JS_CRASH);
426            console.info("DFX_DFR_Faultlogger_Interface_0900 ret == " + ret.length);
427            if (ret.length > 0) {
428                expect(true).assertTrue();
429            } else {
430                expect(false).assertTrue();
431            }
432            for (let i = 0; i < ret.length; i++) {
433                console.info("faultloggertestsummary08 " + i + " fullLog.length " + ret[i].fullLog.length);
434            }
435            done();
436            return;
437        } catch (err) {
438            console.info("catch (err) == " + err);
439        }
440        console.info("DFX_DFR_Faultlogger_Interface_0900 error");
441        expect(false).assertTrue();
442        done();
443    })
444
445     /**
446     * @tc.number test_1000
447     * @tc.name DFX_DFR_Faultlogger_Interface_1000
448     * @tc.desc 检验promise同步方式获取faultlog APP_FREEZE日志
449     * @tc.size MediumTest
450     * @tc.type Function
451     * @tc.level Level2
452     */
453     it('DFX_DFR_Faultlogger_Interface_1000', 0, async function (done) {
454        console.info("---------------------------DFX_DFR_Faultlogger_Interface_1000----------------------------------");
455        try {
456            let now = Date.now();
457            console.info("DFX_DFR_Faultlogger_Interface_1000 2 + " + now);
458            let module = "ohos.faultloggerjs.test";
459            const loopTimes = 10;
460            let subscribedEventCnt = 0;
461            let watcher = BeginSubscriptionOnEvent("RELIABILITY", "APP_FREEZE", (info) => {
462                subscribedEventCnt++
463            })
464            for (let i = 0; i < loopTimes; i++) {
465                console.info("--------DFX_DFR_Faultlogger_Interface_1000 3 + " + i + "----------");
466                faultlogger.addFaultLog(i - 200,
467                    faultlogger.FaultType.APP_FREEZE, module, "faultloggertestsummary09 " + i);
468                await msleep(300);
469            }
470            while (subscribedEventCnt < loopTimes) {
471                await msleep(100);
472            }
473            EndSubscriptionOnEvent(watcher)
474            console.info("--------DFX_DFR_Faultlogger_Interface_1000 4" + "----------");
475            let ret = await faultlogger.query(faultlogger.FaultType.APP_FREEZE);
476            console.info("DFX_DFR_Faultlogger_Interface_1000 ret == " + ret.length);
477            expect(ret.length).assertEqual(loopTimes);
478            for (let i = 0; i < loopTimes; i++) {
479                console.info("faultloggertestsummary09 " + i + " fullLog.length " + ret[i].fullLog.length);
480                if (ret[i].fullLog.indexOf("faultloggertestsummary09 " + (loopTimes - 1 - i)) != -1) {
481                    console.info("DFX_DFR_Faultlogger_Interface_1000 " + ret[i].fullLog.length);
482                    expect(true).assertTrue();
483                } else {
484                    expect(false).assertTrue();
485                }
486            }
487            console.info("--------DFX_DFR_Faultlogger_Interface_1000 5" + "----------");
488            ret = await faultlogger.querySelfFaultLog(faultlogger.FaultType.NO_SPECIFIC);
489            console.info("DFX_DFR_Faultlogger_Interface_1000 ret == " + ret.length);
490            expect(ret.length).assertEqual(loopTimes);
491            done();
492            return;
493        } catch (err) {
494            console.info("catch (err) == " + err);
495        }
496        console.info("DFX_DFR_Faultlogger_Interface_1000 error");
497        expect(false).assertTrue();
498        done();
499    })
500
501     /**
502     * @tc.number test_1100
503     * @tc.name DFX_DFR_Faultlogger_Interface_1100
504     * @tc.desc 检验通过回调方式获取faultlog日志
505     * @tc.size MediumTest
506     * @tc.type Function
507     * @tc.level Level2
508     */
509    it('DFX_DFR_Faultlogger_Interface_1100', 0, async function (done) {
510        console.info("---------------------------DFX_DFR_Faultlogger_Interface_1100----------------------------------");
511        try {
512            let now = Date.now();
513            console.info("DFX_DFR_Faultlogger_Interface_1100 start + " + now);
514            let subscribedEventCnt = 0;
515            let watcher = BeginSubscriptionOnEvent("RELIABILITY", "CPP_CRASH", (info) => {
516                subscribedEventCnt++
517            })
518            console.info("start triggerCppCrash");
519            const res = faultloggerTestNapi.triggerCppCrash();
520            console.info("DFX_DFR_Faultlogger_Interface_1100 res:" + res);
521            while (subscribedEventCnt < 1 ) {
522                await msleep(100);
523            }
524            EndSubscriptionOnEvent(watcher)
525            console.info("--------DFX_DFR_Faultlogger_Interface_1100 4----------");
526            function queryFaultLogCallback(error, ret) {
527                if (error) {
528                    console.info('DFX_DFR_Faultlogger_Interface_1100  once error is ' + error);
529                } else {
530                    console.info("DFX_DFR_Faultlogger_Interface_1100 query ret length:" + ret.length);
531                    expect(ret.length).assertLarger(0);
532                    console.info("DFX_DFR_Faultlogger_Interface_1100 check reason, index:" + (ret[0].reason.indexOf("Signal:SIGABRT")));
533                    expect(ret[0].reason.indexOf("Signal:SIGABRT") != -1).assertTrue();
534                    console.info("DFX_DFR_Faultlogger_Interface_1100 check fullLog, index:" + ret[0].fullLog.indexOf("Fault thread info"));
535                    expect(ret[0].fullLog.indexOf("Fault thread info") != -1).assertTrue();
536                }
537                done();
538            }
539            faultlogger.query(faultlogger.FaultType.CPP_CRASH, queryFaultLogCallback);
540            return;
541        } catch (err) {
542            console.info(err);
543        }
544        console.info("DFX_DFR_Faultlogger_Interface_1100 error");
545        expect(false).assertTrue();
546        done();
547    })
548})
549}
550