create-import-video-file-job.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /* tslint:disable:no-unused-expression */
  2. import 'mocha'
  3. import * as chai from 'chai'
  4. import { VideoDetails } from '../../../shared/models/videos'
  5. import {
  6. cleanupTests,
  7. doubleFollow,
  8. execCLI,
  9. flushAndRunMultipleServers,
  10. getEnvCli,
  11. getVideo,
  12. getVideosList,
  13. ServerInfo,
  14. setAccessTokensToServers,
  15. uploadVideo
  16. } from '../../../shared/extra-utils'
  17. import { waitJobs } from '../../../shared/extra-utils/server/jobs'
  18. import { VideoFile } from '@shared/models/videos/video-file.model'
  19. const expect = chai.expect
  20. function assertVideoProperties (video: VideoFile, resolution: number, extname: string, size?: number) {
  21. expect(video).to.have.nested.property('resolution.id', resolution)
  22. expect(video).to.have.property('magnetUri').that.includes(`.${extname}`)
  23. expect(video).to.have.property('torrentUrl').that.includes(`-${resolution}.torrent`)
  24. expect(video).to.have.property('fileUrl').that.includes(`.${extname}`)
  25. expect(video).to.have.property('size').that.is.above(0)
  26. if (size) expect(video.size).to.equal(size)
  27. }
  28. describe('Test create import video jobs', function () {
  29. this.timeout(60000)
  30. let servers: ServerInfo[] = []
  31. let video1UUID: string
  32. let video2UUID: string
  33. before(async function () {
  34. this.timeout(90000)
  35. // Run server 2 to have transcoding enabled
  36. servers = await flushAndRunMultipleServers(2)
  37. await setAccessTokensToServers(servers)
  38. await doubleFollow(servers[0], servers[1])
  39. // Upload two videos for our needs
  40. const res1 = await uploadVideo(servers[0].url, servers[0].accessToken, { name: 'video1' })
  41. video1UUID = res1.body.video.uuid
  42. const res2 = await uploadVideo(servers[1].url, servers[1].accessToken, { name: 'video2' })
  43. video2UUID = res2.body.video.uuid
  44. // Transcoding
  45. await waitJobs(servers)
  46. })
  47. it('Should run a import job on video 1 with a lower resolution', async function () {
  48. const env = getEnvCli(servers[0])
  49. await execCLI(`${env} npm run create-import-video-file-job -- -v ${video1UUID} -i server/tests/fixtures/video_short-480.webm`)
  50. await waitJobs(servers)
  51. let magnetUri: string
  52. for (const server of servers) {
  53. const { data: videos } = (await getVideosList(server.url)).body
  54. expect(videos).to.have.lengthOf(2)
  55. const video = videos.find(({ uuid }) => uuid === video1UUID)
  56. const videoDetail: VideoDetails = (await getVideo(server.url, video.uuid)).body
  57. expect(videoDetail.files).to.have.lengthOf(2)
  58. const [originalVideo, transcodedVideo] = videoDetail.files
  59. assertVideoProperties(originalVideo, 720, 'webm', 218910)
  60. assertVideoProperties(transcodedVideo, 480, 'webm', 69217)
  61. if (!magnetUri) magnetUri = transcodedVideo.magnetUri
  62. else expect(transcodedVideo.magnetUri).to.equal(magnetUri)
  63. }
  64. })
  65. it('Should run a import job on video 2 with the same resolution and a different extension', async function () {
  66. const env = getEnvCli(servers[1])
  67. await execCLI(`${env} npm run create-import-video-file-job -- -v ${video2UUID} -i server/tests/fixtures/video_short.ogv`)
  68. await waitJobs(servers)
  69. let magnetUri: string
  70. for (const server of servers) {
  71. const { data: videos } = (await getVideosList(server.url)).body
  72. expect(videos).to.have.lengthOf(2)
  73. const video = videos.find(({ uuid }) => uuid === video2UUID)
  74. const videoDetail: VideoDetails = (await getVideo(server.url, video.uuid)).body
  75. expect(videoDetail.files).to.have.lengthOf(4)
  76. const [originalVideo, transcodedVideo420, transcodedVideo320, transcodedVideo240] = videoDetail.files
  77. assertVideoProperties(originalVideo, 720, 'ogv', 140849)
  78. assertVideoProperties(transcodedVideo420, 480, 'mp4')
  79. assertVideoProperties(transcodedVideo320, 360, 'mp4')
  80. assertVideoProperties(transcodedVideo240, 240, 'mp4')
  81. if (!magnetUri) magnetUri = originalVideo.magnetUri
  82. else expect(originalVideo.magnetUri).to.equal(magnetUri)
  83. }
  84. })
  85. it('Should run a import job on video 2 with the same resolution and the same extension', async function () {
  86. const env = getEnvCli(servers[0])
  87. await execCLI(`${env} npm run create-import-video-file-job -- -v ${video1UUID} -i server/tests/fixtures/video_short2.webm`)
  88. await waitJobs(servers)
  89. let magnetUri: string
  90. for (const server of servers) {
  91. const { data: videos } = (await getVideosList(server.url)).body
  92. expect(videos).to.have.lengthOf(2)
  93. const video = videos.find(({ uuid }) => uuid === video1UUID)
  94. const videoDetail: VideoDetails = (await getVideo(server.url, video.uuid)).body
  95. expect(videoDetail.files).to.have.lengthOf(2)
  96. const [ video720, video480 ] = videoDetail.files
  97. assertVideoProperties(video720, 720, 'webm', 942961)
  98. assertVideoProperties(video480, 480, 'webm', 69217)
  99. if (!magnetUri) magnetUri = video720.magnetUri
  100. else expect(video720.magnetUri).to.equal(magnetUri)
  101. }
  102. })
  103. after(async function () {
  104. await cleanupTests(servers)
  105. })
  106. })