aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tests/cli/update-host.ts
blob: d38bb4331d12a4e1a12c3949200168908a3718f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* tslint:disable:no-unused-expression */

import 'mocha'
import * as chai from 'chai'
import { VideoDetails } from '../../../shared/models/videos'
import { waitJobs } from '../../../shared/utils/server/jobs'
import { addVideoCommentThread } from '../../../shared/utils/videos/video-comments'
import {
  addVideoChannel,
  createUser,
  execCLI,
  flushTests,
  getEnvCli,
  getVideo,
  getVideoChannelsList,
  getVideosList,
  killallServers,
  makeActivityPubGetRequest,
  parseTorrentVideo,
  runServer,
  ServerInfo,
  setAccessTokensToServers,
  uploadVideo
} from '../../../shared/utils'
import { getAccountsList } from '../../../shared/utils/users/accounts'

const expect = chai.expect

describe('Test update host scripts', function () {
  let server: ServerInfo

  before(async function () {
    this.timeout(60000)

    await flushTests()

    const overrideConfig = {
      webserver: {
        port: 9256
      }
    }
    // Run server 2 to have transcoding enabled
    server = await runServer(2, overrideConfig)
    await setAccessTokensToServers([ server ])

    // Upload two videos for our needs
    const videoAttributes = {}
    const resVideo1 = await uploadVideo(server.url, server.accessToken, videoAttributes)
    const video1UUID = resVideo1.body.video.uuid
    await uploadVideo(server.url, server.accessToken, videoAttributes)

    // Create a user
    await createUser(server.url, server.accessToken, 'toto', 'coucou')

    // Create channel
    const videoChannel = {
      name: 'second_channel',
      displayName: 'second video channel',
      description: 'super video channel description'
    }
    await addVideoChannel(server.url, server.accessToken, videoChannel)

    // Create comments
    const text = 'my super first comment'
    await addVideoCommentThread(server.url, server.accessToken, video1UUID, text)

    await waitJobs(server)
  })

  it('Should run update host', async function () {
    this.timeout(30000)

    killallServers([ server ])
    // Run server with standard configuration
    server = await runServer(2)

    const env = getEnvCli(server)
    await execCLI(`${env} npm run update-host`)
  })

  it('Should have updated videos url', async function () {
    const res = await getVideosList(server.url)
    expect(res.body.total).to.equal(2)

    for (const video of res.body.data) {
      const { body } = await makeActivityPubGetRequest(server.url, '/videos/watch/' + video.uuid)

      expect(body.id).to.equal('http://localhost:9002/videos/watch/' + video.uuid)

      const res = await getVideo(server.url, video.uuid)
      const videoDetails: VideoDetails = res.body

      expect(videoDetails.trackerUrls[0]).to.include(server.host)
      expect(videoDetails.streamingPlaylists[0].playlistUrl).to.include(server.host)
      expect(videoDetails.streamingPlaylists[0].segmentsSha256Url).to.include(server.host)
    }
  })

  it('Should have updated video channels url', async function () {
    const res = await getVideoChannelsList(server.url, 0, 5, '-name')
    expect(res.body.total).to.equal(3)

    for (const channel of res.body.data) {
      const { body } = await makeActivityPubGetRequest(server.url, '/video-channels/' + channel.name)

      expect(body.id).to.equal('http://localhost:9002/video-channels/' + channel.name)
    }
  })

  it('Should have updated accounts url', async function () {
    const res = await getAccountsList(server.url)
    expect(res.body.total).to.equal(3)

    for (const account of res.body.data) {
      const usernameWithDomain = account.name
      const { body } = await makeActivityPubGetRequest(server.url, '/accounts/' + usernameWithDomain)

      expect(body.id).to.equal('http://localhost:9002/accounts/' + usernameWithDomain)
    }
  })

  it('Should have updated torrent hosts', async function () {
    this.timeout(30000)

    const res = await getVideosList(server.url)
    const videos = res.body.data
    expect(videos).to.have.lengthOf(2)

    for (const video of videos) {
      const res2 = await getVideo(server.url, video.id)
      const videoDetails: VideoDetails = res2.body

      expect(videoDetails.files).to.have.lengthOf(4)

      for (const file of videoDetails.files) {
        expect(file.magnetUri).to.contain('localhost%3A9002%2Ftracker%2Fsocket')
        expect(file.magnetUri).to.contain('localhost%3A9002%2Fstatic%2Fwebseed%2F')

        const torrent = await parseTorrentVideo(server, videoDetails.uuid, file.resolution.id)
        const announceWS = torrent.announce.find(a => a === 'ws://localhost:9002/tracker/socket')
        expect(announceWS).to.not.be.undefined

        const announceHttp = torrent.announce.find(a => a === 'http://localhost:9002/tracker/announce')
        expect(announceHttp).to.not.be.undefined

        expect(torrent.urlList[0]).to.contain('http://localhost:9002/static/webseed')
      }
    }
  })

  after(async function () {
    killallServers([ server ])
  })
})