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 not make friends with two different groups', 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 and 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 remove bad pod and new pod should not become friend with it', 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)
122 // Wait initial video channel requests
126 servers[3].app.kill()
128 // Remove pod 4 from pod 1 and 2
129 await uploadVideoWrapper(1)
130 await uploadVideoWrapper(2)
134 await uploadVideoWrapper(1)
135 await uploadVideoWrapper(2)
139 await uploadVideoWrapper(1)
140 await uploadVideoWrapper(2)
144 await uploadVideoWrapper(1)
145 await uploadVideoWrapper(2)
149 serverNumbersToTest = [ 1, 2 ]
151 for (const i of serverNumbersToTest) {
152 const res = await getFriendsListWrapper(i)
154 // Pod 4 should not be our friend
155 const friends = res.body.data
156 expect(friends.length).to.equal(2)
158 for (const pod of friends) {
159 expect(pod.host).not.equal(servers[3].host)
164 const newServer = await runServer(4)
165 servers[3].app = newServer.app
168 // Pod 4 didn't know pod 1 and 2 removed it
169 const res1 = await getFriendsListWrapper(4)
170 expect(res1.body.data.length).to.equal(3)
172 // Pod 3 didn't upload video, it's still friend with pod 3
173 const res2 = await getFriendsListWrapper(3)
174 expect(res2.body.data.length).to.equal(3)
176 // Pod 6 asks pod 1, 2 and 3
177 await makeFriendsWrapper(6)
181 const res3 = await getFriendsListWrapper(6)
183 // Pod 4 should not be our friend
184 const friends = res3.body.data
185 expect(friends.length).to.equal(3)
186 for (const pod of friends) {
187 expect(pod.host).not.equal(servers[3].host)
191 // Pod 1 is friend with : 2 3 6
192 // Pod 2 is friend with : 1 3 6
193 // Pod 3 is friend with : 1 2 4 6
194 // Pod 4 is friend with : 1 2 3
195 // Pod 6 is friend with : 1 2 3
196 it('Should pod 1 quit friends', async function () {
199 // Upload a video on server 3 for additional tests
200 await uploadVideoWrapper(3)
204 // Pod 1 remove friends
205 await quitFriendsWrapper(1)
207 const res1 = await getVideosWrapper(1)
208 const videos1 = res1.body.data
209 expect(videos1).to.be.an('array')
210 expect(videos1.length).to.equal(4)
212 const res2 = await getVideosWrapper(2)
213 const videos2 = res2.body.data
214 expect(videos2).to.be.an('array')
215 expect(videos2.length).to.equal(5)
218 // Pod 1 is friend with nothing
219 // Pod 2 is friend with : 3 6
220 // Pod 3 is friend with : 2 4 6
221 // Pod 4 is friend with : 2 3
222 // Pod 6 is friend with : 2 3
223 it('Should make friends between pod 1, 2, 3 and 6 and exchange their videos', async function () {
226 await makeFriendsWrapper(1)
230 const res = await getVideosWrapper(1)
231 const videos = res.body.data
232 expect(videos).to.be.an('array')
233 expect(videos.length).to.equal(9)
236 // Pod 1 is friend with : 2 3 6
237 // Pod 2 is friend with : 1 3 6
238 // Pod 3 is friend with : 1 2 4 6
239 // Pod 4 is friend with : 2 3
240 // Pod 6 is friend with : 1 2 3
241 it('Should allow pod 6 to quit pod 1, 2 and 3 and be friend with pod 3', async function () {
244 // Pod 3 should have 4 friends
245 const res1 = await getFriendsListWrapper(3)
246 const friendsList1 = res1.body.data
247 expect(friendsList1).to.be.an('array')
248 expect(friendsList1.length).to.equal(4)
250 // Pod 1, 2, 6 should have 3 friends each
251 let serverNumbersToTest = [ 1, 2, 6 ]
252 for (const i of serverNumbersToTest) {
253 const res = await getFriendsListWrapper(i)
254 const friendsList = res.body.data
255 expect(friendsList).to.be.an('array')
256 expect(friendsList.length).to.equal(3)
259 await removeFriendWrapper(6, 1)
260 await removeFriendWrapper(6, 2)
262 // Pod 6 should now have only 1 friend (and it should be Pod 3)
263 const res2 = await getFriendsListWrapper(6)
264 const friendsList2 = res2.body.data
265 expect(friendsList2).to.be.an('array')
266 expect(friendsList2.length).to.equal(1)
267 expect(friendsList2[0].host).to.equal(servers[2].host)
269 // Pod 1 & 2 should not know friend 6 anymore
270 serverNumbersToTest = [ 1, 2 ]
271 for (const i of serverNumbersToTest) {
272 const res = await getFriendsListWrapper(i)
273 const friendsList = res.body.data
274 expect(friendsList).to.be.an('array')
275 expect(friendsList.length).to.equal(2)
278 // Pod 3 should know every pod
279 const res3 = await getFriendsListWrapper(3)
280 const friendsList3 = res3.body.data
281 expect(friendsList3).to.be.an('array')
282 expect(friendsList3.length).to.equal(4)
285 after(async function () {
286 killallServers(servers)