Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/master/test/externalTest.js
Views: 789
/* eslint-env mocha */12const assert = require('assert')3const mineflayer = require('../')4const commonTest = require('./externalTests/plugins/testCommon')5const mc = require('minecraft-protocol')6const fs = require('fs')7const path = require('path')89const { getPort } = require('./common/util')1011// set this to false if you want to test without starting a server automatically12const START_THE_SERVER = true13// if you want to have time to look what's happening increase this (milliseconds)14const TEST_TIMEOUT_MS = 900001516const excludedTests = ['digEverything', 'book', 'anvil', 'placeEntity']1718const propOverrides = {19'level-type': 'FLAT',20'spawn-npcs': 'true',21'spawn-animals': 'false',22'online-mode': 'false',23gamemode: '1',24'spawn-monsters': 'false',25'generate-structures': 'false',26'enable-command-block': 'true',27'use-native-transport': 'false' // java 16 throws errors without this, https://www.spigotmc.org/threads/unable-to-access-address-of-buffer.31160228}2930const Wrap = require('minecraft-wrap').Wrap31const download = require('minecraft-wrap').download3233const MC_SERVER_PATH = path.join(__dirname, 'server')3435for (const supportedVersion of mineflayer.testedVersions) {36let PORT = 2556537const registry = require('prismarine-registry')(supportedVersion)38const version = registry.version39const MC_SERVER_JAR_DIR = process.env.MC_SERVER_JAR_DIR || `${process.cwd()}/server_jars`40const MC_SERVER_JAR = `${MC_SERVER_JAR_DIR}/minecraft_server.${version.minecraftVersion}.jar`41const wrap = new Wrap(MC_SERVER_JAR, `${MC_SERVER_PATH}_${supportedVersion}`)42wrap.on('line', (line) => {43console.log(line)44})4546describe(`mineflayer_external ${supportedVersion}v`, function () {47let bot48this.timeout(10 * 60 * 1000)49before(async function () {50PORT = await getPort()51console.log(`Port chosen: ${PORT}`)52})53before(function (done) {54this.timeout(1000 * 60)55function begin () {56bot = mineflayer.createBot({57username: 'flatbot',58viewDistance: 'tiny',59port: PORT,60host: '127.0.0.1',61version: supportedVersion62})63commonTest(bot)64bot.test.port = PORT6566console.log('starting bot')67bot.once('spawn', () => {68wrap.writeServer('op flatbot\n')69bot.once('messagestr', msg => {70if (msg.includes('Made flatbot a server operator') || msg === '[Server: Opped flatbot]') {71done()72}73})74})75}7677if (START_THE_SERVER) {78console.log('downloading and starting server')79download(version.minecraftVersion, MC_SERVER_JAR, (err) => {80if (err) {81console.log(err)82done(err)83return84}85propOverrides['server-port'] = PORT86wrap.startServer(propOverrides, (err) => {87if (err) return done(err)88console.log(`pinging ${version.minecraftVersion} port : ${PORT}`)89mc.ping({90port: PORT,91host: '127.0.0.1',92version: supportedVersion93}, (err, results) => {94if (err) return done(err)95console.log('pong')96assert.ok(results.latency >= 0)97assert.ok(results.latency <= 1000)98begin()99})100})101})102} else begin()103})104105beforeEach(async () => {106console.log('reset state')107await bot.test.resetState()108})109110after((done) => {111bot.quit()112wrap.stopServer((err) => {113if (err) {114console.log(err)115}116wrap.deleteServerData((err) => {117if (err) {118console.log(err)119}120done(err)121})122})123})124125const externalTestsFolder = path.resolve(__dirname, './externalTests')126fs.readdirSync(externalTestsFolder)127.filter(file => fs.statSync(path.join(externalTestsFolder, file)).isFile())128.forEach((test) => {129test = path.basename(test, '.js')130const testFunctions = require(`./externalTests/${test}`)(supportedVersion)131const runTest = (testName, testFunction) => {132return function (done) {133this.timeout(TEST_TIMEOUT_MS)134bot.test.sayEverywhere(`### Starting ${testName}`)135testFunction(bot, done).then(res => done()).catch(e => done(e))136}137}138if (excludedTests.indexOf(test) === -1) {139if (typeof testFunctions === 'object') {140for (const testFunctionName in testFunctions) {141if (testFunctions[testFunctionName] !== undefined) {142it(`${test} ${testFunctionName}`, (testFunctionName => runTest(`${test} ${testFunctionName}`, testFunctions[testFunctionName]))(testFunctionName))143}144}145} else {146it(test, runTest(test, testFunctions))147}148}149})150})151}152153154