Add populate database script
authorChocobozzz <me@florianbigard.com>
Tue, 17 Jul 2018 16:17:50 +0000 (18:17 +0200)
committerChocobozzz <me@florianbigard.com>
Tue, 17 Jul 2018 16:17:50 +0000 (18:17 +0200)
scripts/clean/server/test.sh
server/tests/real-world/populate-database.ts [new file with mode: 0644]

index 753b8c67eb32724633868679f26c58b612eed0a8..42651d3a8291da65069e3b582db6e6e4436e918a 100755 (executable)
@@ -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 (file)
index 0000000..5f93d09
--- /dev/null
@@ -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)
+}