]>
Commit | Line | Data |
---|---|---|
0e1dc3e7 C |
1 | /* tslint:disable:no-unused-expression */ |
2 | ||
3 | import 'mocha' | |
4 | import * as chai from 'chai' | |
5 | const expect = chai.expect | |
6 | ||
7 | import { | |
8 | ServerInfo, | |
9 | flushTests, | |
10 | runServer, | |
11 | uploadVideo, | |
12 | quitFriends, | |
13 | getVideosList, | |
14 | wait, | |
15 | setAccessTokensToServers, | |
16 | flushAndRunMultipleServers, | |
17 | killallServers, | |
18 | makeFriends, | |
19 | getFriendsList, | |
20 | quitOneFriend | |
21 | } from '../utils' | |
22 | ||
23 | describe('Test advanced friends', function () { | |
24 | let servers: ServerInfo[] = [] | |
25 | ||
26 | async function makeFriendsWrapper (podNumber: number) { | |
27 | const server = servers[podNumber - 1] | |
53abc4c2 | 28 | return makeFriends(server.url, server.accessToken) |
0e1dc3e7 C |
29 | } |
30 | ||
31 | async function quitFriendsWrapper (podNumber: number) { | |
32 | const server = servers[podNumber - 1] | |
53abc4c2 | 33 | return quitFriends(server.url, server.accessToken) |
0e1dc3e7 C |
34 | } |
35 | ||
36 | async function removeFriendWrapper (podNumber: number, podNumberToRemove: number) { | |
37 | const server = servers[podNumber - 1] | |
38 | const serverToRemove = servers[podNumberToRemove - 1] | |
39 | ||
40 | const res = await getFriendsList(server.url) | |
41 | ||
42 | let friendsList = res.body.data | |
43 | let podToRemove = friendsList.find(friend => (friend.host === serverToRemove.host)) | |
44 | ||
53abc4c2 | 45 | return quitOneFriend(server.url, server.accessToken, podToRemove.id) |
0e1dc3e7 C |
46 | } |
47 | ||
48 | async function getFriendsListWrapper (podNumber: number) { | |
49 | const server = servers[podNumber - 1] | |
53abc4c2 | 50 | return getFriendsList(server.url) |
0e1dc3e7 C |
51 | } |
52 | ||
53 | async function uploadVideoWrapper (podNumber: number) { | |
54 | const videoAttributes = { | |
55 | tags: [ 'tag1', 'tag2' ] | |
56 | } | |
57 | const server = servers[podNumber - 1] | |
58 | ||
53abc4c2 | 59 | return uploadVideo(server.url, server.accessToken, videoAttributes) |
0e1dc3e7 C |
60 | } |
61 | ||
62 | async function getVideosWrapper (podNumber: number) { | |
53abc4c2 | 63 | return getVideosList(servers[podNumber - 1].url) |
0e1dc3e7 C |
64 | } |
65 | ||
66 | // --------------------------------------------------------------- | |
67 | ||
68 | before(async function () { | |
69 | this.timeout(120000) | |
70 | ||
71 | servers = await flushAndRunMultipleServers(6) | |
72 | await setAccessTokensToServers(servers) | |
73 | }) | |
74 | ||
5f04dd2f | 75 | it('Should not make friends with two different groups', async function () { |
0e1dc3e7 C |
76 | this.timeout(20000) |
77 | ||
78 | // Pod 3 makes friend with the first one | |
79 | await makeFriendsWrapper(3) | |
80 | ||
81 | // Pod 4 makes friend with the second one | |
82 | await makeFriendsWrapper(4) | |
83 | ||
5f04dd2f | 84 | // Now if the fifth wants to make friends with the third and the first |
0e1dc3e7 C |
85 | await makeFriendsWrapper(5) |
86 | ||
87 | await wait(11000) | |
88 | ||
89 | // It should have 0 friends | |
90 | const res = await getFriendsListWrapper(5) | |
91 | expect(res.body.data.length).to.equal(0) | |
92 | }) | |
93 | ||
94 | it('Should quit all friends', async function () { | |
95 | this.timeout(10000) | |
96 | ||
97 | await quitFriendsWrapper(1) | |
98 | await quitFriendsWrapper(2) | |
99 | ||
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) | |
104 | } | |
105 | }) | |
106 | ||
5f04dd2f C |
107 | it('Should remove bad pod and new pod should not become friend with it', async function () { |
108 | this.timeout(200000) | |
0e1dc3e7 C |
109 | |
110 | // Pods 1, 2, 3 and 4 become friends | |
111 | await makeFriendsWrapper(2) | |
112 | await makeFriendsWrapper(1) | |
113 | await makeFriendsWrapper(4) | |
114 | ||
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) | |
120 | } | |
121 | ||
5f04dd2f C |
122 | // Wait initial video channel requests |
123 | await wait(11000) | |
124 | ||
0e1dc3e7 C |
125 | // Kill pod 4 |
126 | servers[3].app.kill() | |
127 | ||
128 | // Remove pod 4 from pod 1 and 2 | |
129 | await uploadVideoWrapper(1) | |
130 | await uploadVideoWrapper(2) | |
131 | ||
132 | await wait(11000) | |
133 | ||
134 | await uploadVideoWrapper(1) | |
135 | await uploadVideoWrapper(2) | |
136 | ||
137 | await wait(11000) | |
138 | ||
5f04dd2f C |
139 | await uploadVideoWrapper(1) |
140 | await uploadVideoWrapper(2) | |
141 | ||
142 | await wait(11000) | |
143 | ||
144 | await uploadVideoWrapper(1) | |
145 | await uploadVideoWrapper(2) | |
146 | ||
147 | await wait(11000) | |
148 | ||
0e1dc3e7 C |
149 | serverNumbersToTest = [ 1, 2 ] |
150 | ||
151 | for (const i of serverNumbersToTest) { | |
152 | const res = await getFriendsListWrapper(i) | |
153 | ||
154 | // Pod 4 should not be our friend | |
155 | const friends = res.body.data | |
156 | expect(friends.length).to.equal(2) | |
157 | ||
158 | for (const pod of friends) { | |
159 | expect(pod.host).not.equal(servers[3].host) | |
160 | } | |
161 | } | |
162 | ||
5f04dd2f | 163 | // Rerun server 4 |
0e1dc3e7 C |
164 | const newServer = await runServer(4) |
165 | servers[3].app = newServer.app | |
166 | servers[3].app | |
167 | ||
0e1dc3e7 | 168 | // Pod 4 didn't know pod 1 and 2 removed it |
5f04dd2f | 169 | const res1 = await getFriendsListWrapper(4) |
0e1dc3e7 C |
170 | expect(res1.body.data.length).to.equal(3) |
171 | ||
5f04dd2f C |
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) | |
175 | ||
0e1dc3e7 C |
176 | // Pod 6 asks pod 1, 2 and 3 |
177 | await makeFriendsWrapper(6) | |
178 | ||
179 | await wait(11000) | |
180 | ||
5f04dd2f | 181 | const res3 = await getFriendsListWrapper(6) |
0e1dc3e7 C |
182 | |
183 | // Pod 4 should not be our friend | |
5f04dd2f | 184 | const friends = res3.body.data |
0e1dc3e7 C |
185 | expect(friends.length).to.equal(3) |
186 | for (const pod of friends) { | |
187 | expect(pod.host).not.equal(servers[3].host) | |
188 | } | |
189 | }) | |
190 | ||
5f04dd2f C |
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 | |
0e1dc3e7 C |
196 | it('Should pod 1 quit friends', async function () { |
197 | this.timeout(25000) | |
198 | ||
199 | // Upload a video on server 3 for additional tests | |
200 | await uploadVideoWrapper(3) | |
201 | ||
202 | await wait(15000) | |
203 | ||
5f04dd2f | 204 | // Pod 1 remove friends |
0e1dc3e7 C |
205 | await quitFriendsWrapper(1) |
206 | ||
0e1dc3e7 C |
207 | const res1 = await getVideosWrapper(1) |
208 | const videos1 = res1.body.data | |
209 | expect(videos1).to.be.an('array') | |
5f04dd2f | 210 | expect(videos1.length).to.equal(4) |
0e1dc3e7 C |
211 | |
212 | const res2 = await getVideosWrapper(2) | |
213 | const videos2 = res2.body.data | |
214 | expect(videos2).to.be.an('array') | |
5f04dd2f | 215 | expect(videos2.length).to.equal(5) |
0e1dc3e7 C |
216 | }) |
217 | ||
5f04dd2f C |
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 () { | |
bcd9f81e | 224 | this.timeout(30000) |
0e1dc3e7 C |
225 | |
226 | await makeFriendsWrapper(1) | |
227 | ||
bcd9f81e | 228 | await wait(22000) |
0e1dc3e7 C |
229 | |
230 | const res = await getVideosWrapper(1) | |
231 | const videos = res.body.data | |
232 | expect(videos).to.be.an('array') | |
5f04dd2f | 233 | expect(videos.length).to.equal(9) |
0e1dc3e7 C |
234 | }) |
235 | ||
5f04dd2f C |
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 () { | |
0e1dc3e7 C |
242 | this.timeout(30000) |
243 | ||
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) | |
249 | ||
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) | |
257 | } | |
258 | ||
259 | await removeFriendWrapper(6, 1) | |
260 | await removeFriendWrapper(6, 2) | |
261 | ||
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) | |
268 | ||
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) | |
276 | } | |
277 | ||
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) | |
283 | }) | |
284 | ||
285 | after(async function () { | |
286 | killallServers(servers) | |
287 | ||
288 | if (this['ok']) { | |
289 | await flushTests() | |
290 | } | |
291 | }) | |
292 | }) |