You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
76 lines
1.8 KiB
'use strict'
|
|
|
|
const os = require('os')
|
|
const writer = require('flush-write-stream')
|
|
const split = require('split2')
|
|
const { existsSync, statSync } = require('fs')
|
|
const pid = process.pid
|
|
const hostname = os.hostname()
|
|
|
|
const isWin = process.platform === 'win32'
|
|
|
|
function getPathToNull () {
|
|
return isWin ? '\\\\.\\NUL' : '/dev/null'
|
|
}
|
|
|
|
function once (emitter, name) {
|
|
return new Promise((resolve, reject) => {
|
|
if (name !== 'error') emitter.once('error', reject)
|
|
emitter.once(name, (...args) => {
|
|
emitter.removeListener('error', reject)
|
|
resolve(...args)
|
|
})
|
|
})
|
|
}
|
|
|
|
function sink (func) {
|
|
const result = split((data) => {
|
|
try {
|
|
return JSON.parse(data)
|
|
} catch (err) {
|
|
console.log(err)
|
|
console.log(data)
|
|
}
|
|
})
|
|
if (func) result.pipe(writer.obj(func))
|
|
return result
|
|
}
|
|
|
|
function check (is, chunk, level, msg) {
|
|
is(new Date(chunk.time) <= new Date(), true, 'time is greater than Date.now()')
|
|
delete chunk.time
|
|
is(chunk.pid, pid)
|
|
is(chunk.hostname, hostname)
|
|
is(chunk.level, level)
|
|
is(chunk.msg, msg)
|
|
}
|
|
|
|
function sleep (ms) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(resolve, ms)
|
|
})
|
|
}
|
|
|
|
function watchFileCreated (filename) {
|
|
return new Promise((resolve, reject) => {
|
|
const TIMEOUT = 800
|
|
const INTERVAL = 100
|
|
const threshold = TIMEOUT / INTERVAL
|
|
let counter = 0
|
|
const interval = setInterval(() => {
|
|
// On some CI runs file is created but not filled
|
|
if (existsSync(filename) && statSync(filename).size !== 0) {
|
|
clearInterval(interval)
|
|
resolve()
|
|
} else if (counter <= threshold) {
|
|
counter++
|
|
} else {
|
|
clearInterval(interval)
|
|
reject(new Error(`${filename} was not created.`))
|
|
}
|
|
}, INTERVAL)
|
|
})
|
|
}
|
|
|
|
module.exports = { getPathToNull, sink, check, once, sleep, watchFileCreated }
|