diff --git a/scripts/clean/server/test.sh b/scripts/clean/server/test.sh index 753b8c67e..42651d3a8 100755 --- a/scripts/clean/server/test.sh +++ b/scripts/clean/server/test.sh @@ -3,7 +3,7 @@ set -eu for i in $(seq 1 6); do - dropdb "peertube_test$i" + dropdb --if-exists "peertube_test$i" rm -rf "./test$i" rm -f "./config/local-test.json" rm -f "./config/local-test-$i.json" diff --git a/server/tests/real-world/populate-database.ts b/server/tests/real-world/populate-database.ts new file mode 100644 index 000000000..5f93d09db --- /dev/null +++ b/server/tests/real-world/populate-database.ts @@ -0,0 +1,110 @@ +import { VideoRateType } from '../../../shared' +import { + addVideoChannel, + createUser, + flushTests, + getVideosList, + killallServers, + rateVideo, + runServer, + ServerInfo, + setAccessTokensToServers, + uploadVideo +} from '../utils' +import * as Bluebird from 'bluebird' + +start() + .catch(err => console.error(err)) + +// ---------------------------------------------------------------------------- + +async function start () { + process.on('exit', async () => { + killallServers([ server ]) + return + }) + process.on('SIGINT', goodbye) + process.on('SIGTERM', goodbye) + + await flushTests() + + console.log('Flushed tests.') + + const server = await runServer(6) + await setAccessTokensToServers([ server ]) + + console.log('Servers ran.') + + // Forever + const fakeTab = Array.from(Array(1000000).keys()) + await Bluebird.map(fakeTab, () => { + return Promise.all([ + uploadCustom(server), + likeCustom(server), + dislikeCustom(server), + createUserCustom(server), + createCustomChannel(server) + ]).catch(err => console.error(err)) + }, { concurrency: 5 }) +} + +function getRandomInt (min, max) { + return Math.floor(Math.random() * (max - min)) + min +} + +function createCustomChannel (server: ServerInfo) { + const videoChannel = { + displayName: Date.now().toString(), + description: Date.now().toString() + } + + return addVideoChannel(server.url, server.accessToken, videoChannel) +} + +function createUserCustom (server: ServerInfo) { + const username = Date.now().toString() + getRandomInt(0, 100000) + console.log('Creating user %s.', username) + + return createUser(server.url, server.accessToken, username, 'coucou') +} + +function uploadCustom (server: ServerInfo) { + console.log('Uploading video.') + + const videoAttributes = { + name: Date.now() + ' name', + category: 4, + nsfw: false, + licence: 2, + language: 'en', + description: Date.now() + ' description', + tags: [ Date.now().toString().substring(0, 5) + 't1', Date.now().toString().substring(0, 5) + 't2' ], + fixture: 'video_short.mp4' + } + + return uploadVideo(server.url, server.accessToken, videoAttributes) +} + +function likeCustom (server: ServerInfo) { + return rateCustom(server, 'like') +} + +function dislikeCustom (server: ServerInfo) { + return rateCustom(server, 'dislike') +} + +async function rateCustom (server: ServerInfo, rating: VideoRateType) { + const res = await getVideosList(server.url) + + const videos = res.body.data + if (videos.length === 0) return undefined + + const videoToRate = videos[getRandomInt(0, videos.length)] + + console.log('Rating (%s) video.', rating) + return rateVideo(server.url, server.accessToken, videoToRate.id, rating) +} + +function goodbye () { + return process.exit(-1) +}