Skip to content

Commit 70b4945

Browse files
committed
wip
1 parent afddd4b commit 70b4945

File tree

7 files changed

+100
-39
lines changed

7 files changed

+100
-39
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Prismarine Registry",
55
"main": "lib/index.js",
66
"scripts": {
7-
"test": "mocha --reporter spec --bail --exit",
7+
"test": "mocha --reporter spec --exit",
88
"pretest": "npm run lint",
99
"lint": "standard",
1010
"fix": "standard --fix"

test/mcbedrock.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ async function main (version = '1.19.63') {
1010
console.log('Loading item palette and custom blocks')
1111
registry.handleStartGame(params)
1212

13-
console.log('Loaded item palette', registry.items)
13+
console.log('Loaded item palette')
1414

1515
const reEncoded = registry.writeItemStates()
1616
assert.deepEqual(
@@ -24,7 +24,6 @@ async function main (version = '1.19.63') {
2424
}
2525

2626
await collectPackets(version, Object.keys(handlers), (name, params) => handlers[name](version, params))
27-
await new Promise((resolve) => setTimeout(resolve, 30000))
2827
if (!loggedIn) {
2928
throw new Error('Did not login')
3029
}

test/mcbedrock.test.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
/* eslint-env mocha */
22

3-
const SUPPORTED_VERSIONS = ['1.17.10', '1.18.0', '1.18.11', '1.18.30', '1.19.1', '1.19.10']
3+
const SUPPORTED_VERSIONS = ['1.17.10', '1.18.0', '1.18.11', '1.18.30', '1.19.1', '1.19.10', '1.21.70']
44
const test = require('./mcbedrock')
5+
const { sleep } = require('./util/sleep')
56

67
describe('mcbedrock', function () {
7-
this.timeout(18000 * 10)
8-
98
for (const version of SUPPORTED_VERSIONS) {
10-
// skipped bedrock because it times out; fix in https://github.com/PrismarineJS/prismarine-registry/issues/43
11-
it.skip('works on ' + version, () => test(version))
9+
it('works on ' + version, async () => {
10+
this.timeout(80 * 1000)
11+
await test(version)
12+
await sleep(1000)
13+
})
1214
}
1315
})

test/util/collectBedrockPackets.js

Lines changed: 57 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,78 @@
11
const bedrock = require('bedrock-protocol')
2-
const { startServer } = require('minecraft-bedrock-server')
2+
const { startServerAndWait2 } = require('minecraft-bedrock-server')
33
const debug = require('debug')('prismarine-registry')
44
const path = require('path')
5+
const { getPort } = require('./getPort')
6+
const { waitFor } = require('./waitFor')
57

68
async function collectPackets (version, names = ['start_game'], cb) {
7-
const collected = []
8-
const server = await new Promise((resolve) => {
9-
const server = startServer(version, () => resolve(server), {
10-
'online-mode': false,
11-
'server-port': 19130,
12-
path: path.join(__dirname, `server_bedrock_${version}`)
13-
})
9+
const [port, v6] = [await getPort(), await getPort()]
10+
console.log('Starting vanilla server', version, 'on port', port, v6)
11+
const server = await startServerAndWait2(version, 1000 * 220, {
12+
'online-mode': false,
13+
'server-port': port,
14+
'server-portv6': v6,
15+
path: path.join(__dirname, `server_bedrock_${version}`)
1416
})
15-
16-
console.log('Started server', version)
17+
console.log('Started server')
1718

1819
const client = bedrock.createClient({
19-
version,
2020
host: '127.0.0.1',
21-
port: 19130,
21+
port,
2222
username: 'test',
23+
version,
24+
raknetBackend: 'raknet-native',
2325
offline: true
26+
// skipPing: true,
2427
})
2528

26-
let clientConnected = false
27-
28-
client.on('join', () => {
29-
console.log('[client] Client connected')
30-
clientConnected = true
31-
})
29+
console.log('Started client')
30+
// client.connect()
3231

33-
for (const name of names) {
34-
client.on(name, (packet) => {
35-
cb(name, packet)
36-
collected.push(packet)
32+
let clientConnected = false
33+
const collected = []
34+
await waitFor((res) => {
35+
client.on('join', () => {
36+
console.log('[client] Client connected')
37+
clientConnected = true
38+
TryStop()
3739
})
38-
}
3940

40-
client.on('packet', ({ name }) => debug('[client] -> ', name))
41+
client.on('packet', ({ name }) => debug('[client] -> ', name))
4142

42-
setTimeout(() => {
43-
console.log('Stopping server', version)
44-
server.kill()
45-
client.close()
46-
if (!clientConnected) {
47-
throw new Error('Client never connected')
43+
for (const name of names) {
44+
client.on(name, (packet) => {
45+
cb(name, packet)
46+
collected.push(packet)
47+
TryStop()
48+
})
4849
}
49-
}, 9000)
50+
51+
function TryStop () {
52+
if (clientConnected && collected.length === names.length) {
53+
console.log('✔ Got all packets')
54+
console.log('Stopping server', version)
55+
server.kill()
56+
client.close()
57+
res()
58+
}
59+
}
60+
}, 1000 * 60, () => {
61+
client.close()
62+
server.kill()
63+
throw Error('❌ client timed out ')
64+
})
65+
66+
console.log('Stopping server', version)
67+
68+
// setTimeout(() => {
69+
// console.log('Stopping server', version)
70+
// server.kill()
71+
// client.close()
72+
// if (!clientConnected) {
73+
// throw new Error('Client never connected')
74+
// }
75+
// }, 9000)
5076
}
5177

5278
module.exports = collectPackets

test/util/getPort.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const net = require('net')
2+
3+
const getPort = () => new Promise(resolve => {
4+
const server = net.createServer()
5+
server.listen(0, '127.0.0.1')
6+
server.on('listening', () => {
7+
const { port } = server.address()
8+
server.close(() => {
9+
// Wait a bit for port to free as we try to bind right after freeing it
10+
setTimeout(() => {
11+
resolve(port)
12+
}, 200)
13+
})
14+
})
15+
})
16+
17+
module.exports = { getPort }

test/util/sleep.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function sleep (ms) {
2+
return new Promise(resolve => setTimeout(resolve, ms))
3+
}
4+
5+
module.exports = { sleep }

test/util/waitFor.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
async function waitFor (cb, withTimeout, onTimeout) {
2+
let t
3+
const ret = await Promise.race([
4+
new Promise((resolve, reject) => cb(resolve, reject)),
5+
new Promise(resolve => { t = setTimeout(() => resolve('timeout'), withTimeout) })
6+
])
7+
clearTimeout(t)
8+
if (ret === 'timeout') await onTimeout()
9+
return ret
10+
}
11+
12+
module.exports = { waitFor }

0 commit comments

Comments
 (0)