fix version checking bug with 1.12 and share vanilla server instance between tests

This commit is contained in:
Romain Beaumont 2017-06-19 15:28:24 +02:00
parent b445e7fb94
commit 1a4d9f1e84
No known key found for this signature in database
GPG Key ID: DB60E388B3BCF286
2 changed files with 146 additions and 131 deletions

View File

@ -4,10 +4,18 @@ module.exports = function(client,options) {
return; return;
const parsed=JSON.parse(message.reason); const parsed=JSON.parse(message.reason);
const text=parsed.text ? parsed.text : parsed; const text=parsed.text ? parsed.text : parsed;
const versionRequired=/(?:Outdated client! Please use|Outdated server! I'm still on) (.+)/.exec(text); let versionRequired;
if(text.translate && text.translate.startsWith("multiplayer.disconnect.outdated_"))
versionRequired=text.with[0];
else {
versionRequired = /(?:Outdated client! Please use|Outdated server! I'm still on) (.+)/.exec(text);
versionRequired= versionRequired ? versionRequired[1] : null;
}
if(!versionRequired) if(!versionRequired)
return; return;
client.emit("error",new Error("This server is version "+versionRequired[1]+ client.emit("error",new Error("This server is version "+versionRequired+
", you are using version "+client.version+", please specify the correct version in the options.")) ", you are using version "+client.version+", please specify the correct version in the options."))
}) })
}; };

View File

@ -22,19 +22,15 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
var MC_SERVER_JAR_DIR = process.env.MC_SERVER_JAR_DIR; var MC_SERVER_JAR_DIR = process.env.MC_SERVER_JAR_DIR;
var MC_SERVER_JAR = MC_SERVER_JAR_DIR + "/minecraft_server." + version.minecraftVersion + ".jar"; var MC_SERVER_JAR = MC_SERVER_JAR_DIR + "/minecraft_server." + version.minecraftVersion + ".jar";
var wrap = new Wrap(MC_SERVER_JAR, MC_SERVER_PATH+"_"+supportedVersion); var wrap = new Wrap(MC_SERVER_JAR, MC_SERVER_PATH+"_"+supportedVersion);
wrap.on('line', function(line) {
console.log(line);
});
describe("client " + version.minecraftVersion, function() { describe("client " + version.minecraftVersion, function() {
this.timeout(10 * 60 * 1000); this.timeout(10 * 60 * 1000);
before(download.bind(null, version.minecraftVersion, MC_SERVER_JAR)); before(download.bind(null, version.minecraftVersion, MC_SERVER_JAR));
afterEach(function(done) {
wrap.stopServer(function(err) {
if(err)
console.log(err);
done(err);
});
});
after(function (done) { after(function (done) {
wrap.deleteServerData(function (err) { wrap.deleteServerData(function (err) {
if (err) if (err)
@ -42,17 +38,31 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
done(err); done(err);
}); });
}); });
it("pings the server", function(done) {
wrap.on('line', function(line) { describe("offline", function () {
console.log(line); before(function (done) {
});
wrap.startServer({ wrap.startServer({
motd: 'test1234', 'online-mode': 'false',
'max-players': 120, 'server-port': PORT,
'server-port':PORT 'motd': 'test1234',
'max-players': 120
}, function (err) { }, function (err) {
if (err) if (err)
return done(err); console.log(err);
done(err);
});
});
after(function (done) {
wrap.stopServer(function (err) {
if (err)
console.log(err);
done(err);
});
});
it("pings the server", function (done) {
mc.ping({ mc.ping({
version: version.minecraftVersion, version: version.minecraftVersion,
port: PORT port: PORT
@ -72,56 +82,9 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
done(); done();
}); });
}); });
});
it.skip("connects successfully - online mode", function(done) {
wrap.startServer({
'online-mode': 'true',
'server-port':PORT
}, function(err) {
if(err)
return done(err);
var client = mc.createClient({
username: process.env.MC_USERNAME,
password: process.env.MC_PASSWORD,
version: version.minecraftVersion,
port:PORT
});
var lineListener = function(line) {
var match = line.match(/\[Server thread\/INFO\]: <(.+?)> (.+)/);
if(!match) return;
assert.strictEqual(match[1], client.username);
assert.strictEqual(match[2], "hello everyone; I have logged in.");
wrap.writeServer("say hello\n");
};
wrap.on('line', lineListener);
client.on('login', function(packet) {
assert.strictEqual(packet.levelType, 'default');
assert.strictEqual(packet.difficulty, 1);
assert.strictEqual(packet.dimension, 0);
assert.strictEqual(packet.gameMode, 0);
client.write('chat', {
message: "hello everyone; I have logged in."
});
});
var chatCount = 0;
client.on('chat', function(packet) {
chatCount += 1;
assert.ok(chatCount <= 2);
if(chatCount == 2) {
client.removeAllListeners('chat');
wrap.removeListener('line', lineListener);
done();
}
});
});
});
it("connects successfully - offline mode", function (done) { it("connects successfully - offline mode", function (done) {
wrap.startServer({
'online-mode': 'false',
'server-port':PORT
}, function(err) {
if(err)
return done(err);
var client = mc.createClient({ var client = mc.createClient({
username: 'Player', username: 'Player',
version: version.minecraftVersion, version: version.minecraftVersion,
@ -163,41 +126,14 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
assert.deepEqual(message["with"][1].extra[0].text ? assert.deepEqual(message["with"][1].extra[0].text ?
message["with"][1].extra[0].text : message["with"][1].extra[0], "hello"); message["with"][1].extra[0].text : message["with"][1].extra[0], "hello");
wrap.removeListener('line', lineListener); wrap.removeListener('line', lineListener);
client.end();
done(); done();
} }
}); });
}); });
});
it("gets kicked when no credentials supplied in online mode", function(done) {
wrap.startServer({
'online-mode': 'true',
'server-port':PORT
}, function(err) {
if(err)
return done(err);
var client = mc.createClient({
username: 'Player',
version: version.minecraftVersion,
port:PORT
});
var gotKicked = false;
client.on('disconnect', function(packet) {
assert.ok(packet.reason.indexOf('"Failed to verify username!"') != -1 || packet.reason.indexOf('multiplayer.disconnect.unverified_username') != -1);
gotKicked = true;
});
client.on('end', function() {
assert.ok(gotKicked);
done();
});
});
});
it("does not crash for " + SURVIVE_TIME + "ms", function (done) { it("does not crash for " + SURVIVE_TIME + "ms", function (done) {
wrap.startServer({
'online-mode': 'false',
'server-port':PORT
}, function(err) {
if(err)
return done(err);
var client = mc.createClient({ var client = mc.createClient({
username: 'Player', username: 'Player',
version: version.minecraftVersion, version: version.minecraftVersion,
@ -220,19 +156,13 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
});*/ });*/
assert.strictEqual(message["with"][1], "hello everyone; I have logged in."); assert.strictEqual(message["with"][1], "hello everyone; I have logged in.");
setTimeout(function () { setTimeout(function () {
client.end();
done(); done();
}, SURVIVE_TIME); }, SURVIVE_TIME);
}); });
}); });
});
it("produce a decent error when connecting with the wrong version", function (done) { it("produce a decent error when connecting with the wrong version", function (done) {
wrap.startServer({
'online-mode': 'false',
'server-port':PORT
}, function(err) {
if(err)
return done(err);
var client = mc.createClient({ var client = mc.createClient({
username: 'Player', username: 'Player',
version: version.minecraftVersion == "1.8.8" ? "1.11.2" : "1.8.8", version: version.minecraftVersion == "1.8.8" ? "1.11.2" : "1.8.8",
@ -247,7 +177,84 @@ mc.supportedVersions.forEach(function(supportedVersion,i) {
done(err); done(err);
} }
}); });
}) });
})
});
describe("online", function () {
before(function (done) {
wrap.startServer({
'online-mode': 'true',
'server-port': PORT
}, function (err) {
if (err)
console.log(err);
done(err);
});
});
after(function (done) {
wrap.stopServer(function (err) {
if (err)
console.log(err);
done(err);
});
});
it.skip("connects successfully - online mode", function (done) {
var client = mc.createClient({
username: process.env.MC_USERNAME,
password: process.env.MC_PASSWORD,
version: version.minecraftVersion,
port: PORT
});
var lineListener = function (line) {
var match = line.match(/\[Server thread\/INFO\]: <(.+?)> (.+)/);
if (!match) return;
assert.strictEqual(match[1], client.username);
assert.strictEqual(match[2], "hello everyone; I have logged in.");
wrap.writeServer("say hello\n");
};
wrap.on('line', lineListener);
client.on('login', function (packet) {
assert.strictEqual(packet.levelType, 'default');
assert.strictEqual(packet.difficulty, 1);
assert.strictEqual(packet.dimension, 0);
assert.strictEqual(packet.gameMode, 0);
client.write('chat', {
message: "hello everyone; I have logged in."
});
});
var chatCount = 0;
client.on('chat', function (packet) {
chatCount += 1;
assert.ok(chatCount <= 2);
if (chatCount == 2) {
client.removeAllListeners('chat');
wrap.removeListener('line', lineListener);
client.end();
done();
}
});
});
it("gets kicked when no credentials supplied in online mode", function (done) {
var client = mc.createClient({
username: 'Player',
version: version.minecraftVersion,
port: PORT
});
var gotKicked = false;
client.on('disconnect', function (packet) {
assert.ok(packet.reason.indexOf('"Failed to verify username!"') != -1 || packet.reason.indexOf('multiplayer.disconnect.unverified_username') != -1);
gotKicked = true;
});
client.on('end', function () {
assert.ok(gotKicked);
done();
});
});
});
}); });
}); });