From 3bcb78b3aff565996ee0e2aa96bce7f1bdd6d66a Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 24 Nov 2015 08:33:59 +0100 Subject: Make the network auto sufficient (eject bad pods with scores) --- test/api/friends.js | 149 ------------------------------------------ test/api/friendsAdvanced.js | 154 ++++++++++++++++++++++++++++++++++++++++++++ test/api/friendsBasic.js | 149 ++++++++++++++++++++++++++++++++++++++++++ test/utils.js | 4 +- 4 files changed, 305 insertions(+), 151 deletions(-) delete mode 100644 test/api/friends.js create mode 100644 test/api/friendsAdvanced.js create mode 100644 test/api/friendsBasic.js (limited to 'test') diff --git a/test/api/friends.js b/test/api/friends.js deleted file mode 100644 index 845ccd1a8..000000000 --- a/test/api/friends.js +++ /dev/null @@ -1,149 +0,0 @@ -;(function () { - 'use strict' - - var request = require('supertest') - var chai = require('chai') - var expect = chai.expect - var async = require('async') - - var utils = require('../utils') - - function getFriendsList (url, end) { - var path = '/api/v1/pods/' - - request(url) - .get(path) - .set('Accept', 'application/json') - .expect(200) - .expect('Content-Type', /json/) - .end(end) - } - - describe('Test friends', function () { - var apps = [] - var urls = [] - - before(function (done) { - this.timeout(20000) - utils.runMultipleServers(3, function (apps_run, urls_run) { - apps = apps_run - urls = urls_run - done() - }) - }) - - it('Should not have friends', function (done) { - async.each(urls, function (url, callback) { - getFriendsList(url, function (err, res) { - if (err) throw err - - var result = res.body - expect(result).to.be.an('array') - expect(result.length).to.equal(0) - callback() - }) - }, function (err) { - if (err) throw err - - done() - }) - }) - - it('Should make friends', function (done) { - this.timeout(10000) - - function testMadeFriends (urls, url_to_test, callback) { - var friends = [] - for (var i = 0; i < urls.length; i++) { - if (urls[i] === url_to_test) continue - friends.push(urls[i]) - } - - getFriendsList(url_to_test, function (err, res) { - if (err) throw err - - var result = res.body - var result_urls = [ result[0].url, result[1].url ] - expect(result).to.be.an('array') - expect(result.length).to.equal(2) - expect(result_urls[0]).to.not.equal(result_urls[1]) - - var error_string = 'Friends url do not correspond for ' + url_to_test - expect(friends).to.contain(result_urls[0], error_string) - expect(friends).to.contain(result_urls[1], error_string) - callback() - }) - } - - var path = '/api/v1/pods/makefriends' - - // The second pod make friend with the third - request(urls[1]) - .get(path) - .set('Accept', 'application/json') - .expect(204) - .end(function (err, res) { - if (err) throw err - - // Wait for the request between pods - setTimeout(function () { - // The second pod should have the third as a friend - getFriendsList(urls[1], function (err, res) { - if (err) throw err - - var result = res.body - expect(result).to.be.an('array') - expect(result.length).to.equal(1) - expect(result[0].url).to.be.equal(urls[2]) - - // Same here, the third pod should have the second pod as a friend - getFriendsList(urls[2], function (err, res) { - if (err) throw err - - var result = res.body - expect(result).to.be.an('array') - expect(result.length).to.equal(1) - expect(result[0].url).to.be.equal(urls[1]) - - // Finally the first pod make friend with the second pod - request(urls[0]) - .get(path) - .set('Accept', 'application/json') - .expect(204) - .end(function (err, res) { - if (err) throw err - - setTimeout(function () { - // Now each pod should be friend with the other ones - async.each(urls, function (url, callback) { - testMadeFriends(urls, url, callback) - }, function (err) { - if (err) throw err - done() - }) - }, 1000) - }) - }) - }) - }, 1000) - }) - }) - - // TODO - it('Should not be able to make friends again') - - after(function (done) { - apps.forEach(function (app) { - process.kill(-app.pid) - }) - - if (this.ok) { - utils.flushTests(function () { - done() - }) - } else { - done() - } - }) - }) -})() diff --git a/test/api/friendsAdvanced.js b/test/api/friendsAdvanced.js new file mode 100644 index 000000000..ccddac4dc --- /dev/null +++ b/test/api/friendsAdvanced.js @@ -0,0 +1,154 @@ +;(function () { + 'use strict' + + var request = require('supertest') + var chai = require('chai') + var expect = chai.expect + + var utils = require('../utils') + + describe('Test advanced friends', function () { + var path = '/api/v1/pods/makefriends' + var apps = [] + var urls = [] + + function makeFriend (pod_number, callback) { + // The first pod make friend with the third + request(urls[pod_number - 1]) + .get(path) + .set('Accept', 'application/json') + .expect(204) + .end(function (err, res) { + if (err) throw err + + // Wait for the request between pods + setTimeout(function () { + callback() + }, 1000) + }) + } + + function getFriendsList (pod_number, end) { + var path = '/api/v1/pods/' + + request(urls[pod_number - 1]) + .get(path) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) + } + + function uploadVideo (pod_number, callback) { + var path = '/api/v1/videos' + + request(urls[pod_number - 1]) + .post(path) + .set('Accept', 'application/json') + .field('name', 'my super video') + .field('description', 'my super description') + .attach('input_video', __dirname + '/../fixtures/video_short.webm') + .expect(201) + .end(function (err) { + if (err) throw err + + // Wait for the retry requests + setTimeout(callback, 10000) + }) + } + + 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(100000) + + // Pods 1, 2, 3 and 4 become friends + 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 () { + uploadVideo(1, function () { + uploadVideo(2, function () { + uploadVideo(2, 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() + }) + }) + }) + }) + }) + }) + }) + }) + }) + }) + }) + }) + }) +})() diff --git a/test/api/friendsBasic.js b/test/api/friendsBasic.js new file mode 100644 index 000000000..40ed34199 --- /dev/null +++ b/test/api/friendsBasic.js @@ -0,0 +1,149 @@ +;(function () { + 'use strict' + + var request = require('supertest') + var chai = require('chai') + var expect = chai.expect + var async = require('async') + + var utils = require('../utils') + + function getFriendsList (url, end) { + var path = '/api/v1/pods/' + + request(url) + .get(path) + .set('Accept', 'application/json') + .expect(200) + .expect('Content-Type', /json/) + .end(end) + } + + describe('Test basic friends', function () { + var apps = [] + var urls = [] + + before(function (done) { + this.timeout(20000) + utils.runMultipleServers(3, function (apps_run, urls_run) { + apps = apps_run + urls = urls_run + done() + }) + }) + + it('Should not have friends', function (done) { + async.each(urls, function (url, callback) { + getFriendsList(url, function (err, res) { + if (err) throw err + + var result = res.body + expect(result).to.be.an('array') + expect(result.length).to.equal(0) + callback() + }) + }, function (err) { + if (err) throw err + + done() + }) + }) + + it('Should make friends', function (done) { + this.timeout(10000) + + function testMadeFriends (urls, url_to_test, callback) { + var friends = [] + for (var i = 0; i < urls.length; i++) { + if (urls[i] === url_to_test) continue + friends.push(urls[i]) + } + + getFriendsList(url_to_test, function (err, res) { + if (err) throw err + + var result = res.body + var result_urls = [ result[0].url, result[1].url ] + expect(result).to.be.an('array') + expect(result.length).to.equal(2) + expect(result_urls[0]).to.not.equal(result_urls[1]) + + var error_string = 'Friends url do not correspond for ' + url_to_test + expect(friends).to.contain(result_urls[0], error_string) + expect(friends).to.contain(result_urls[1], error_string) + callback() + }) + } + + var path = '/api/v1/pods/makefriends' + + // The second pod make friend with the third + request(urls[1]) + .get(path) + .set('Accept', 'application/json') + .expect(204) + .end(function (err, res) { + if (err) throw err + + // Wait for the request between pods + setTimeout(function () { + // The second pod should have the third as a friend + getFriendsList(urls[1], function (err, res) { + if (err) throw err + + var result = res.body + expect(result).to.be.an('array') + expect(result.length).to.equal(1) + expect(result[0].url).to.be.equal(urls[2]) + + // Same here, the third pod should have the second pod as a friend + getFriendsList(urls[2], function (err, res) { + if (err) throw err + + var result = res.body + expect(result).to.be.an('array') + expect(result.length).to.equal(1) + expect(result[0].url).to.be.equal(urls[1]) + + // Finally the first pod make friend with the second pod + request(urls[0]) + .get(path) + .set('Accept', 'application/json') + .expect(204) + .end(function (err, res) { + if (err) throw err + + setTimeout(function () { + // Now each pod should be friend with the other ones + async.each(urls, function (url, callback) { + testMadeFriends(urls, url, callback) + }, function (err) { + if (err) throw err + done() + }) + }, 1000) + }) + }) + }) + }, 1000) + }) + }) + + // TODO + it('Should not be able to make friends again') + + after(function (done) { + apps.forEach(function (app) { + process.kill(-app.pid) + }) + + if (this.ok) { + utils.flushTests(function () { + done() + }) + } else { + done() + } + }) + }) +})() diff --git a/test/utils.js b/test/utils.js index 69f43d731..af3e8665d 100644 --- a/test/utils.js +++ b/test/utils.js @@ -74,8 +74,8 @@ } module.exports = { + flushTests: flushTests, runMultipleServers: runMultipleServers, - runServer: runServer, - flushTests: flushTests + runServer: runServer } })() -- cgit v1.2.3