diff options
author | Chocobozzz <me@florianbigard.com> | 2018-08-07 15:17:17 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-08-08 09:30:31 +0200 |
commit | 3e17515e2996b79e23f569c296051a91af3fcbe4 (patch) | |
tree | d1c06c394a9f4b1d8646625612c2d5d3e02e9191 /server/tests | |
parent | 187501f8b8e334f043ae1e9af3c9d4f45ea0e6c1 (diff) | |
download | PeerTube-3e17515e2996b79e23f569c296051a91af3fcbe4.tar.gz PeerTube-3e17515e2996b79e23f569c296051a91af3fcbe4.tar.zst PeerTube-3e17515e2996b79e23f569c296051a91af3fcbe4.zip |
Add torrent tests
Diffstat (limited to 'server/tests')
-rw-r--r-- | server/tests/api/check-params/users.ts | 2 | ||||
-rw-r--r-- | server/tests/api/check-params/video-imports.ts | 2 | ||||
-rw-r--r-- | server/tests/api/videos/video-imports.ts | 159 | ||||
-rw-r--r-- | server/tests/fixtures/60fps_small-240p.torrent | 1 | ||||
-rw-r--r-- | server/tests/fixtures/video-720p.torrent | bin | 0 -> 2644 bytes | |||
-rw-r--r-- | server/tests/utils/videos/video-imports.ts | 10 |
6 files changed, 129 insertions, 45 deletions
diff --git a/server/tests/api/check-params/users.ts b/server/tests/api/check-params/users.ts index e1655e85b..7b25df29f 100644 --- a/server/tests/api/check-params/users.ts +++ b/server/tests/api/check-params/users.ts | |||
@@ -627,7 +627,7 @@ describe('Test users API validators', function () { | |||
627 | } | 627 | } |
628 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { targetUrl: getYoutubeVideoUrl() })) | 628 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { targetUrl: getYoutubeVideoUrl() })) |
629 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { magnetUri: getMagnetURI() })) | 629 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { magnetUri: getMagnetURI() })) |
630 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { torrentfile: '60fps_small-240p.torrent' })) | 630 | await importVideo(server.url, server.accessToken, immutableAssign(baseAttributes, { torrentfile: 'video-720p.torrent' })) |
631 | 631 | ||
632 | await waitJobs([ server ]) | 632 | await waitJobs([ server ]) |
633 | 633 | ||
diff --git a/server/tests/api/check-params/video-imports.ts b/server/tests/api/check-params/video-imports.ts index e62f0918e..38ddd4e56 100644 --- a/server/tests/api/check-params/video-imports.ts +++ b/server/tests/api/check-params/video-imports.ts | |||
@@ -303,7 +303,7 @@ describe('Test video imports API validator', function () { | |||
303 | 303 | ||
304 | fields = omit(fields, 'magnetUri') | 304 | fields = omit(fields, 'magnetUri') |
305 | const attaches = { | 305 | const attaches = { |
306 | 'torrentfile': join(__dirname, '..', '..', 'fixtures', '60fps_small-240p.torrent') | 306 | 'torrentfile': join(__dirname, '..', '..', 'fixtures', 'video-720p.torrent') |
307 | } | 307 | } |
308 | 308 | ||
309 | await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches, statusCodeExpected: 409 }) | 309 | await makeUploadRequest({ url: server.url, path, token: server.accessToken, fields, attaches, statusCodeExpected: 409 }) |
diff --git a/server/tests/api/videos/video-imports.ts b/server/tests/api/videos/video-imports.ts index f21ade5c3..b7866d529 100644 --- a/server/tests/api/videos/video-imports.ts +++ b/server/tests/api/videos/video-imports.ts | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | import * as chai from 'chai' | 3 | import * as chai from 'chai' |
4 | import 'mocha' | 4 | import 'mocha' |
5 | import { VideoDetails, VideoPrivacy } from '../../../../shared/models/videos' | 5 | import { VideoDetails, VideoImport, VideoPrivacy } from '../../../../shared/models/videos' |
6 | import { | 6 | import { |
7 | doubleFollow, | 7 | doubleFollow, |
8 | flushAndRunMultipleServers, | 8 | flushAndRunMultipleServers, |
@@ -10,12 +10,13 @@ import { | |||
10 | getMyVideos, | 10 | getMyVideos, |
11 | getVideo, | 11 | getVideo, |
12 | getVideosList, | 12 | getVideosList, |
13 | immutableAssign, | ||
13 | killallServers, | 14 | killallServers, |
14 | ServerInfo, | 15 | ServerInfo, |
15 | setAccessTokensToServers | 16 | setAccessTokensToServers |
16 | } from '../../utils' | 17 | } from '../../utils' |
17 | import { waitJobs } from '../../utils/server/jobs' | 18 | import { waitJobs } from '../../utils/server/jobs' |
18 | import { getMyVideoImports, getYoutubeVideoUrl, importVideo } from '../../utils/videos/video-imports' | 19 | import { getMagnetURI, getYoutubeVideoUrl, importVideo, getMyVideoImports } from '../../utils/videos/video-imports' |
19 | 20 | ||
20 | const expect = chai.expect | 21 | const expect = chai.expect |
21 | 22 | ||
@@ -24,19 +25,36 @@ describe('Test video imports', function () { | |||
24 | let channelIdServer1: number | 25 | let channelIdServer1: number |
25 | let channelIdServer2: number | 26 | let channelIdServer2: number |
26 | 27 | ||
27 | async function checkVideoServer1 (url: string, id: number | string) { | 28 | async function checkVideosServer1 (url: string, idHttp: string, idMagnet: string, idTorrent: string) { |
28 | const res = await getVideo(url, id) | 29 | const resHttp = await getVideo(url, idHttp) |
29 | const video: VideoDetails = res.body | 30 | const videoHttp: VideoDetails = resHttp.body |
30 | 31 | ||
31 | expect(video.name).to.equal('small video - youtube') | 32 | expect(videoHttp.name).to.equal('small video - youtube') |
32 | expect(video.category.label).to.equal('News') | 33 | expect(videoHttp.category.label).to.equal('News') |
33 | expect(video.licence.label).to.equal('Attribution') | 34 | expect(videoHttp.licence.label).to.equal('Attribution') |
34 | expect(video.language.label).to.equal('Unknown') | 35 | expect(videoHttp.language.label).to.equal('Unknown') |
35 | expect(video.nsfw).to.be.false | 36 | expect(videoHttp.nsfw).to.be.false |
36 | expect(video.description).to.equal('this is a super description') | 37 | expect(videoHttp.description).to.equal('this is a super description') |
37 | expect(video.tags).to.deep.equal([ 'tag1', 'tag2' ]) | 38 | expect(videoHttp.tags).to.deep.equal([ 'tag1', 'tag2' ]) |
39 | expect(videoHttp.files).to.have.lengthOf(1) | ||
40 | |||
41 | const resMagnet = await getVideo(url, idMagnet) | ||
42 | const videoMagnet: VideoDetails = resMagnet.body | ||
43 | const resTorrent = await getVideo(url, idTorrent) | ||
44 | const videoTorrent: VideoDetails = resTorrent.body | ||
45 | |||
46 | for (const video of [ videoMagnet, videoTorrent ]) { | ||
47 | expect(video.category.label).to.equal('Misc') | ||
48 | expect(video.licence.label).to.equal('Unknown') | ||
49 | expect(video.language.label).to.equal('Unknown') | ||
50 | expect(video.nsfw).to.be.false | ||
51 | expect(video.description).to.equal('this is a super torrent description') | ||
52 | expect(video.tags).to.deep.equal([ 'tag_torrent1', 'tag_torrent2' ]) | ||
53 | expect(video.files).to.have.lengthOf(1) | ||
54 | } | ||
38 | 55 | ||
39 | expect(video.files).to.have.lengthOf(1) | 56 | expect(videoTorrent.name).to.contain('ä½ å¥½ 世界 720p.mp4') |
57 | expect(videoMagnet.name).to.contain('super peertube2 video') | ||
40 | } | 58 | } |
41 | 59 | ||
42 | async function checkVideoServer2 (url: string, id: number | string) { | 60 | async function checkVideoServer2 (url: string, id: number | string) { |
@@ -75,50 +93,88 @@ describe('Test video imports', function () { | |||
75 | await doubleFollow(servers[0], servers[1]) | 93 | await doubleFollow(servers[0], servers[1]) |
76 | }) | 94 | }) |
77 | 95 | ||
78 | it('Should import a video on server 1', async function () { | 96 | it('Should import videos on server 1', async function () { |
79 | this.timeout(60000) | 97 | this.timeout(60000) |
80 | 98 | ||
81 | const attributes = { | 99 | const baseAttributes = { |
82 | targetUrl: getYoutubeVideoUrl(), | ||
83 | channelId: channelIdServer1, | 100 | channelId: channelIdServer1, |
84 | privacy: VideoPrivacy.PUBLIC | 101 | privacy: VideoPrivacy.PUBLIC |
85 | } | 102 | } |
86 | const res = await importVideo(servers[0].url, servers[0].accessToken, attributes) | 103 | |
87 | expect(res.body.video.name).to.equal('small video - youtube') | 104 | { |
105 | const attributes = immutableAssign(baseAttributes, { targetUrl: getYoutubeVideoUrl() }) | ||
106 | const res = await importVideo(servers[0].url, servers[0].accessToken, attributes) | ||
107 | expect(res.body.video.name).to.equal('small video - youtube') | ||
108 | } | ||
109 | |||
110 | { | ||
111 | const attributes = immutableAssign(baseAttributes, { | ||
112 | magnetUri: getMagnetURI(), | ||
113 | description: 'this is a super torrent description', | ||
114 | tags: [ 'tag_torrent1', 'tag_torrent2' ] | ||
115 | }) | ||
116 | const res = await importVideo(servers[0].url, servers[0].accessToken, attributes) | ||
117 | expect(res.body.video.name).to.equal('super peertube2 video') | ||
118 | } | ||
119 | |||
120 | { | ||
121 | const attributes = immutableAssign(baseAttributes, { | ||
122 | torrentfile: 'video-720p.torrent', | ||
123 | description: 'this is a super torrent description', | ||
124 | tags: [ 'tag_torrent1', 'tag_torrent2' ] | ||
125 | }) | ||
126 | const res = await importVideo(servers[0].url, servers[0].accessToken, attributes) | ||
127 | expect(res.body.video.name).to.equal('ä½ å¥½ 世界 720p.mp4') | ||
128 | } | ||
88 | }) | 129 | }) |
89 | 130 | ||
90 | it('Should list the video to import in my videos on server 1', async function () { | 131 | it('Should list the videos to import in my videos on server 1', async function () { |
91 | const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5) | 132 | const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5, 'createdAt') |
92 | 133 | ||
93 | expect(res.body.total).to.equal(1) | 134 | expect(res.body.total).to.equal(3) |
94 | 135 | ||
95 | const videos = res.body.data | 136 | const videos = res.body.data |
96 | expect(videos).to.have.lengthOf(1) | 137 | expect(videos).to.have.lengthOf(3) |
97 | expect(videos[0].name).to.equal('small video - youtube') | 138 | expect(videos[0].name).to.equal('small video - youtube') |
139 | expect(videos[1].name).to.equal('super peertube2 video') | ||
140 | expect(videos[2].name).to.equal('ä½ å¥½ 世界 720p.mp4') | ||
98 | }) | 141 | }) |
99 | 142 | ||
100 | it('Should list the video to import in my imports on server 1', async function () { | 143 | it('Should list the videos to import in my imports on server 1', async function () { |
101 | const res = await getMyVideoImports(servers[0].url, servers[0].accessToken) | 144 | const res = await getMyVideoImports(servers[0].url, servers[0].accessToken, '-createdAt') |
145 | |||
146 | expect(res.body.total).to.equal(3) | ||
147 | const videoImports: VideoImport[] = res.body.data | ||
148 | expect(videoImports).to.have.lengthOf(3) | ||
149 | |||
150 | expect(videoImports[2].targetUrl).to.equal(getYoutubeVideoUrl()) | ||
151 | expect(videoImports[2].magnetUri).to.be.null | ||
152 | expect(videoImports[2].torrentName).to.be.null | ||
153 | expect(videoImports[2].video.name).to.equal('small video - youtube') | ||
102 | 154 | ||
103 | expect(res.body.total).to.equal(1) | 155 | expect(videoImports[1].targetUrl).to.be.null |
104 | const videoImports = res.body.data | 156 | expect(videoImports[1].magnetUri).to.equal(getMagnetURI()) |
105 | expect(videoImports).to.have.lengthOf(1) | 157 | expect(videoImports[1].torrentName).to.be.null |
158 | expect(videoImports[1].video.name).to.equal('super peertube2 video') | ||
106 | 159 | ||
107 | expect(videoImports[0].targetUrl).to.equal(getYoutubeVideoUrl()) | 160 | expect(videoImports[0].targetUrl).to.be.null |
108 | expect(videoImports[0].video.name).to.equal('small video - youtube') | 161 | expect(videoImports[0].magnetUri).to.be.null |
162 | expect(videoImports[0].torrentName).to.equal('video-720p.torrent') | ||
163 | expect(videoImports[0].video.name).to.equal('ä½ å¥½ 世界 720p.mp4') | ||
109 | }) | 164 | }) |
110 | 165 | ||
111 | it('Should have the video listed on the two instances1', async function () { | 166 | it('Should have the video listed on the two instances', async function () { |
112 | this.timeout(120000) | 167 | this.timeout(120000) |
113 | 168 | ||
114 | await waitJobs(servers) | 169 | await waitJobs(servers) |
115 | 170 | ||
116 | for (const server of servers) { | 171 | for (const server of servers) { |
117 | const res = await getVideosList(server.url) | 172 | const res = await getVideosList(server.url) |
118 | expect(res.body.total).to.equal(1) | 173 | expect(res.body.total).to.equal(3) |
119 | expect(res.body.data).to.have.lengthOf(1) | 174 | expect(res.body.data).to.have.lengthOf(3) |
120 | 175 | ||
121 | await checkVideoServer1(server.url, res.body.data[0].uuid) | 176 | const [ videoHttp, videoMagnet, videoTorrent ] = res.body.data |
177 | await checkVideosServer1(server.url, videoHttp.uuid, videoMagnet.uuid, videoTorrent.uuid) | ||
122 | } | 178 | } |
123 | }) | 179 | }) |
124 | 180 | ||
@@ -127,7 +183,7 @@ describe('Test video imports', function () { | |||
127 | 183 | ||
128 | const attributes = { | 184 | const attributes = { |
129 | targetUrl: getYoutubeVideoUrl(), | 185 | targetUrl: getYoutubeVideoUrl(), |
130 | channelId: channelIdServer1, | 186 | channelId: channelIdServer2, |
131 | privacy: VideoPrivacy.PUBLIC, | 187 | privacy: VideoPrivacy.PUBLIC, |
132 | category: 10, | 188 | category: 10, |
133 | licence: 7, | 189 | licence: 7, |
@@ -140,18 +196,43 @@ describe('Test video imports', function () { | |||
140 | expect(res.body.video.name).to.equal('my super name') | 196 | expect(res.body.video.name).to.equal('my super name') |
141 | }) | 197 | }) |
142 | 198 | ||
143 | it('Should have the video listed on the two instances', async function () { | 199 | it('Should have the videos listed on the two instances', async function () { |
144 | this.timeout(120000) | 200 | this.timeout(120000) |
145 | 201 | ||
146 | await waitJobs(servers) | 202 | await waitJobs(servers) |
147 | 203 | ||
148 | for (const server of servers) { | 204 | for (const server of servers) { |
149 | const res = await getVideosList(server.url) | 205 | const res = await getVideosList(server.url) |
150 | expect(res.body.total).to.equal(2) | 206 | expect(res.body.total).to.equal(4) |
151 | expect(res.body.data).to.have.lengthOf(2) | 207 | expect(res.body.data).to.have.lengthOf(4) |
152 | 208 | ||
153 | await checkVideoServer2(server.url, res.body.data[0].uuid) | 209 | await checkVideoServer2(server.url, res.body.data[0].uuid) |
154 | await checkVideoServer1(server.url, res.body.data[1].uuid) | 210 | |
211 | const [ ,videoHttp, videoMagnet, videoTorrent ] = res.body.data | ||
212 | await checkVideosServer1(server.url, videoHttp.uuid, videoMagnet.uuid, videoTorrent.uuid) | ||
213 | } | ||
214 | }) | ||
215 | |||
216 | it('Should import a video that will be transcoded', async function () { | ||
217 | this.timeout(120000) | ||
218 | |||
219 | const attributes = { | ||
220 | name: 'transcoded video', | ||
221 | magnetUri: getMagnetURI(), | ||
222 | channelId: channelIdServer2, | ||
223 | privacy: VideoPrivacy.PUBLIC | ||
224 | } | ||
225 | const res = await importVideo(servers[1].url, servers[1].accessToken, attributes) | ||
226 | const videoUUID = res.body.video.uuid | ||
227 | |||
228 | await waitJobs(servers) | ||
229 | |||
230 | for (const server of servers) { | ||
231 | const res = await getVideo(server.url, videoUUID) | ||
232 | const video: VideoDetails = res.body | ||
233 | |||
234 | expect(video.name).to.equal('transcoded video') | ||
235 | expect(video.files).to.have.lengthOf(4) | ||
155 | } | 236 | } |
156 | }) | 237 | }) |
157 | 238 | ||
diff --git a/server/tests/fixtures/60fps_small-240p.torrent b/server/tests/fixtures/60fps_small-240p.torrent deleted file mode 100644 index ec4c0babe..000000000 --- a/server/tests/fixtures/60fps_small-240p.torrent +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | d8:announce41:wss://peertube2.cpy.re:443/tracker/socket13:announce-listll41:wss://peertube2.cpy.re:443/tracker/socketel41:https://peertube2.cpy.re/tracker/announceee10:created by8:PeerTube13:creation datei1529593069e8:encoding5:UTF-84:infod6:lengthi30921e4:name20:60fps_small 240p.mp412:piece lengthi16384e6:pieces40:Ä–…+çéCFm7çc0ÏÅT-@2Ç6©0áMür|Rv›$˜h%e8:url-listl84:https://peertube2.cpy.re/static/webseed/2b8dbe74-9548-4f6f-a8da-986aed9e5e45-240.mp4ee \ No newline at end of file | ||
diff --git a/server/tests/fixtures/video-720p.torrent b/server/tests/fixtures/video-720p.torrent new file mode 100644 index 000000000..64bfd5220 --- /dev/null +++ b/server/tests/fixtures/video-720p.torrent | |||
Binary files differ | |||
diff --git a/server/tests/utils/videos/video-imports.ts b/server/tests/utils/videos/video-imports.ts index fa2f13b5e..59dfd481a 100644 --- a/server/tests/utils/videos/video-imports.ts +++ b/server/tests/utils/videos/video-imports.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | import { VideoImportCreate } from '../../../../shared/models/videos' | 1 | import { VideoImportCreate } from '../../../../shared/models/videos' |
2 | import { makeGetRequest, makePostBodyRequest, makeUploadRequest } from '..' | 2 | import { makeGetRequest, makeUploadRequest } from '..' |
3 | 3 | ||
4 | function getYoutubeVideoUrl () { | 4 | function getYoutubeVideoUrl () { |
5 | return 'https://youtu.be/msX3jv1XdvM' | 5 | return 'https://youtu.be/msX3jv1XdvM' |
@@ -7,7 +7,7 @@ function getYoutubeVideoUrl () { | |||
7 | 7 | ||
8 | function getMagnetURI () { | 8 | function getMagnetURI () { |
9 | // tslint:disable:max-line-length | 9 | // tslint:disable:max-line-length |
10 | return 'magnet:?xs=https%3A%2F%2Fpeertube2.cpy.re%2Fstatic%2Ftorrents%2F2b8dbe74-9548-4f6f-a8da-986aed9e5e45-240.torrent&xt=urn:btih:52bf3729e5859390a8751495196b5674a55c99f3&dn=60fps_small&tr=wss%3A%2F%2Fpeertube2.cpy.re%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fpeertube2.cpy.re%2Ftracker%2Fannounce&ws=https%3A%2F%2Fpeertube2.cpy.re%2Fstatic%2Fwebseed%2F2b8dbe74-9548-4f6f-a8da-986aed9e5e45-240.mp4' | 10 | return 'magnet:?xs=https%3A%2F%2Fpeertube2.cpy.re%2Fstatic%2Ftorrents%2Fb209ca00-c8bb-4b2b-b421-1ede169f3dbc-720.torrent&xt=urn:btih:0f498834733e8057ed5c6f2ee2b4efd8d84a76ee&dn=super+peertube2+video&tr=wss%3A%2F%2Fpeertube2.cpy.re%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fpeertube2.cpy.re%2Ftracker%2Fannounce&ws=https%3A%2F%2Fpeertube2.cpy.re%2Fstatic%2Fwebseed%2Fb209ca00-c8bb-4b2b-b421-1ede169f3dbc-720.mp4' |
11 | } | 11 | } |
12 | 12 | ||
13 | function importVideo (url: string, token: string, attributes: VideoImportCreate) { | 13 | function importVideo (url: string, token: string, attributes: VideoImportCreate) { |
@@ -26,11 +26,15 @@ function importVideo (url: string, token: string, attributes: VideoImportCreate) | |||
26 | }) | 26 | }) |
27 | } | 27 | } |
28 | 28 | ||
29 | function getMyVideoImports (url: string, token: string) { | 29 | function getMyVideoImports (url: string, token: string, sort?: string) { |
30 | const path = '/api/v1/users/me/videos/imports' | 30 | const path = '/api/v1/users/me/videos/imports' |
31 | 31 | ||
32 | const query = {} | ||
33 | if (sort) query['sort'] = sort | ||
34 | |||
32 | return makeGetRequest({ | 35 | return makeGetRequest({ |
33 | url, | 36 | url, |
37 | query, | ||
34 | path, | 38 | path, |
35 | token, | 39 | token, |
36 | statusCodeExpected: 200 | 40 | statusCodeExpected: 200 |