131c75014Sopenharmony_ci/* 231c75014Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 331c75014Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 431c75014Sopenharmony_ci * you may not use this file except in compliance with the License. 531c75014Sopenharmony_ci * You may obtain a copy of the License at 631c75014Sopenharmony_ci * 731c75014Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 831c75014Sopenharmony_ci * 931c75014Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1031c75014Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1131c75014Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1231c75014Sopenharmony_ci * See the License for the specific language governing permissions and 1331c75014Sopenharmony_ci * limitations under the License. 1431c75014Sopenharmony_ci */ 1531c75014Sopenharmony_civar endFlag = false; 1631c75014Sopenharmony_ciclass PressureTest { 1731c75014Sopenharmony_ci constructor(core) { 1831c75014Sopenharmony_ci this.core = core; 1931c75014Sopenharmony_ci this.rootSuite = this.core.getDefaultService("suite").rootSuite; 2031c75014Sopenharmony_ci this.suites = []; 2131c75014Sopenharmony_ci this.its = []; 2231c75014Sopenharmony_ci this.times = 5; 2331c75014Sopenharmony_ci this.timeout = 10; 2431c75014Sopenharmony_ci this.init(); 2531c75014Sopenharmony_ci } 2631c75014Sopenharmony_ci 2731c75014Sopenharmony_ci init() { 2831c75014Sopenharmony_ci if (this.rootSuite.childSuites.length > 0) { 2931c75014Sopenharmony_ci for (var i in this.rootSuite.childSuites) { 3031c75014Sopenharmony_ci this.getAllIt(this.rootSuite.childSuites[i]); 3131c75014Sopenharmony_ci } 3231c75014Sopenharmony_ci } 3331c75014Sopenharmony_ci } 3431c75014Sopenharmony_ci 3531c75014Sopenharmony_ci getAllIt(suite) { 3631c75014Sopenharmony_ci if (suite.specs.length > 0) { 3731c75014Sopenharmony_ci for (var i in suite.specs) { 3831c75014Sopenharmony_ci var oneIt = { 3931c75014Sopenharmony_ci it: suite.specs[i], 4031c75014Sopenharmony_ci suite: suite 4131c75014Sopenharmony_ci } 4231c75014Sopenharmony_ci this.its.push(oneIt); 4331c75014Sopenharmony_ci } 4431c75014Sopenharmony_ci } 4531c75014Sopenharmony_ci if (suite.childSuites.length > 0) { 4631c75014Sopenharmony_ci for (var i in suite.childSuites) { 4731c75014Sopenharmony_ci this.getAllIt(suite.childSuites[i]); 4831c75014Sopenharmony_ci } 4931c75014Sopenharmony_ci } 5031c75014Sopenharmony_ci } 5131c75014Sopenharmony_ci 5231c75014Sopenharmony_ci run() { 5331c75014Sopenharmony_ci this.core.fireEvents('task', 'taskStart'); 5431c75014Sopenharmony_ci let date = new Date(); 5531c75014Sopenharmony_ci let start = date.getTime(); 5631c75014Sopenharmony_ci let end = start + this.timeout * 1000; 5731c75014Sopenharmony_ci if (this.core.getDefaultService('config').isSupportAsync()) { 5831c75014Sopenharmony_ci while(this.times > 0 || start < end) { 5931c75014Sopenharmony_ci let asyncExecute = async () => { 6031c75014Sopenharmony_ci await this.runIts(); 6131c75014Sopenharmony_ci } 6231c75014Sopenharmony_ci this.times--; 6331c75014Sopenharmony_ci date = new Date(); 6431c75014Sopenharmony_ci start = date.getTime(); 6531c75014Sopenharmony_ci } 6631c75014Sopenharmony_ci } else { 6731c75014Sopenharmony_ci while(this.times > 0 || start < end) { 6831c75014Sopenharmony_ci this.runIts(); 6931c75014Sopenharmony_ci this.times--; 7031c75014Sopenharmony_ci date = new Date(); 7131c75014Sopenharmony_ci start = date.getTime(); 7231c75014Sopenharmony_ci } 7331c75014Sopenharmony_ci } 7431c75014Sopenharmony_ci var res = this.core.getDefaultService("suite").getSummary(); 7531c75014Sopenharmony_ci this.core.fireEvents('task', 'taskDone'); 7631c75014Sopenharmony_ci } 7731c75014Sopenharmony_ci 7831c75014Sopenharmony_ci runIts() { 7931c75014Sopenharmony_ci var itsTmp = []; 8031c75014Sopenharmony_ci itsTmp = Array.from(this.its); 8131c75014Sopenharmony_ci var lastSuite = null; 8231c75014Sopenharmony_ci while (itsTmp.length > 0) { 8331c75014Sopenharmony_ci var index = this.random(0, itsTmp.length - 1); 8431c75014Sopenharmony_ci var it = itsTmp[index]; 8531c75014Sopenharmony_ci this.runIt(it, lastSuite); 8631c75014Sopenharmony_ci lastSuite = it.suite; 8731c75014Sopenharmony_ci itsTmp.splice(index, 1); 8831c75014Sopenharmony_ci } 8931c75014Sopenharmony_ci lastSuite.runHookFunc('afterAll'); 9031c75014Sopenharmony_ci } 9131c75014Sopenharmony_ci 9231c75014Sopenharmony_ci runIt(it, lastSuite) { 9331c75014Sopenharmony_ci var suite = it.suite; 9431c75014Sopenharmony_ci if (lastSuite !== suite) { 9531c75014Sopenharmony_ci if (lastSuite !== null) { 9631c75014Sopenharmony_ci lastSuite.runHookFunc('afterAll'); 9731c75014Sopenharmony_ci } 9831c75014Sopenharmony_ci suite.runHookFunc('beforeAll'); 9931c75014Sopenharmony_ci } 10031c75014Sopenharmony_ci suite.runHookFunc('beforeEach'); 10131c75014Sopenharmony_ci it.it.run(this.core); 10231c75014Sopenharmony_ci suite.runHookFunc('afterEach'); 10331c75014Sopenharmony_ci } 10431c75014Sopenharmony_ci 10531c75014Sopenharmony_ci random(min, max) { 10631c75014Sopenharmony_ci return parseInt(Math.random()*(max - min) + min); 10731c75014Sopenharmony_ci } 10831c75014Sopenharmony_ci 10931c75014Sopenharmony_ci setPressTimes(times) { 11031c75014Sopenharmony_ci this.times = times; 11131c75014Sopenharmony_ci } 11231c75014Sopenharmony_ci 11331c75014Sopenharmony_ci setTimeout(timeout) { 11431c75014Sopenharmony_ci this.timeout = timeout; 11531c75014Sopenharmony_ci } 11631c75014Sopenharmony_ci} 11731c75014Sopenharmony_ci 11831c75014Sopenharmony_ciexport {PressureTest}