mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-12 00:55:34 +00:00
* bugfix: change action request cnt type as Counter * bugfix: fix type of act req count and typo * bugfix: change to correct type of act req in TC --------- Co-authored-by: wushuzh <wushuzh@outlook.com>
138 lines
3.1 KiB
JavaScript
138 lines
3.1 KiB
JavaScript
import * as process from 'node:process'
|
|
import waitOn from 'wait-on'
|
|
import { spawn } from 'node:child_process'
|
|
|
|
export default function getRunner () {
|
|
const type = process.env.OLIVETIN_TEST_RUNNER
|
|
|
|
console.log('OLIVETIN_TEST_RUNNER env value is: ', type)
|
|
|
|
switch (type) {
|
|
case 'local':
|
|
return new OliveTinTestRunnerStartLocalProcess()
|
|
case 'vm':
|
|
return new OliveTinTestRunnerVm()
|
|
case 'container':
|
|
return new OliveTinTestRunnerEnv()
|
|
default:
|
|
return new OliveTinTestRunnerStartLocalProcess()
|
|
}
|
|
}
|
|
|
|
class OliveTinTestRunner {
|
|
BASE_URL = 'http://nohost:1337/';
|
|
|
|
baseUrl() {
|
|
return this.BASE_URL
|
|
}
|
|
|
|
metricsUrl() {
|
|
return new URL('metrics', this.baseUrl());
|
|
}
|
|
}
|
|
|
|
class OliveTinTestRunnerStartLocalProcess extends OliveTinTestRunner {
|
|
async start (cfg) {
|
|
let stdout = ""
|
|
let stderr = ""
|
|
|
|
this.ot = spawn('./../OliveTin', ['-configdir', 'configs/' + cfg + '/'])
|
|
|
|
let logStdout = false
|
|
|
|
if (process.env.CI === 'true') {
|
|
logStdout = true;
|
|
} else {
|
|
logStdout = process.env.OLIVETIN_TEST_RUNNER_LOG_STDOUT === '1'
|
|
}
|
|
|
|
this.ot.stdout.on('data', (data) => {
|
|
stdout += data
|
|
|
|
if (logStdout) {
|
|
console.log(`stdout: ${data}`)
|
|
}
|
|
})
|
|
|
|
this.ot.stderr.on('data', (data) => {
|
|
stderr += data
|
|
|
|
if (logStdout) {
|
|
console.log(`stderr: ${data}`)
|
|
}
|
|
})
|
|
|
|
this.ot.on('close', (code) => {
|
|
if (code != null) {
|
|
console.log(`OliveTin local process exited with code ${code}`)
|
|
console.log(stdout)
|
|
console.log(stderr)
|
|
console.log(this.ot.exitCode)
|
|
}
|
|
})
|
|
|
|
if (this.ot.exitCode == null) {
|
|
this.BASE_URL = 'http://localhost:1337/'
|
|
|
|
await waitOn({
|
|
resources: [this.BASE_URL]
|
|
})
|
|
|
|
console.log(" OliveTin local process started and webUI accessible")
|
|
} else {
|
|
console.log(" OliveTin local process start FAILED!")
|
|
console.log(stdout)
|
|
console.log(stderr)
|
|
console.log(this.ot.exitCode)
|
|
}
|
|
}
|
|
|
|
async stop () {
|
|
if ((await this.ot.exitCode) != null) {
|
|
console.log(" OliveTin local process tried stop(), but it already exited with code", this.ot.exitCode)
|
|
} else {
|
|
await this.ot.kill()
|
|
console.log(" OliveTin local process killed")
|
|
}
|
|
|
|
await new Promise((res) => setTimeout(res, 100))
|
|
}
|
|
}
|
|
|
|
class OliveTinTestRunnerEnv extends OliveTinTestRunner {
|
|
constructor () {
|
|
super()
|
|
|
|
const IP = process.env.IP
|
|
const PORT = process.env.PORT
|
|
|
|
this.BASE_URL = 'http://' + IP + ':' + PORT + '/'
|
|
|
|
console.log('Runner ENV endpoint: ' + this.BASE_URL)
|
|
}
|
|
|
|
async start () {
|
|
await waitOn({
|
|
resources: [this.BASE_URL]
|
|
})
|
|
}
|
|
|
|
async stop () {
|
|
|
|
}
|
|
}
|
|
|
|
class OliveTinTestRunnerVm extends OliveTinTestRunnerEnv {
|
|
constructor() {
|
|
super()
|
|
}
|
|
|
|
async start (cfg) {
|
|
console.log("vagrant changing config")
|
|
spawn('vagrant', ['ssh', '-c', '"ln -sf /etc/OliveTin/ /opt/OliveTin-configs/' + cfg + '/config.yaml"'])
|
|
spawn('vagrant', ['ssh', '-c', '"systemctl restart OliveTin"'])
|
|
|
|
return null
|
|
}
|
|
}
|