Skip to content

Commit 3792abd

Browse files
committed
wip
1 parent afddd4b commit 3792abd

File tree

7 files changed

+112
-37
lines changed

7 files changed

+112
-37
lines changed

test/mcbedrock.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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 & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

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

67
describe('mcbedrock', function () {
7-
this.timeout(18000 * 10)
8+
const vcount = SUPPORTED_VERSIONS.length
9+
this.timeout(vcount * 80 * 1000)
810

911
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))
12+
it('works on ' + version, async () => {
13+
await test(version);
14+
await sleep(100);
15+
})
1216
}
1317
})

test/mcpc.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ describe('mcpc', function () {
77
this.timeout(9000 * 10)
88

99
for (const version of SUPPORTED_VERSIONS) {
10-
it('works on ' + version, () => test(version))
10+
it.skip('works on ' + version, () => test(version))
1111
}
1212
})

test/util/collectBedrockPackets.js

Lines changed: 70 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,90 @@
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

6-
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-
})
8+
async function collectPackets(version, names = ['start_game'], cb) {
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-
offline: true
23+
version,
24+
raknetBackend: 'raknet-native',
25+
offline: true,
26+
//skipPing: true,
2427
})
2528

26-
let clientConnected = false
29+
console.log('Started client')
30+
//client.connect()
2731

28-
client.on('join', () => {
29-
console.log('[client] Client connected')
30-
clientConnected = true
31-
})
32+
let clientConnected = false
33+
const collected = []
34+
await waitFor((res) => {
3235

33-
for (const name of names) {
34-
client.on(name, (packet) => {
35-
cb(name, packet)
36-
collected.push(packet)
36+
client.on('join', () => {
37+
console.log('[client] Client connected')
38+
clientConnected = true
39+
TryStop();
3740
})
38-
}
3941

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

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

5290
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)