]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/multiplePods.js
3 const async
= require('async')
4 const chai
= require('chai')
5 const expect
= chai
.expect
6 const pathUtils
= require('path')
8 const utils
= require('./utils')
9 const webtorrent
= require(pathUtils
.join(__dirname
, '../../lib/webtorrent'))
10 webtorrent
.silent
= true
12 describe('Test multiple pods', function () {
16 before(function (done
) {
22 utils
.flushAndRunMultipleServers(3, function (servers_run
) {
27 // Get the access tokens
29 async
.each(servers
, function (server
, callback_each
) {
30 utils
.loginAndGetAccessToken(server
, function (err
, access_token
) {
31 if (err
) return callback_each(err
)
33 server
.access_token
= access_token
38 // The second pod make friend with the third
40 utils
.makeFriends(servers
[1].url
, next
)
42 // Wait for the request between pods
44 setTimeout(next
, 10000)
46 // Pod 1 make friends too
48 utils
.makeFriends(servers
[0].url
, next
)
51 webtorrent
.create({ host: 'client', port: '1' }, next
)
56 it('Should not have videos for all pods', function (done
) {
57 async
.each(servers
, function (server
, callback
) {
58 utils
.getVideosList(server
.url
, function (err
, res
) {
61 expect(res
.body
).to
.be
.an('array')
62 expect(res
.body
.length
).to
.equal(0)
69 describe('Should upload the video and propagate on each pod', function () {
70 it('Should upload the video on pod 1 and propagate on each pod', function (done
) {
75 utils
.uploadVideo(servers
[0].url
, servers
[0].access_token
, 'my super name for pod 1', 'my super description for pod 1', 'video_short1.webm', next
)
78 setTimeout(next
, 11000)
80 // All pods should have this video
84 async
.each(servers
, function (server
, callback
) {
85 let base_magnet
= null
87 utils
.getVideosList(server
.url
, function (err
, res
) {
90 const videos
= res
.body
91 expect(videos
).to
.be
.an('array')
92 expect(videos
.length
).to
.equal(1)
93 const video
= videos
[0]
94 expect(video
.name
).to
.equal('my super name for pod 1')
95 expect(video
.description
).to
.equal('my super description for pod 1')
96 expect(video
.podUrl
).to
.equal('http://localhost:9001')
97 expect(video
.magnetUri
).to
.exist
98 expect(video
.duration
).to
.equal(10)
100 if (server
.url
!== 'http://localhost:9001') {
101 expect(video
.isLocal
).to
.be
.false
103 expect(video
.isLocal
).to
.be
.true
106 // All pods should have the same magnet Uri
107 if (base_magnet
=== null) {
108 base_magnet
= video
.magnetUri
110 expect(video
.magnetUri
).to
.equal
.magnetUri
120 it('Should upload the video on pod 2 and propagate on each pod', function (done
) {
125 utils
.uploadVideo(servers
[1].url
, servers
[1].access_token
, 'my super name for pod 2', 'my super description for pod 2', 'video_short2.webm', next
)
128 setTimeout(next
, 11000)
130 // All pods should have this video
134 async
.each(servers
, function (server
, callback
) {
135 let base_magnet
= null
137 utils
.getVideosList(server
.url
, function (err
, res
) {
140 const videos
= res
.body
141 expect(videos
).to
.be
.an('array')
142 expect(videos
.length
).to
.equal(2)
143 const video
= videos
[1]
144 expect(video
.name
).to
.equal('my super name for pod 2')
145 expect(video
.description
).to
.equal('my super description for pod 2')
146 expect(video
.podUrl
).to
.equal('http://localhost:9002')
147 expect(video
.magnetUri
).to
.exist
148 expect(video
.duration
).to
.equal(5)
150 if (server
.url
!== 'http://localhost:9002') {
151 expect(video
.isLocal
).to
.be
.false
153 expect(video
.isLocal
).to
.be
.true
156 // All pods should have the same magnet Uri
157 if (base_magnet
=== null) {
158 base_magnet
= video
.magnetUri
160 expect(video
.magnetUri
).to
.equal
.magnetUri
170 it('Should upload two videos on pod 3 and propagate on each pod', function (done
) {
175 utils
.uploadVideo(servers
[2].url
, servers
[2].access_token
, 'my super name for pod 3', 'my super description for pod 3', 'video_short3.webm', next
)
178 utils
.uploadVideo(servers
[2].url
, servers
[2].access_token
, 'my super name for pod 3-2', 'my super description for pod 3-2', 'video_short.webm', next
)
181 setTimeout(next
, 22000)
186 let base_magnet
= null
187 // All pods should have this video
188 async
.each(servers
, function (server
, callback
) {
189 utils
.getVideosList(server
.url
, function (err
, res
) {
192 const videos
= res
.body
193 expect(videos
).to
.be
.an('array')
194 expect(videos
.length
).to
.equal(4)
196 // We not sure about the order of the two last uploads
199 if (videos
[2].name
=== 'my super name for pod 3') {
207 expect(video1
.name
).to
.equal('my super name for pod 3')
208 expect(video1
.description
).to
.equal('my super description for pod 3')
209 expect(video1
.podUrl
).to
.equal('http://localhost:9003')
210 expect(video1
.magnetUri
).to
.exist
211 expect(video1
.duration
).to
.equal(5)
213 expect(video2
.name
).to
.equal('my super name for pod 3-2')
214 expect(video2
.description
).to
.equal('my super description for pod 3-2')
215 expect(video2
.podUrl
).to
.equal('http://localhost:9003')
216 expect(video2
.magnetUri
).to
.exist
217 expect(video2
.duration
).to
.equal(5)
219 if (server
.url
!== 'http://localhost:9003') {
220 expect(video1
.isLocal
).to
.be
.false
221 expect(video2
.isLocal
).to
.be
.false
223 expect(video1
.isLocal
).to
.be
.true
224 expect(video2
.isLocal
).to
.be
.true
227 // All pods should have the same magnet Uri
228 if (base_magnet
=== null) {
229 base_magnet
= video2
.magnetUri
231 expect(video2
.magnetUri
).to
.equal
.magnetUri
242 describe('Should seed the uploaded video', function () {
243 it('Should add the file 1 by asking pod 3', function (done
) {
244 // Yes, this could be long
247 utils
.getVideosList(servers
[2].url
, function (err
, res
) {
250 const video
= res
.body
[0]
251 to_remove
.push(res
.body
[2].id
)
252 to_remove
.push(res
.body
[3].id
)
254 webtorrent
.add(video
.magnetUri
, function (torrent
) {
255 expect(torrent
.files
).to
.exist
256 expect(torrent
.files
.length
).to
.equal(1)
257 expect(torrent
.files
[0].path
).to
.exist
.and
.to
.not
.equal('')
264 it('Should add the file 2 by asking pod 1', function (done
) {
265 // Yes, this could be long
268 utils
.getVideosList(servers
[0].url
, function (err
, res
) {
271 const video
= res
.body
[1]
273 webtorrent
.add(video
.magnetUri
, function (torrent
) {
274 expect(torrent
.files
).to
.exist
275 expect(torrent
.files
.length
).to
.equal(1)
276 expect(torrent
.files
[0].path
).to
.exist
.and
.to
.not
.equal('')
283 it('Should add the file 3 by asking pod 2', function (done
) {
284 // Yes, this could be long
287 utils
.getVideosList(servers
[1].url
, function (err
, res
) {
290 const video
= res
.body
[2]
292 webtorrent
.add(video
.magnetUri
, function (torrent
) {
293 expect(torrent
.files
).to
.exist
294 expect(torrent
.files
.length
).to
.equal(1)
295 expect(torrent
.files
[0].path
).to
.exist
.and
.to
.not
.equal('')
302 it('Should add the file 3-2 by asking pod 1', function (done
) {
303 // Yes, this could be long
306 utils
.getVideosList(servers
[0].url
, function (err
, res
) {
309 const video
= res
.body
[3]
311 webtorrent
.add(video
.magnetUri
, function (torrent
) {
312 expect(torrent
.files
).to
.exist
313 expect(torrent
.files
.length
).to
.equal(1)
314 expect(torrent
.files
[0].path
).to
.exist
.and
.to
.not
.equal('')
321 it('Should remove the file 3 and 3-2 by asking pod 3', function (done
) {
326 utils
.removeVideo(servers
[2].url
, servers
[2].access_token
, to_remove
[0], next
)
329 utils
.removeVideo(servers
[2].url
, servers
[2].access_token
, to_remove
[1], next
)
333 setTimeout(done
, 11000)
338 it('Should have videos 1 and 3 on each pod', function (done
) {
339 async
.each(servers
, function (server
, callback
) {
340 utils
.getVideosList(server
.url
, function (err
, res
) {
343 const videos
= res
.body
344 expect(videos
).to
.be
.an('array')
345 expect(videos
.length
).to
.equal(2)
346 expect(videos
[0].id
).not
.to
.equal(videos
[1].id
)
347 expect(videos
[0].id
).not
.to
.equal(to_remove
[0])
348 expect(videos
[1].id
).not
.to
.equal(to_remove
[0])
349 expect(videos
[0].id
).not
.to
.equal(to_remove
[1])
350 expect(videos
[1].id
).not
.to
.equal(to_remove
[1])
358 after(function (done
) {
359 servers
.forEach(function (server
) {
360 process
.kill(-server
.app
.pid
)
362 process
.kill(-webtorrent
.app
.pid
)
364 // Keep the logs if the test failed
366 utils
.flushTests(done
)