mirror of
https://github.com/PrismarineJS/node-minecraft-protocol.git
synced 2024-11-14 19:04:59 -05:00
Improve CI setup for per version tests (#1267)
* Improve CI setup: move lint out of per version * fix * Simplify go back to all per version. * refactor cycle test to use supported versions * fix cycle packet test * Add v to version to avoid 1.19 running every 1.19 minor. * Add quotes. * Use versions from js file in ci.yml * Fix ci.yml syntax. * Fix matrix read. * fix * fix * fix gitignore
This commit is contained in:
parent
9e99109476
commit
1740124c47
9 changed files with 90 additions and 64 deletions
48
.github/workflows/ci.yml
vendored
48
.github/workflows/ci.yml
vendored
|
@ -9,11 +9,38 @@ on:
|
||||||
- master
|
- master
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
Lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js 18.x
|
||||||
|
uses: actions/setup-node@v1.4.4
|
||||||
|
with:
|
||||||
|
node-version: 18.x
|
||||||
|
- run: npm i && npm run lint
|
||||||
|
PrepareSupportedVersions:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js 18.x
|
||||||
|
uses: actions/setup-node@v1.4.4
|
||||||
|
with:
|
||||||
|
node-version: 18.x
|
||||||
|
- id: set-matrix
|
||||||
|
run: |
|
||||||
|
node -e "
|
||||||
|
const supportedVersions = require('./src/version').supportedVersions;
|
||||||
|
console.log('matrix='+JSON.stringify({'include': supportedVersions.map(mcVersion => ({mcVersion}))}))
|
||||||
|
" >> $GITHUB_OUTPUT
|
||||||
test:
|
test:
|
||||||
|
needs: PrepareSupportedVersions
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix: ${{fromJson(needs.PrepareSupportedVersions.outputs.matrix)}}
|
||||||
mcVersion: ['1.7', '1.8', '1.9', '1.10', '1.11.2', '1.12.2', '1.13.2', '1.14.4', '1.15.2', '1.16.5', '1.17', '1.17.1', '1.18.2', '1.19', '1.19.2', '1.19.3', '1.19.4', '1.20', '1.20.1']
|
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
@ -30,19 +57,4 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test -- -g ${{ matrix.mcVersion }}
|
run: npm run mochaTest -- -g ${{ matrix.mcVersion }}v
|
||||||
packet-cycle-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Use Node.js 18.x
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 18.x
|
|
||||||
- name: Setup Java JDK
|
|
||||||
uses: actions/setup-java@v1.4.3
|
|
||||||
with:
|
|
||||||
java-version: '16'
|
|
||||||
distribution: 'adopt'
|
|
||||||
- run: npm install && npm run test-non-par
|
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,6 +1,6 @@
|
||||||
node_modules
|
node_modules
|
||||||
test/npm-debug.log
|
test/npm-debug.log
|
||||||
test/server*
|
test/server_*
|
||||||
package-lock.json
|
package-lock.json
|
||||||
versions/
|
versions/
|
||||||
src/client/*.json
|
src/client/*.json
|
|
@ -9,8 +9,8 @@
|
||||||
"url": "git://github.com/PrismarineJS/node-minecraft-protocol.git"
|
"url": "git://github.com/PrismarineJS/node-minecraft-protocol.git"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha --recursive --reporter spec --exit --exclude \"non-par-test.js\"",
|
"test": "npm run mochaTest",
|
||||||
"test-non-par": "mocha --recursive --reporter spec --exit \"test/non-par-test.js\"",
|
"mochaTest": "mocha --recursive --reporter spec --exit",
|
||||||
"lint": "standard",
|
"lint": "standard",
|
||||||
"fix": "standard --fix",
|
"fix": "standard --fix",
|
||||||
"pretest": "npm run lint",
|
"pretest": "npm run lint",
|
||||||
|
|
|
@ -16,7 +16,7 @@ const testDataWrite = [
|
||||||
for (const supportedVersion of mc.supportedVersions) {
|
for (const supportedVersion of mc.supportedVersions) {
|
||||||
const mcData = require('minecraft-data')(supportedVersion)
|
const mcData = require('minecraft-data')(supportedVersion)
|
||||||
const version = mcData.version
|
const version = mcData.version
|
||||||
describe('benchmark ' + version.minecraftVersion, function () {
|
describe('benchmark ' + supportedVersion + 'v', function () {
|
||||||
this.timeout(60 * 1000)
|
this.timeout(60 * 1000)
|
||||||
const inputData = []
|
const inputData = []
|
||||||
it('bench serializing', function (done) {
|
it('bench serializing', function (done) {
|
||||||
|
|
|
@ -28,7 +28,7 @@ for (const supportedVersion of mc.supportedVersions) {
|
||||||
console.log(line)
|
console.log(line)
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('client ' + version.minecraftVersion, function () {
|
describe('client ' + supportedVersion + 'v', function () {
|
||||||
this.timeout(10 * 60 * 1000)
|
this.timeout(10 * 60 * 1000)
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
|
|
53
test/cyclePacketTest.js
Normal file
53
test/cyclePacketTest.js
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/* eslint-env mocha */
|
||||||
|
// Tests packet serialization/deserialization from with raw binary from minecraft-packets
|
||||||
|
const { createSerializer, createDeserializer, states, supportedVersions } = require('minecraft-protocol')
|
||||||
|
const mcPackets = require('minecraft-packets')
|
||||||
|
const assert = require('assert')
|
||||||
|
|
||||||
|
const makeClientSerializer = version => createSerializer({ state: states.PLAY, version, isServer: true })
|
||||||
|
const makeClientDeserializer = version => createDeserializer({ state: states.PLAY, version })
|
||||||
|
|
||||||
|
for (const supportedVersion of supportedVersions) {
|
||||||
|
let serializer, deserializer, data
|
||||||
|
const mcData = require('minecraft-data')(supportedVersion)
|
||||||
|
const version = mcData.version
|
||||||
|
|
||||||
|
function convertBufferToObject (buffer) {
|
||||||
|
return deserializer.parsePacketBuffer(buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertObjectToBuffer (object) {
|
||||||
|
return serializer.createPacketBuffer(object)
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBuffer (buffer, [packetName, packetIx]) {
|
||||||
|
const parsed = convertBufferToObject(buffer).data
|
||||||
|
const parsedBuffer = convertObjectToBuffer(parsed)
|
||||||
|
const areEq = buffer.equals(parsedBuffer)
|
||||||
|
assert.strictEqual(areEq, true, `Error when testing ${+packetIx + 1} ${packetName} packet`)
|
||||||
|
}
|
||||||
|
describe(`Test cycle packet for version ${supportedVersion}v`, () => {
|
||||||
|
before(() => {
|
||||||
|
serializer = makeClientSerializer(version.minecraftVersion)
|
||||||
|
deserializer = makeClientDeserializer(version.minecraftVersion)
|
||||||
|
})
|
||||||
|
data = mcPackets.pc[version.minecraftVersion]
|
||||||
|
it('Has packet data', () => {
|
||||||
|
if (data === undefined) {
|
||||||
|
// many version do not have data, so print a log for now
|
||||||
|
// assert when most versions have packet data
|
||||||
|
console.log(`Version ${version.minecraftVersion} has no packet dump.`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// server -> client
|
||||||
|
if (data !== undefined) {
|
||||||
|
Object.entries(data['from-server']).forEach(([packetName, packetData]) => {
|
||||||
|
it(`${packetName} packet`, () => {
|
||||||
|
for (const i in packetData) {
|
||||||
|
testBuffer(packetData[i].raw, [packetName, i])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
|
@ -1,39 +0,0 @@
|
||||||
/* eslint-env mocha */
|
|
||||||
// Tests packet serialization/deserialization from with raw binary from minecraft-packets
|
|
||||||
const { createSerializer, createDeserializer, states } = require('minecraft-protocol')
|
|
||||||
const mcPackets = require('minecraft-packets')
|
|
||||||
const assert = require('assert')
|
|
||||||
|
|
||||||
const makeClientSerializer = version => createSerializer({ state: states.PLAY, version, isServer: true })
|
|
||||||
const makeClientDeserializer = version => createDeserializer({ state: states.PLAY, version })
|
|
||||||
|
|
||||||
Object.entries(mcPackets.pc).forEach(([ver, data]) => {
|
|
||||||
let serializer, deserializer
|
|
||||||
|
|
||||||
function convertBufferToObject (buffer) {
|
|
||||||
return deserializer.parsePacketBuffer(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertObjectToBuffer (object) {
|
|
||||||
return serializer.createPacketBuffer(object)
|
|
||||||
}
|
|
||||||
|
|
||||||
function testBuffer (buffer, [packetName, packetIx]) {
|
|
||||||
const parsed = convertBufferToObject(buffer).data
|
|
||||||
const parsedBuffer = convertObjectToBuffer(parsed)
|
|
||||||
const areEq = buffer.equals(parsedBuffer)
|
|
||||||
assert.strictEqual(areEq, true, `Error when testing ${+packetIx + 1} ${packetName} packet`)
|
|
||||||
}
|
|
||||||
describe(`Test version ${ver}`, () => {
|
|
||||||
serializer = makeClientSerializer(ver)
|
|
||||||
deserializer = makeClientDeserializer(ver)
|
|
||||||
// server -> client
|
|
||||||
Object.entries(data['from-server']).forEach(([packetName, packetData]) => {
|
|
||||||
it(`${packetName} packet`, () => {
|
|
||||||
for (const i in packetData) {
|
|
||||||
testBuffer(packetData[i].raw, [packetName, i])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
|
@ -244,7 +244,7 @@ for (const supportedVersion of mc.supportedVersions) {
|
||||||
const version = mcData.version
|
const version = mcData.version
|
||||||
const packets = mcData.protocol
|
const packets = mcData.protocol
|
||||||
|
|
||||||
describe('packets ' + version.minecraftVersion, function () {
|
describe('packets ' + supportedVersion + 'v', function () {
|
||||||
let client, server, serverClient
|
let client, server, serverClient
|
||||||
before(async function () {
|
before(async function () {
|
||||||
PORT = await getPort()
|
PORT = await getPort()
|
||||||
|
|
|
@ -94,7 +94,7 @@ for (const supportedVersion of mc.supportedVersions) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('mc-server ' + version.minecraftVersion, function () {
|
describe('mc-server ' + supportedVersion + 'v', function () {
|
||||||
this.timeout(5000)
|
this.timeout(5000)
|
||||||
this.beforeAll(async function () {
|
this.beforeAll(async function () {
|
||||||
PORT = await getPort()
|
PORT = await getPort()
|
||||||
|
|
Loading…
Reference in a new issue