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})