xref: /test/xts/tools/lite/reliability/JSPressTest.js (revision 31c75014)
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}