220 lines
6.3 KiB
TypeScript
220 lines
6.3 KiB
TypeScript
/* tslint:disable:no-unused-expression */
|
|
|
|
import 'mocha'
|
|
import * as chai from 'chai'
|
|
const expect = chai.expect
|
|
|
|
import {
|
|
ServerInfo,
|
|
flushTests,
|
|
quitFriends,
|
|
wait,
|
|
setAccessTokensToServers,
|
|
flushAndRunMultipleServers,
|
|
killallServers,
|
|
makeFriends,
|
|
getFriendsList,
|
|
dateIsValid,
|
|
quitOneFriend,
|
|
getPodsListPaginationAndSort
|
|
} from '../utils'
|
|
|
|
describe('Test basic friends', function () {
|
|
let servers = []
|
|
|
|
function makeFriendsWrapper (podNumber: number) {
|
|
const server = servers[podNumber - 1]
|
|
return makeFriends(server.url, server.accessToken)
|
|
}
|
|
|
|
async function testMadeFriends (servers: ServerInfo[], serverToTest: ServerInfo) {
|
|
const friends = []
|
|
for (let i = 0; i < servers.length; i++) {
|
|
if (servers[i].url === serverToTest.url) continue
|
|
friends.push(servers[i].host)
|
|
}
|
|
|
|
const res = await getFriendsList(serverToTest.url)
|
|
|
|
const result = res.body.data
|
|
expect(result).to.be.an('array')
|
|
expect(result.length).to.equal(2)
|
|
|
|
const resultHosts = [ result[0].host, result[1].host ]
|
|
expect(resultHosts[0]).to.not.equal(resultHosts[1])
|
|
|
|
const errorString = 'Friends host do not correspond for ' + serverToTest.host
|
|
expect(friends).to.contain(resultHosts[0], errorString)
|
|
expect(friends).to.contain(resultHosts[1], errorString)
|
|
}
|
|
|
|
// ---------------------------------------------------------------
|
|
|
|
before(async function () {
|
|
this.timeout(120000)
|
|
|
|
servers = await flushAndRunMultipleServers(3)
|
|
|
|
await setAccessTokensToServers(servers)
|
|
})
|
|
|
|
it('Should not have friends', async function () {
|
|
for (const server of servers) {
|
|
const res = await getFriendsList(server.url)
|
|
|
|
const result = res.body.data
|
|
expect(result).to.be.an('array')
|
|
expect(result.length).to.equal(0)
|
|
}
|
|
})
|
|
|
|
it('Should make friends', async function () {
|
|
this.timeout(120000)
|
|
|
|
// The second pod make friend with the third
|
|
await makeFriendsWrapper(2)
|
|
|
|
// Wait for the request between pods
|
|
await wait(11000)
|
|
|
|
// The second pod should have the third as a friend
|
|
const res1 = await getFriendsList(servers[1].url)
|
|
|
|
const friends = res1.body.data
|
|
expect(friends).to.be.an('array')
|
|
expect(friends.length).to.equal(1)
|
|
|
|
const pod1 = friends[0]
|
|
expect(pod1.host).to.equal(servers[2].host)
|
|
expect(pod1.email).to.equal('admin3@example.com')
|
|
expect(pod1.score).to.be.at.least(20)
|
|
expect(dateIsValid(pod1.createdAt)).to.be.true
|
|
|
|
// Same here, the third pod should have the second pod as a friend
|
|
const res2 = await getFriendsList(servers[2].url)
|
|
const result = res2.body.data
|
|
expect(result).to.be.an('array')
|
|
expect(result.length).to.equal(1)
|
|
|
|
const pod2 = result[0]
|
|
expect(pod2.host).to.equal(servers[1].host)
|
|
expect(pod2.email).to.equal('admin2@example.com')
|
|
expect(pod2.score).to.be.at.least(20)
|
|
expect(dateIsValid(pod2.createdAt)).to.be.true
|
|
|
|
// Finally the first pod make friend with the second pod
|
|
await makeFriendsWrapper(1)
|
|
|
|
// Wait for the request between pods
|
|
await wait(11000)
|
|
|
|
// Now each pod should be friend with the other ones
|
|
for (const server of servers) {
|
|
await testMadeFriends(servers, server)
|
|
}
|
|
})
|
|
|
|
it('Should not be allowed to make friend again', async function () {
|
|
this.timeout(10000)
|
|
|
|
const server = servers[1]
|
|
await makeFriends(server.url, server.accessToken, 409)
|
|
})
|
|
|
|
it('Should list friends correctly', async function () {
|
|
const start = 1
|
|
const count = 1
|
|
const sort = '-host'
|
|
|
|
const res = await getPodsListPaginationAndSort(servers[0].url, start, count, sort)
|
|
expect(res.body.total).to.equal(2)
|
|
expect(res.body.data).to.have.lengthOf(1)
|
|
|
|
const pod = res.body.data[0]
|
|
expect(pod.host).to.equal('localhost:9002')
|
|
expect(pod.email).to.equal('admin2@example.com')
|
|
expect(pod.score).to.be.at.least(20)
|
|
expect(dateIsValid(pod.createdAt)).to.be.true
|
|
})
|
|
|
|
it('Should quit friends of pod 2', async function () {
|
|
this.timeout(10000)
|
|
|
|
// Pod 1 quit friends
|
|
await quitFriends(servers[1].url, servers[1].accessToken)
|
|
|
|
// Pod 1 should not have friends anymore
|
|
const res = await getFriendsList(servers[1].url)
|
|
const friends = res.body.data
|
|
expect(friends).to.be.an('array')
|
|
expect(friends).to.have.lengthOf(0)
|
|
|
|
// Other pods shouldn't have pod 1 too
|
|
const serversToTest = [ servers[0].url, servers[2].url ]
|
|
for (const url of serversToTest) {
|
|
const res = await getFriendsList(url)
|
|
const friends = res.body.data
|
|
|
|
expect(friends).to.be.an('array')
|
|
expect(friends.length).to.equal(1)
|
|
expect(friends[0].host).not.to.be.equal(servers[1].host)
|
|
}
|
|
})
|
|
|
|
it('Should allow pod 2 to make friend again', async function () {
|
|
this.timeout(120000)
|
|
|
|
const server = servers[1]
|
|
await makeFriends(server.url, server.accessToken)
|
|
await wait(11000)
|
|
|
|
for (const server of servers) {
|
|
await testMadeFriends(servers, server)
|
|
}
|
|
})
|
|
|
|
it('Should allow pod 1 to quit only pod 2', async function () {
|
|
// Pod 1 quits pod 2
|
|
const server = servers[0]
|
|
|
|
// Get pod 2 id so we can query it
|
|
const res1 = await getFriendsList(server.url)
|
|
const friends1 = res1.body.data
|
|
let pod1 = friends1.find(friend => (friend.host === servers[1].host))
|
|
|
|
// Remove it from the friends list
|
|
await quitOneFriend(server.url, server.accessToken, pod1.id)
|
|
|
|
// Pod 1 should have only pod 3 in its friends list
|
|
const res2 = await getFriendsList(servers[0].url)
|
|
const friends2 = res2.body.data
|
|
expect(friends2).to.be.an('array')
|
|
expect(friends2.length).to.equal(1)
|
|
|
|
const pod2 = friends2[0]
|
|
expect(pod2.host).to.equal(servers[2].host)
|
|
|
|
// Pod 2 should have only pod 3 in its friends list
|
|
const res3 = await getFriendsList(servers[1].url)
|
|
const friends3 = res3.body.data
|
|
expect(friends3).to.be.an('array')
|
|
expect(friends3.length).to.equal(1)
|
|
|
|
const pod = friends3[0]
|
|
expect(pod.host).to.equal(servers[2].host)
|
|
|
|
// Pod 3 should have both pods in its friends list
|
|
const res4 = await getFriendsList(servers[2].url)
|
|
const friends4 = res4.body.data
|
|
expect(friends4).to.be.an('array')
|
|
expect(friends4.length).to.equal(2)
|
|
})
|
|
|
|
after(async function () {
|
|
killallServers(servers)
|
|
|
|
if (this['ok']) {
|
|
await flushTests()
|
|
}
|
|
})
|
|
})
|