• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2021-2022 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 {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
18import faultloggerTestNapi from "libfaultlogger_test_napi.so"
19
20describe("FaultlogJsTest", function () {
21    beforeAll(function() {
22        /*
23         * @tc.setup: setup invoked before all testcases
24         */
25         console.info('FaultlogJsTest beforeAll called')
26    })
27
28    afterAll(function() {
29        /*
30         * @tc.teardown: teardown invoked after all testcases
31         */
32         console.info('FaultlogJsTest afterAll called')
33    })
34
35    beforeEach(function() {
36        /*
37         * @tc.setup: setup invoked before each testcases
38         */
39         console.info('FaultlogJsTest beforeEach called')
40    })
41
42    afterEach(function() {
43        /*
44         * @tc.teardown: teardown invoked after each testcases
45         */
46         console.info('FaultlogJsTest afterEach called')
47    })
48
49    async function msleep(time) {
50        let promise = new Promise((resolve, reject) => {
51            setTimeout(() => resolve("done!"), time)
52        });
53        let result = await promise;
54    }
55
56    /**
57     * test
58     *
59     * @tc.number: FaultlogJsException_001
60     * @tc.name: FaultlogJsException_001
61     * @tc.desc: API8 检验函数参数输入错误时程序是否会崩溃
62     * @tc.require: AR000GICT2
63     * @tc.author:
64     * @tc.type: Function
65     * @tc.size: MediumTest
66     * @tc.level: Level 0
67     */
68    it('FaultlogJsException_001', 0, async function (done) {
69        console.info("---------------------------FaultlogJsException_001----------------------------------");
70        try {
71            let ret1 = faultlogger.querySelfFaultLog("faultloggertestsummary01");
72            console.info("FaultlogJsException_001 ret1 == " + ret1);
73            let a = expect(ret1).assertEqual(undefined);
74            console.info('ret1 assertEqual(undefined) ' + a);
75
76            let ret2 = faultlogger.querySelfFaultLog(faultlogger.FaultType.JS_CRASH, "faultloggertestsummary01");
77            console.info("FaultlogJsException_001 ret2 == " + ret2);
78            expect(ret2).assertEqual(undefined);
79
80            let ret3 = faultlogger.querySelfFaultLog();
81            console.info("FaultlogJsException_001 ret3 == " + ret3);
82            expect(ret3).assertEqual(undefined);
83            done();
84            return;
85        } catch(err) {
86            console.info(err);
87        }
88        expect(false).assertTrue();
89        done();
90    })
91
92    /**
93     * test
94     *
95     * @tc.number: FaultlogJsException_002
96     * @tc.name: FaultlogJsException_002
97     * @tc.desc: API9 检验函数参数输入错误时程序是否会崩溃并校验错误码
98     * @tc.require: issueI5VRCC
99     * @tc.author:
100     * @tc.type: Function
101     * @tc.size: MediumTest
102     * @tc.level: Level 0
103     */
104     it('FaultlogJsException_002', 0, function () {
105        console.info("---------------------------FaultlogJsException_002----------------------------------");
106        try {
107            let ret = faultlogger.query("faultloggertestsummary02");
108            console.info("FaultlogJsException_002 ret == " + ret);
109            return;
110        } catch(err) {
111            console.info(err.code);
112            console.info(err.message);
113            expect(err.code == 401).assertTrue();
114        }
115    })
116
117    /**
118     * test
119     *
120     * @tc.number: FaultlogJsException_003
121     * @tc.name: FaultlogJsException_003
122     * @tc.desc: API9 检验函数参数输入错误时程序是否会崩溃并校验错误码
123     * @tc.require: issueI5VRCC
124     * @tc.author:
125     * @tc.type: Function
126     * @tc.size: MediumTest
127     * @tc.level: Level 0
128     */
129     it('FaultlogJsException_003', 0, function () {
130        console.info("---------------------------FaultlogJsException_003----------------------------------");
131        try {
132            let ret = faultlogger.query(faultlogger.FaultType.JS_CRASH, "faultloggertestsummary03");
133            console.info("FaultlogJsException_003 ret == " + ret);
134            return;
135        } catch(err) {
136            console.info(err.code);
137            console.info(err.message);
138            expect(err.code == 401).assertTrue();
139        }
140    })
141
142    /**
143     * test
144     *
145     * @tc.number: FaultlogJsException_004
146     * @tc.name: FaultlogJsException_004
147     * @tc.desc: API9 检验函数参数输入错误时程序是否会崩溃并校验错误码
148     * @tc.require: issueI5VRCC
149     * @tc.author:
150     * @tc.type: Function
151     * @tc.size: MediumTest
152     * @tc.level: Level 0
153     */
154     it('FaultlogJsException_004', 0, function () {
155        console.info("---------------------------FaultlogJsException_004----------------------------------");
156        try {
157            let ret = faultlogger.query();
158            console.info("FaultlogJsException_004 ret == " + ret);
159            return;
160        } catch(err) {
161            console.info(err.code);
162            console.info(err.message);
163            expect(err.code == 401).assertTrue();
164        }
165    })
166
167    /**
168     * test
169     *
170     * @tc.number: FaultlogJsException_005
171     * @tc.name: FaultlogJsException_005
172     * @tc.desc: API9 检验函数参数输入错误时程序是否会崩溃并校验错误码
173     * @tc.require: issueI5VRCC
174     * @tc.author:
175     * @tc.type: Function
176     * @tc.size: MediumTest
177     * @tc.level: Level 0
178     */
179    it('FaultlogJsException_005', 0, function () {
180        console.info("---------------------------FaultlogJsException_005----------------------------------");
181        try {
182            let ret = faultlogger.query("aaa", "bbb", "ccc");
183            console.info("FaultlogJsException_005 ret == " + ret);
184            return;
185        } catch(err) {
186            console.info(err.code);
187            console.info(err.message);
188            expect(err.code == 401).assertTrue();
189        }
190    })
191
192    /**
193     * test
194     *
195     * @tc.number: FaultlogJsTest_005
196     * @tc.name: FaultlogJsTest_005
197     * @tc.desc: API9 检验promise同步方式获取faultlog日志
198     * @tc.require: issueI5VRCC
199     * @tc.author:
200     * @tc.type: Function
201     * @tc.size: MediumTest
202     * @tc.level: Level 0
203     */
204     it('FaultlogJsTest_005', 0, async function (done) {
205        console.info("---------------------------FaultlogJsTest_005----------------------------------");
206        try {
207            const res = faultloggerTestNapi.triggerCppCrash();
208            console.info("FaultlogJsTest_005 res:" + res);
209            let now = Date.now();
210            console.info("FaultlogJsTest_005 now:" + now);
211            await msleep(3000); // 3000: sleep 3000ms
212
213            console.info("--------FaultlogJsTest_005 start query ----------");
214            let ret = await faultlogger.query(faultlogger.FaultType.CPP_CRASH);
215            console.info("FaultlogJsTest_005 query ret length:" + ret.length);
216            expect(ret.length).assertLarger(0);
217            console.info("FaultlogJsTest_005 check reason, index:" + (ret[0].reason.indexOf("Signal:SIGABRT")));
218            expect(ret[0].reason.indexOf("Signal:SIGABRT") != -1).assertTrue();
219            console.info("FaultlogJsTest_005 check fullLog, index:" + ret[0].fullLog.indexOf("Fault thread Info"));
220            expect(ret[0].fullLog.indexOf("Fault thread Info") != -1).assertTrue();
221            done();
222            return;
223        } catch (err) {
224            console.info("catch (err) == " + err);
225        }
226        console.info("FaultlogJsTest_005 error");
227        expect(false).assertTrue();
228        done();
229    })
230
231    /**
232     * test
233     *
234     * @tc.number: FaultlogJsTest_006
235     * @tc.name: FaultlogJsTest_006
236     * @tc.desc: API9 检验通过回调方式获取faultlog日志
237     * @tc.require: issueI5VRCC
238     * @tc.author:
239     * @tc.type: Function
240     * @tc.size: MediumTest
241     * @tc.level: Level 0
242     */
243    it('FaultlogJsTest_006', 0, async function (done) {
244        console.info("---------------------------FaultlogJsTest_006----------------------------------");
245        try {
246            let now = Date.now();
247            console.info("FaultlogJsTest_006 start + " + now);
248            let module = "com.ohos.hiviewtest.faultlogjs";
249            const loopTimes = 10;
250            for (let i = 0; i < loopTimes; i++) {
251                console.info("--------FaultlogJsTest_006 + " + i + "----------");
252                faultlogger.addFaultLog(i - 100,
253                    faultlogger.FaultType.APP_FREEZE, module, "faultloggertestsummary06 " + i);
254                await msleep(300);
255            }
256            await msleep(1000);
257
258            console.info("--------FaultlogJsTest_006 4----------");
259            function queryFaultLogCallback(error, ret) {
260                if (error) {
261                    console.info('FaultlogJsTest_006  once error is ' + error);
262                } else {
263                    console.info("FaultlogJsTest_006 ret == " + ret.length);
264                    expect(ret.length).assertEqual(loopTimes);
265                    for (let i = 0; i < loopTimes; i++) {
266                        console.info("faultloggertestsummary06 " + i + " fullLog.length " + ret[i].fullLog.length);
267                        console.info(ret[i].fullLog);
268                        if (ret[i].fullLog.indexOf("faultloggertestsummary06 " + (loopTimes - 1 - i)) != -1) {
269                            console.info("FaultlogJsTest_006 " + ret[i].fullLog.length);
270                            expect(true).assertTrue();
271                        } else {
272                            expect(false).assertTrue();
273                        }
274                    }
275                }
276                done();
277            }
278            faultlogger.query(faultlogger.FaultType.APP_FREEZE, queryFaultLogCallback);
279            return;
280        } catch (err) {
281            console.info(err);
282        }
283        console.info("FaultlogJsTest_006 error");
284        expect(false).assertTrue();
285        done();
286    })
287
288    /**
289     * test
290     *
291     * @tc.number: FaultlogJsTest_007
292     * @tc.name: FaultlogJsTest_007
293     * @tc.desc: API9 检验通过回调方式获取faultlog日志的顺序
294     * @tc.require: issueI5VRCC
295     * @tc.author:
296     * @tc.type: Function
297     * @tc.size: MediumTest
298     * @tc.level: Level 0
299     */
300    it('FaultlogJsTest_007', 0, async function (done) {
301        console.info("---------------------------FaultlogJsTest_007----------------------------------");
302        try {
303            let now = Date.now();
304            console.info("FaultlogJsTest_007 start + " + now);
305            let module = "com.ohos.hiviewtest.faultlogjs";
306            faultlogger.addFaultLog(0,
307                faultlogger.FaultType.APP_FREEZE, module, "faultloggertestsummary07");
308            await msleep(1000);
309            hiSysEvent.write({
310                domain: "ACE",
311                name: "JS_ERROR",
312                eventType: hiSysEvent.EventType.FAULT,
313                params: {
314                    PACKAGE_NAME: "com.ohos.faultlogger.test",
315                    PROCESS_NAME: "com.ohos.faultlogger.test",
316                    MSG: "faultlogger testcase test.",
317                    REASON: "faultlogger testcase test."
318                }
319            }).then(
320                (value) => {
321                    console.log(`HiSysEvent json-callback-success value=${value}`);
322                })
323            await msleep(1000);
324            faultlogger.addFaultLog(0,
325                    faultlogger.FaultType.CPP_CRASH, module, "faultloggertestsummary07");
326            await msleep(1000);
327            console.info("--------FaultlogJsTest_007");
328            function queryFaultLogCallback(error, ret) {
329                if (error) {
330                    console.info('FaultlogJsTest_007  once error is ' + error);
331                } else {
332                    console.info("FaultlogJsTest_007 ret == " + ret.length);
333                    expect(ret[0].type).assertEqual(faultlogger.FaultType.CPP_CRASH);
334                    expect(ret[1].type).assertEqual(faultlogger.FaultType.JS_CRASH);
335                    expect(ret[1].timestamp).assertLess(ret[0].timestamp);
336                    expect(ret[2].type).assertEqual(faultlogger.FaultType.APP_FREEZE);
337                    expect(ret[2].timestamp).assertLess(ret[1].timestamp);
338                }
339                done();
340            }
341            faultlogger.query(faultlogger.FaultType.NO_SPECIFIC, queryFaultLogCallback);
342            return;
343        } catch (err) {
344            console.info(err);
345        }
346        console.info("FaultlogJsTest_007 error");
347        expect(false).assertTrue();
348        done();
349    })
350})