Testserver with shared database

From Arianne
Revision as of 21:12, 23 November 2010 by imported>Hendrik Brummermann (Setup test database)
Jump to navigation Jump to search

This article describes how to configure a test server so that players can use their normal accounts and characters for testing.

The easy ways

There are two easy way:

Just setup a new empty database
Players can create new accounts there, and some script may give them enough XP and items for testing. There are two problems with this approach: Players may just go to the test server to play with a strong character. And people may play there for a couple of days and get used to it for normal playing
Just copy the production database into a second database every night
This has the obvious advantage that players can test with their own characters so the test are way more realistic. The problem with this approach is that it destroys the logs every night. An attacker may try to crack passwords on the test database without anyone noticing.

The complex way

The complex way allows players to test with their own account and characters, while doing smart things with the logs. The login events will be logged to the original database so that the number of wrong password tries sums up both databases. The Stendhal website displays a login history covering all sources: website, main server and test server. The gameEvents and itemlog tables will be kept for the analysis of bugs.

Setup test database

Please start the test server once, so that it will create all the tables, do not login.

We are going to replace some tables with VIEWs pointing to the main database:

<source lang="sql"> DROP TABLE account; DROP TABLE accountban; DROP TABLE banlist; DROP TABLE characters; DROP TABLE loginEvent; CREATE VIEW account AS SELECT * FROM marauroa.account; CREATE VIEW accountban AS SELECT * FROM marauroa.accountban; CREATE VIEW banlist AS SELECT * FROM marauroa.banlist; CREATE VIEW characters AS SELECT * FROM marauroa.characters; CREATE VIEW loginEvent AS SELECT * FROM marauroa.loginEvent; </source>

Configure marauroa on test server

TODO: describe marauroa setup


Nightly update script

This update script will copy the rpobject table from the main server. rpobject is the table the progress of characters is stored in:

<source lang="bash"> nice mysql -u testserver --password=xxx testserver < refresh-database.sql mysqldump -f -u testserver --password=xxx stendhal rpobject | mysql -u testserver --password=xxx testserver </source>

refresh-database.sql: <source lang="sql"> TRUNCATE rpzone; TRUNCATE rpobject; </source>