adapt test for multi-version

This commit is contained in:
Romain Beaumont 2018-05-23 01:56:55 +02:00
parent 2e749ff49f
commit 13ceac4a83
No known key found for this signature in database
GPG key ID: DB60E388B3BCF286
6 changed files with 523 additions and 453 deletions

View file

@ -2,6 +2,7 @@ version: 2
jobs: jobs:
build: build:
parallelism: 2
docker: docker:
- image: circleci/node:10 - image: circleci/node:10
steps: steps:

View file

@ -17,7 +17,8 @@ module.exports = {
generations: require('./lib/generations'), generations: require('./lib/generations'),
experience: require('./lib/experience'), experience: require('./lib/experience'),
UserError: require('./lib/user_error'), UserError: require('./lib/user_error'),
portal_detector: require('./lib/portal_detector') portal_detector: require('./lib/portal_detector'),
supportedVersions
} }
function createMCServer (options) { function createMCServer (options) {

31
test/common/parallel.js Normal file
View file

@ -0,0 +1,31 @@
const nodeIndex = parseInt(process.env.CIRCLE_NODE_INDEX)
const nodeTotal = parseInt(process.env.CIRCLE_NODE_TOTAL)
const parallel = process.env.CIRCLE_NODE_INDEX !== undefined && process.env.CIRCLE_NODE_TOTAL !== undefined
const mc = require('../../')
// expected values :
// (0,4,10) -> (0,2)
// (1,4,10) -> (3,5)
// (2,4,10) -> (6,8)
// (3,4,10) -> (9,9)
function testedRange (nodeIndex, nodeTotal, numberOfVersions) {
const nbFirsts = Math.ceil(numberOfVersions / nodeTotal)
if (nodeIndex === (nodeTotal - 1)) {
return {
firstVersion: nbFirsts * nodeIndex,
lastVersion: numberOfVersions - 1
}
}
return {
firstVersion: nodeIndex * nbFirsts,
lastVersion: (nodeIndex + 1) * nbFirsts - 1
}
}
console.log({ nodeIndex, nodeTotal, versions: mc.supportedVersions.length })
const { firstVersion, lastVersion } = parallel ? testedRange(nodeIndex, nodeTotal, mc.supportedVersions.length) : {
firstVersion: 0,
lastVersion: mc.supportedVersions.length - 1
}
module.exports = { firstVersion, lastVersion }

View file

@ -4,7 +4,6 @@ const squid = require('flying-squid')
const settings = require('../config/default-settings') const settings = require('../config/default-settings')
const mineflayer = require('mineflayer') const mineflayer = require('mineflayer')
const { Vec3 } = require('vec3') const { Vec3 } = require('vec3')
const Item = require('prismarine-item')('1.8')
function assertPosEqual (actual, expected) { function assertPosEqual (actual, expected) {
expect(actual.distanceTo(expected)).toBeLessThan(1) expect(actual.distanceTo(expected)).toBeLessThan(1)
@ -12,7 +11,19 @@ function assertPosEqual (actual, expected) {
const once = require('event-promise') const once = require('event-promise')
describe('server with mineflayer connection', () => { const { firstVersion, lastVersion } = require('./common/parallel')
squid.supportedVersions.forEach((supportedVersion, i) => {
if (!(i >= firstVersion && i <= lastVersion)) {
return
}
const mcData = require('minecraft-data')(supportedVersion)
const version = mcData.version
const Item = require('prismarine-item')(supportedVersion)
describe('server with mineflayer connection ' + version.minecraftVersion, () => {
jest.setTimeout(60 * 1000) jest.setTimeout(60 * 1000)
let bot let bot
let bot2 let bot2
@ -61,27 +72,29 @@ describe('server with mineflayer connection', () => {
} }
beforeEach(async () => { beforeEach(async () => {
const PORT = Math.round(30000 + Math.random() * 20000)
const options = settings const options = settings
options['online-mode'] = false options['online-mode'] = false
options['port'] = 25566 options['port'] = PORT
options['view-distance'] = 2 options['view-distance'] = 2
options['worldFolder'] = undefined options['worldFolder'] = undefined
options['logging'] = false options['logging'] = false
options['version'] = version.minecraftVersion
serv = squid.createMCServer(options) serv = squid.createMCServer(options)
await once(serv, 'listening') await once(serv, 'listening')
bot = mineflayer.createBot({ bot = mineflayer.createBot({
host: 'localhost', host: 'localhost',
port: 25566, port: PORT,
username: 'bot', username: 'bot',
version: '1.8' version: version.minecraftVersion
}) })
bot2 = mineflayer.createBot({ bot2 = mineflayer.createBot({
host: 'localhost', host: 'localhost',
port: 25566, port: PORT,
username: 'bot2', username: 'bot2',
version: '1.8' version: version.minecraftVersion
}) })
await Promise.all([once(bot, 'login'), once(bot2, 'login')]) await Promise.all([once(bot, 'login'), once(bot2, 'login')])
@ -236,4 +249,5 @@ describe('server with mineflayer connection', () => {
expect(bot.experience.points).toEqual(100) expect(bot.experience.points).toEqual(100)
}) })
}) })
})
}) })

View file

@ -1,6 +1,15 @@
/* eslint-env jest */ /* eslint-env jest */
const { const squid = require('flying-squid')
const { firstVersion, lastVersion } = require('./common/parallel')
squid.supportedVersions.forEach((supportedVersion, i) => {
if (!(i >= firstVersion && i <= lastVersion)) return
const mcData = require('minecraft-data')(supportedVersion)
const version = mcData.version
const {
detectFrame, detectFrame,
findPotentialLines, findPotentialLines,
findBorder, findBorder,
@ -8,11 +17,11 @@ const {
generateLine, generateLine,
generatePortal, generatePortal,
makeWorldWithPortal makeWorldWithPortal
} = require('flying-squid').portal_detector('1.8') } = squid.portal_detector(version.minecraftVersion)
const { Vec3 } = require('vec3') const { Vec3 } = require('vec3')
describe('generate portal', () => { describe('generate portal ' + version.minecraftVersion, () => {
test('generate a line', () => { test('generate a line', () => {
expect(generateLine(new Vec3(3, 1, 1), new Vec3(1, 0, 0), 2)).toEqual([new Vec3(3, 1, 1), new Vec3(4, 1, 1)]) expect(generateLine(new Vec3(3, 1, 1), new Vec3(1, 0, 0), 2)).toEqual([new Vec3(3, 1, 1), new Vec3(4, 1, 1)])
}) })
@ -26,9 +35,9 @@ describe('generate portal', () => {
air: generateLine(new Vec3(3, 2, 1), new Vec3(0, 1, 0), 3).concat(generateLine(new Vec3(4, 2, 1), new Vec3(0, 1, 0), 3)) air: generateLine(new Vec3(3, 2, 1), new Vec3(0, 1, 0), 3).concat(generateLine(new Vec3(4, 2, 1), new Vec3(0, 1, 0), 3))
}) })
}) })
}) })
describe('detect portal', () => { describe('detect portal ' + version.minecraftVersion, () => {
jest.setTimeout(60 * 1000) jest.setTimeout(60 * 1000)
const portalData = [] const portalData = []
@ -209,9 +218,9 @@ describe('detect portal', () => {
}) })
}) })
}) })
}) })
describe("doesn't detect non-portal", () => { describe("doesn't detect non-portal " + version.minecraftVersion, () => {
const portalData = [] const portalData = []
portalData.push({ portalData.push({
@ -249,4 +258,5 @@ describe("doesn't detect non-portal", () => {
}) })
}) })
}) })
})
}) })

View file

@ -5,16 +5,28 @@ const squid = require('flying-squid')
const settings = require('../config/default-settings') const settings = require('../config/default-settings')
describe('server', () => { const { firstVersion, lastVersion } = require('./common/parallel')
squid.supportedVersions.forEach((supportedVersion, i) => {
if (!(i >= firstVersion && i <= lastVersion)) {
return
}
const PORT = Math.round(30000 + Math.random() * 20000)
const mcData = require('minecraft-data')(supportedVersion)
const version = mcData.version
describe(`simple server ${version.minecraftVersion}`, () => {
let serv let serv
beforeAll(done => { beforeAll(done => {
const options = settings const options = settings
options['online-mode'] = false options['online-mode'] = false
options['port'] = 25566 options['port'] = PORT
options['view-distance'] = 2 options['view-distance'] = 2
options['worldFolder'] = undefined options['worldFolder'] = undefined
options['logging'] = false options['logging'] = false
options['version'] = version.minecraftVersion
serv = squid.createMCServer(options) serv = squid.createMCServer(options)
serv.on('listening', () => { serv.on('listening', () => {
@ -34,4 +46,5 @@ describe('server', () => {
client.connect(serv._server.socketServer.address().port, '127.0.0.1', done) client.connect(serv._server.socketServer.address().port, '127.0.0.1', done)
client.on('error', done) client.on('error', done)
}) })
})
}) })