3 const child_process = require('child_process')
4 const exec = child_process.exec
5 const fork = child_process.fork
6 const pathUtils = require('path')
7 const request = require('supertest')
10 flushTests: flushTests,
11 getFriendsList: getFriendsList,
12 getVideosList: getVideosList,
13 makeFriends: makeFriends,
14 quitFriends: quitFriends,
15 removeVideo: removeVideo,
16 flushAndRunMultipleServers: flushAndRunMultipleServers,
18 searchVideo: searchVideo,
19 uploadVideo: uploadVideo
22 // ---------------------- Export functions --------------------
24 function flushTests (callback) {
25 exec(pathUtils.join(__dirname, '../../../bin/clean_test.sh'), callback)
28 function getFriendsList (url, end) {
29 const path = '/api/v1/pods/'
33 .set('Accept', 'application/json')
35 .expect('Content-Type', /json/)
39 function getVideosList (url, end) {
40 const path = '/api/v1/videos'
44 .set('Accept', 'application/json')
46 .expect('Content-Type', /json/)
50 function makeFriends (url, expected_status, callback) {
52 callback = expected_status
56 const path = '/api/v1/pods/makefriends'
58 // The first pod make friend with the third
61 .set('Accept', 'application/json')
62 .expect(expected_status)
63 .end(function (err, res) {
66 // Wait for the request between pods
67 setTimeout(callback, 1000)
71 function quitFriends (url, callback) {
72 const path = '/api/v1/pods/quitfriends'
74 // The first pod make friend with the third
77 .set('Accept', 'application/json')
79 .end(function (err, res) {
82 // Wait for the request between pods
83 setTimeout(callback, 1000)
87 function removeVideo (url, id, end) {
88 const path = '/api/v1/videos'
91 .delete(path + '/' + id)
92 .set('Accept', 'application/json')
97 function flushAndRunMultipleServers (total_servers, serversRun) {
102 function anotherServerDone (number, app, url) {
103 apps[number - 1] = app
104 urls[number - 1] = url
106 if (i === total_servers) {
107 serversRun(apps, urls)
111 flushTests(function () {
112 for (let j = 1; j <= total_servers; j++) {
113 // For the virtual buffer
114 setTimeout(function () {
115 runServer(j, function (app, url) {
116 anotherServerDone(j, app, url)
123 function runServer (number, callback) {
124 const port = 9000 + number
125 const server_run_string = {
126 'Connected to mongodb': false,
127 'Server listening on port': false
130 // Share the environment
131 const env = Object.create(process.env)
132 env.NODE_ENV = 'test'
133 env.NODE_APP_INSTANCE = number
140 const app = fork(pathUtils.join(__dirname, '../../../server.js'), [], options)
141 app.stdout.on('data', function onStdout (data) {
142 let dont_continue = false
143 // Check if all required sentences are here
144 for (const key of Object.keys(server_run_string)) {
145 if (data.toString().indexOf(key) !== -1) server_run_string[key] = true
146 if (server_run_string[key] === false) dont_continue = true
149 // If no, there is maybe one thing not already initialized (mongodb...)
150 if (dont_continue === true) return
152 app.stdout.removeListener('data', onStdout)
153 callback(app, 'http://localhost:' + port)
157 function searchVideo (url, search, end) {
158 const path = '/api/v1/videos'
161 .get(path + '/search/' + search)
162 .set('Accept', 'application/json')
164 .expect('Content-Type', /json/)
168 function uploadVideo (url, name, description, fixture, end) {
169 const path = '/api/v1/videos'
173 .set('Accept', 'application/json')
175 .field('description', description)
176 .attach('input_video', pathUtils.join(__dirname, 'fixtures', fixture))
181 // ---------------------------------------------------------------------------
183 module.exports = testUtils