X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=shared%2Fextra-utils%2Fmiscs%2Fmiscs.ts;h=c957a6abea2d78d83f1b20a7ff4ebc09a22aa50d;hb=837666fe48f9ed786db75c96e2025cbcf20a1e3b;hp=fb6430e4f19a760aa33d4dcc8137573b5cdd2fd9;hpb=1a12f66d631d28a5a58ebbcd274426f2e6e5d203;p=github%2FChocobozzz%2FPeerTube.git diff --git a/shared/extra-utils/miscs/miscs.ts b/shared/extra-utils/miscs/miscs.ts index fb6430e4f..c957a6abe 100644 --- a/shared/extra-utils/miscs/miscs.ts +++ b/shared/extra-utils/miscs/miscs.ts @@ -1,14 +1,14 @@ /* tslint:disable:no-unused-expression */ import * as chai from 'chai' -import { basename, isAbsolute, join, resolve } from 'path' +import { basename, dirname, isAbsolute, join, resolve } from 'path' import * as request from 'supertest' import * as WebTorrent from 'webtorrent' -import { pathExists, readFile } from 'fs-extra' +import { ensureDir, pathExists, readFile } from 'fs-extra' import * as ffmpeg from 'fluent-ffmpeg' const expect = chai.expect -let webtorrent = new WebTorrent() +let webtorrent: WebTorrent.Instance function immutableAssign (target: T, source: U) { return Object.assign<{}, T, U>({}, target, source) @@ -27,6 +27,9 @@ function wait (milliseconds: number) { } function webtorrentAdd (torrent: string, refreshWebTorrent = false) { + const WebTorrent = require('webtorrent') + + if (!webtorrent) webtorrent = new WebTorrent() if (refreshWebTorrent === true) webtorrent = new WebTorrent() return new Promise(res => webtorrent.add(torrent, res)) @@ -41,6 +44,10 @@ function root () { return root } +function buildServerDirectory (internalServerNumber: number, directory: string) { + return join(root(), 'test' + internalServerNumber, directory) +} + async function testImage (url: string, imageName: string, imagePath: string, extension = '.jpg') { const res = await request(url) .get(imagePath) @@ -56,12 +63,16 @@ async function testImage (url: string, imageName: string, imagePath: string, ext expect(data.length).to.be.below(maxLength) } -function buildAbsoluteFixturePath (path: string, customTravisPath = false) { +function buildAbsoluteFixturePath (path: string, customCIPath = false) { if (isAbsolute(path)) { return path } - if (customTravisPath && process.env.TRAVIS) return join(process.env.HOME, 'fixtures', path) + if (customCIPath) { + if (process.env.GITLAB_CI) return join(root(), 'cached-fixtures', path) + + if (process.env.TRAVIS) return join(process.env.HOME, 'fixtures', path) + } return join(root(), 'server', 'tests', 'fixtures', path) } @@ -69,6 +80,8 @@ function buildAbsoluteFixturePath (path: string, customTravisPath = false) { async function generateHighBitrateVideo () { const tempFixturePath = buildAbsoluteFixturePath('video_high_bitrate_1080p.mp4', true) + await ensureDir(dirname(tempFixturePath)) + const exists = await pathExists(tempFixturePath) if (!exists) { @@ -91,15 +104,39 @@ async function generateHighBitrateVideo () { return tempFixturePath } +async function generateVideoWithFramerate (fps = 60) { + const tempFixturePath = buildAbsoluteFixturePath(`video_${fps}fps.mp4`, true) + + await ensureDir(dirname(tempFixturePath)) + + const exists = await pathExists(tempFixturePath) + if (!exists) { + return new Promise(async (res, rej) => { + ffmpeg() + .outputOptions([ '-f rawvideo', '-video_size 320x240', '-i /dev/urandom' ]) + .outputOptions([ '-ac 2', '-f s16le', '-i /dev/urandom', '-t 10' ]) + .outputOptions([ `-r ${fps}` ]) + .output(tempFixturePath) + .on('error', rej) + .on('end', () => res(tempFixturePath)) + .run() + }) + } + + return tempFixturePath +} + // --------------------------------------------------------------------------- export { dateIsValid, wait, + buildServerDirectory, webtorrentAdd, immutableAssign, testImage, buildAbsoluteFixturePath, root, - generateHighBitrateVideo + generateHighBitrateVideo, + generateVideoWithFramerate }