aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/api/friendsAdvanced.js
blob: 7a0940647308f284399d3870c886145ed8e1499d (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
;(function () {
  'use strict'

  var chai = require('chai')
  var expect = chai.expect

  var utils = require('./utils')

  describe('Test advanced friends', function () {
    var apps = []
    var urls = []

    function makeFriend (pod_number, callback) {
      return utils.makeFriend(urls[pod_number - 1], callback)
    }

    function getFriendsList (pod_number, end) {
      return utils.getFriendsList(urls[pod_number - 1], end)
    }

    function uploadVideo (pod_number, callback) {
      var name = 'my super video'
      var description = 'my super description'
      var fixture = 'video_short.webm'

      return utils.uploadVideo(urls[pod_number - 1], name, description, fixture, callback)
    }

    beforeEach(function (done) {
      this.timeout(30000)
      utils.runMultipleServers(6, function (apps_run, urls_run) {
        apps = apps_run
        urls = urls_run
        done()
      })
    })

    afterEach(function (done) {
      apps.forEach(function (app) {
        process.kill(-app.pid)
      })

      if (this.ok) {
        utils.flushTests(function () {
          done()
        })
      } else {
        done()
      }
    })

    it('Should make friends with two pod each in a different group', function (done) {
      this.timeout(10000)

      // Pod 3 makes friend with the first one
      makeFriend(3, function () {
        // Pod 4 makes friend with the second one
        makeFriend(4, function () {
          // Now if the fifth wants to make friends with the third et the first
          makeFriend(5, function () {
            // It should have 0 friends
            getFriendsList(5, function (err, res) {
              if (err) throw err

              expect(res.body.length).to.equal(0)

              done()
            })
          })
        })
      })
    })

    it('Should make friends with the pods 1, 2, 3', function (done) {
      this.timeout(150000)

      // Pods 1, 2, 3 and 4 become friends (yes this is beautiful)
      makeFriend(2, function () {
        makeFriend(1, function () {
          makeFriend(4, function () {
            // Kill the server 4
            apps[3].kill()

            // Expulse pod 4 from pod 1 and 2
            uploadVideo(1, function () {
              setTimeout(function () {
                uploadVideo(1, function () {
                  setTimeout(function () {
                    uploadVideo(2, function () {
                      setTimeout(function () {
                        uploadVideo(2, function () {
                          setTimeout(function () {
                            // Rerun server 4
                            utils.runServer(4, function (app, url) {
                              apps[3] = app
                              getFriendsList(4, function (err, res) {
                                if (err) throw err
                                // Pod 4 didn't know pod 1 and 2 removed it
                                expect(res.body.length).to.equal(3)

                                // Pod 6 ask pod 1, 2 and 3
                                makeFriend(6, function () {
                                  getFriendsList(6, function (err, res) {
                                    if (err) throw err

                                    // Pod 4 should not be our friend
                                    var result = res.body
                                    expect(result.length).to.equal(3)
                                    for (var pod of result) {
                                      expect(pod.url).not.equal(urls[3])
                                    }

                                    done()
                                  })
                                })
                              })
                            })
                          }, 11000)
                        })
                      }, 11000)
                    })
                  }, 11000)
                })
              }, 11000)
            })
          })
        })
      })
    })
  })
})()