1 /* tslint:disable:no-unused-expression */
4 import * as chai from 'chai'
5 const expect = chai.expect
15 setAccessTokensToServers,
16 flushAndRunMultipleServers,
23 describe('Test advanced friends', function () {
24 let servers: ServerInfo[] = []
26 async function makeFriendsWrapper (podNumber: number) {
27 const server = servers[podNumber - 1]
28 return await makeFriends(server.url, server.accessToken)
31 async function quitFriendsWrapper (podNumber: number) {
32 const server = servers[podNumber - 1]
33 return await quitFriends(server.url, server.accessToken)
36 async function removeFriendWrapper (podNumber: number, podNumberToRemove: number) {
37 const server = servers[podNumber - 1]
38 const serverToRemove = servers[podNumberToRemove - 1]
40 const res = await getFriendsList(server.url)
42 let friendsList = res.body.data
43 let podToRemove = friendsList.find(friend => (friend.host === serverToRemove.host))
45 return await quitOneFriend(server.url, server.accessToken, podToRemove.id)
48 async function getFriendsListWrapper (podNumber: number) {
49 const server = servers[podNumber - 1]
50 return await getFriendsList(server.url)
53 async function uploadVideoWrapper (podNumber: number) {
54 const videoAttributes = {
55 tags: [ 'tag1', 'tag2' ]
57 const server = servers[podNumber - 1]
59 return await uploadVideo(server.url, server.accessToken, videoAttributes)
62 async function getVideosWrapper (podNumber: number) {
63 return await getVideosList(servers[podNumber - 1].url)
66 // ---------------------------------------------------------------
68 before(async function () {
71 servers = await flushAndRunMultipleServers(6)
72 await setAccessTokensToServers(servers)
75 it('Should make friends with two pod each in a different group', async function () {
78 // Pod 3 makes friend with the first one
79 await makeFriendsWrapper(3)
81 // Pod 4 makes friend with the second one
82 await makeFriendsWrapper(4)
84 // Now if the fifth wants to make friends with the third et the first
85 await makeFriendsWrapper(5)
89 // It should have 0 friends
90 const res = await getFriendsListWrapper(5)
91 expect(res.body.data.length).to.equal(0)
94 it('Should quit all friends', async function () {
97 await quitFriendsWrapper(1)
98 await quitFriendsWrapper(2)
100 const serverNumbersToTest = [ 1, 2, 3, 4, 5, 6 ]
101 for (const i of serverNumbersToTest) {
102 const res = await getFriendsListWrapper(i)
103 expect(res.body.data.length).to.equal(0)
107 it('Should make friends with the pods 1, 2, 3', async function () {
110 // Pods 1, 2, 3 and 4 become friends
111 await makeFriendsWrapper(2)
112 await makeFriendsWrapper(1)
113 await makeFriendsWrapper(4)
115 // Check the pods 1, 2, 3 and 4 are friends
116 let serverNumbersToTest = [ 1, 2, 3, 4 ]
117 for (const i of serverNumbersToTest) {
118 const res = await getFriendsListWrapper(i)
119 expect(res.body.data.length).to.equal(3)
123 servers[3].app.kill()
125 // Remove pod 4 from pod 1 and 2
126 await uploadVideoWrapper(1)
127 await uploadVideoWrapper(2)
131 await uploadVideoWrapper(1)
132 await uploadVideoWrapper(2)
136 serverNumbersToTest = [ 1, 2 ]
138 for (const i of serverNumbersToTest) {
139 const res = await getFriendsListWrapper(i)
141 // Pod 4 should not be our friend
142 const friends = res.body.data
143 expect(friends.length).to.equal(2)
145 for (const pod of friends) {
146 expect(pod.host).not.equal(servers[3].host)
151 const newServer = await runServer(4)
152 servers[3].app = newServer.app
155 const res1 = await getFriendsListWrapper(4)
157 // Pod 4 didn't know pod 1 and 2 removed it
158 expect(res1.body.data.length).to.equal(3)
160 // Pod 6 asks pod 1, 2 and 3
161 await makeFriendsWrapper(6)
165 const res2 = await getFriendsListWrapper(6)
167 // Pod 4 should not be our friend
168 const friends = res2.body.data
169 expect(friends.length).to.equal(3)
170 for (const pod of friends) {
171 expect(pod.host).not.equal(servers[3].host)
175 it('Should pod 1 quit friends', async function () {
178 // Upload a video on server 3 for additional tests
179 await uploadVideoWrapper(3)
183 await quitFriendsWrapper(1)
185 // Remove pod 1 from pod 2
186 const res1 = await getVideosWrapper(1)
187 const videos1 = res1.body.data
188 expect(videos1).to.be.an('array')
189 expect(videos1.length).to.equal(2)
191 const res2 = await getVideosWrapper(2)
192 const videos2 = res2.body.data
193 expect(videos2).to.be.an('array')
194 expect(videos2.length).to.equal(3)
197 it('Should make friends between pod 1 and 2 and exchange their videos', async function () {
200 await makeFriendsWrapper(1)
204 const res = await getVideosWrapper(1)
205 const videos = res.body.data
206 expect(videos).to.be.an('array')
207 expect(videos.length).to.equal(5)
210 it('Should allow pod 6 to quit pod 1 & 2 and be friend with pod 3', async function () {
213 // Pod 3 should have 4 friends
214 const res1 = await getFriendsListWrapper(3)
215 const friendsList1 = res1.body.data
216 expect(friendsList1).to.be.an('array')
217 expect(friendsList1.length).to.equal(4)
219 // Pod 1, 2, 6 should have 3 friends each
220 let serverNumbersToTest = [ 1, 2, 6 ]
221 for (const i of serverNumbersToTest) {
222 const res = await getFriendsListWrapper(i)
223 const friendsList = res.body.data
224 expect(friendsList).to.be.an('array')
225 expect(friendsList.length).to.equal(3)
228 await removeFriendWrapper(6, 1)
229 await removeFriendWrapper(6, 2)
231 // Pod 6 should now have only 1 friend (and it should be Pod 3)
232 const res2 = await getFriendsListWrapper(6)
233 const friendsList2 = res2.body.data
234 expect(friendsList2).to.be.an('array')
235 expect(friendsList2.length).to.equal(1)
236 expect(friendsList2[0].host).to.equal(servers[2].host)
238 // Pod 1 & 2 should not know friend 6 anymore
239 serverNumbersToTest = [ 1, 2 ]
240 for (const i of serverNumbersToTest) {
241 const res = await getFriendsListWrapper(i)
242 const friendsList = res.body.data
243 expect(friendsList).to.be.an('array')
244 expect(friendsList.length).to.equal(2)
247 // Pod 3 should know every pod
248 const res3 = await getFriendsListWrapper(3)
249 const friendsList3 = res3.body.data
250 expect(friendsList3).to.be.an('array')
251 expect(friendsList3.length).to.equal(4)
254 after(async function () {
255 killallServers(servers)