/* Reproduces a MySQL database deadlock bug when several users try to register in MediaWiki at the same time. Uses Special:CreateAccount (normal user interface), not API. */ 'use strict'; const apiUrl = process.env.API || 'http://modwiki31.example.com/modwiki31/api.php', createAccountUrl = process.env.CREATEACCOUNT_URL || 'http://modwiki31.example.com/wiki/Special:CreateAccount', simultaneousRequests = 10; /*---------------------------------------------------------------------------*/ const MWBot = require( 'mwbot' ), request = require( 'request-promise' ); for ( var i = 0; i < simultaneousRequests; i ++ ) { makeTestUser(); // asynchronous } function makeTestUser() { var username = 'Test User ' + Date.now() + ' ' + Math.random(), password = '123456'; var cookieJar = request.jar(); var bot = new MWBot( { apiUrl: apiUrl, verbose: true }, { jar: cookieJar } ); return bot.getCreateaccountToken().then( () => request( { uri: createAccountUrl, method: 'POST', jar: cookieJar, form: { wpName: username, wpPassword: password, retype: password, wpCreateAccount: 'Submit', authAction: 'create', wpCreateaccountToken: bot.createaccountToken } } ) ).catch( function ( error ) { console.log( 'HTTP error ' + error.statusCode ); console.log( error.message.match( /A database query error has occurred(.*)<\/div>/ )[1] ); } ); }