aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/tests/api/requests.js
blob: 8762163af508d6b60ae010db2c8e45b26864a2e7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

                                          












                                                
                                                                                                                 



                                           


                              
 
                                                                                      







































                                                                               






                                                                           




            
                                                               








                                                 


                                                      
 


                                                                     
 


                


      









                                     
/* eslint-disable no-unused-expressions */

'use strict'

const chai = require('chai')
const each = require('async/each')
const expect = chai.expect
const request = require('supertest')

const loginUtils = require('../utils/login')
const podsUtils = require('../utils/pods')
const serversUtils = require('../utils/servers')
const videosUtils = require('../utils/videos')

describe('Test requests stats', function () {
  const requestSchedulerNames = [ 'requestScheduler', 'requestVideoQaduScheduler', 'requestVideoEventScheduler' ]
  const path = '/api/v1/requests/stats'
  let servers = []

  function uploadVideo (server, callback) {
    const videoAttributes = {
      tags: [ 'tag1', 'tag2' ]
    }

    videosUtils.uploadVideo(server.url, server.accessToken, videoAttributes, callback)
  }

  function getRequestsStats (server, callback) {
    request(server.url)
      .get(path)
      .set('Accept', 'application/json')
      .set('Authorization', 'Bearer ' + server.accessToken)
      .expect(200)
      .end(callback)
  }

  // ---------------------------------------------------------------

  before(function (done) {
    this.timeout(20000)
    serversUtils.flushAndRunMultipleServers(2, function (serversRun, urlsRun) {
      servers = serversRun

      each(servers, function (server, callbackEach) {
        loginUtils.loginAndGetAccessToken(server, function (err, accessToken) {
          if (err) return callbackEach(err)

          server.accessToken = accessToken
          callbackEach()
        })
      }, function (err) {
        if (err) throw err

        const server1 = servers[0]
        podsUtils.makeFriends(server1.url, server1.accessToken, done)
      })
    })
  })

  it('Should have a correct timer', function (done) {
    const server = servers[0]

    getRequestsStats(server, function (err, res) {
      if (err) throw err

      const requestSchedulers = res.body
      for (const requestSchedulerName of requestSchedulerNames) {
        const requestScheduler = requestSchedulers[requestSchedulerName]

        expect(requestScheduler.remainingMilliSeconds).to.be.at.least(0)
        expect(requestScheduler.remainingMilliSeconds).to.be.at.most(10000)
      }

      done()
    })
  })

  it('Should have the correct total request', function (done) {
    this.timeout(15000)

    const server = servers[0]
    // Ensure the requests of pod 1 won't be made
    servers[1].app.kill()

    uploadVideo(server, function (err) {
      if (err) throw err

      setTimeout(function () {
        getRequestsStats(server, function (err, res) {
          if (err) throw err

          const requestSchedulers = res.body
          const requestScheduler = requestSchedulers.requestScheduler
          expect(requestScheduler.totalRequests).to.equal(1)

          done()
        })
      }, 1000)
    })
  })

  after(function (done) {
    process.kill(-servers[0].app.pid)

    if (this.ok) {
      serversUtils.flushTests(done)
    } else {
      done()
    }
  })
})