Move to eslint
[oweals/peertube.git] / server / tests / api / server / tracker.ts
1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await,@typescript-eslint/no-floating-promises */
2
3 import * as magnetUtil from 'magnet-uri'
4 import 'mocha'
5 import {
6   cleanupTests,
7   flushAndRunServer,
8   getVideo,
9   killallServers,
10   reRunServer,
11   ServerInfo,
12   uploadVideo
13 } from '../../../../shared/extra-utils'
14 import { setAccessTokensToServers } from '../../../../shared/extra-utils/index'
15 import { VideoDetails } from '../../../../shared/models/videos'
16 import * as WebTorrent from 'webtorrent'
17
18 describe('Test tracker', function () {
19   let server: ServerInfo
20   let badMagnet: string
21   let goodMagnet: string
22
23   before(async function () {
24     this.timeout(60000)
25     server = await flushAndRunServer(1)
26     await setAccessTokensToServers([ server ])
27
28     {
29       const res = await uploadVideo(server.url, server.accessToken, {})
30       const videoUUID = res.body.video.uuid
31
32       const resGet = await getVideo(server.url, videoUUID)
33       const video: VideoDetails = resGet.body
34       goodMagnet = video.files[0].magnetUri
35
36       const parsed = magnetUtil.decode(goodMagnet)
37       parsed.infoHash = '010597bb88b1968a5693a4fa8267c592ca65f2e9'
38
39       badMagnet = magnetUtil.encode(parsed)
40     }
41   })
42
43   it('Should return an error when adding an incorrect infohash', function (done) {
44     this.timeout(10000)
45     const webtorrent = new WebTorrent()
46
47     const torrent = webtorrent.add(badMagnet)
48
49     torrent.on('error', done)
50     torrent.on('warning', warn => {
51       const message = typeof warn === 'string' ? warn : warn.message
52       if (message.indexOf('Unknown infoHash ') !== -1) return done()
53     })
54
55     torrent.on('done', () => done(new Error('No error on infohash')))
56   })
57
58   it('Should succeed with the correct infohash', function (done) {
59     this.timeout(10000)
60     const webtorrent = new WebTorrent()
61
62     const torrent = webtorrent.add(goodMagnet)
63
64     torrent.on('error', done)
65     torrent.on('warning', warn => {
66       const message = typeof warn === 'string' ? warn : warn.message
67       if (message.indexOf('Unknown infoHash ') !== -1) return done(new Error('Error on infohash'))
68     })
69
70     torrent.on('done', done)
71   })
72
73   it('Should disable the tracker', function (done) {
74     this.timeout(20000)
75
76     killallServers([ server ])
77     reRunServer(server, { tracker: { enabled: false } })
78       .then(() => {
79         const webtorrent = new WebTorrent()
80
81         const torrent = webtorrent.add(goodMagnet)
82
83         torrent.on('error', done)
84         torrent.on('warning', warn => {
85           const message = typeof warn === 'string' ? warn : warn.message
86           if (message.indexOf('disabled ') !== -1) return done()
87         })
88
89         torrent.on('done', () => done(new Error('Tracker is enabled')))
90       })
91   })
92
93   after(async function () {
94     await cleanupTests([ server ])
95   })
96 })