common.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. var common = exports;
  2. var fs = require('fs');
  3. var path = require('path');
  4. common.lib = path.resolve(__dirname, '..', 'lib');
  5. common.fixtures = path.resolve(__dirname, 'fixtures');
  6. // Useful for triggering ECONNREFUSED errors on connect()
  7. common.bogusPort = 47378;
  8. // Useful for triggering ER_ACCESS_DENIED_ERROR errors on connect()
  9. common.bogusPassword = 'INVALID PASSWORD';
  10. // Used for simulating a fake mysql server
  11. common.fakeServerPort = 32893;
  12. // Used for simulating a fake mysql server
  13. common.fakeServerSocket = __dirname + '/fake_server.sock';
  14. common.testDatabase = process.env.MYSQL_DATABASE || 'test';
  15. // Export common modules
  16. common.Charsets = require(common.lib + '/protocol/constants/charsets');
  17. common.ClientConstants = require(common.lib + '/protocol/constants/client');
  18. common.Connection = require(common.lib + '/Connection');
  19. common.ConnectionConfig = require(common.lib + '/ConnectionConfig');
  20. common.Errors = require(common.lib + '/protocol/constants/errors');
  21. common.Packets = require(common.lib + '/protocol/packets');
  22. common.PacketWriter = require(common.lib + '/protocol/PacketWriter');
  23. common.Parser = require(common.lib + '/protocol/Parser');
  24. common.PoolConfig = require(common.lib + '/PoolConfig');
  25. common.PoolConnection = require(common.lib + '/PoolConnection');
  26. common.SqlString = require(common.lib + '/protocol/SqlString');
  27. common.Types = require(common.lib + '/protocol/constants/types');
  28. var Mysql = require(path.resolve(common.lib, '../index'));
  29. var FakeServer = require('./FakeServer');
  30. common.createConnection = function(config) {
  31. config = mergeTestConfig(config);
  32. return Mysql.createConnection(config);
  33. };
  34. common.createQuery = Mysql.createQuery;
  35. common.createTestDatabase = function createTestDatabase(connection, callback) {
  36. var database = common.testDatabase;
  37. connection.query('CREATE DATABASE ??', [database], function (err) {
  38. if (err && err.code !== 'ER_DB_CREATE_EXISTS') {
  39. callback(err);
  40. return;
  41. }
  42. callback(null, database);
  43. });
  44. };
  45. common.createPool = function(config) {
  46. config = mergeTestConfig(config);
  47. config.connectionConfig = mergeTestConfig(config.connectionConfig);
  48. return Mysql.createPool(config);
  49. };
  50. common.createPoolCluster = function(config) {
  51. config = mergeTestConfig(config);
  52. config.createConnection = common.createConnection;
  53. return Mysql.createPoolCluster(config);
  54. };
  55. common.createFakeServer = function(options) {
  56. return new FakeServer(common.extend({}, options));
  57. };
  58. common.detectNewline = function detectNewline(path) {
  59. var newlines = fs.readFileSync(path, 'utf8').match(/(?:\r?\n)/g) || [];
  60. var crlf = newlines.filter(function (nl) { return nl === '\r\n'; }).length;
  61. var lf = newlines.length - crlf;
  62. return crlf > lf ? '\r\n' : '\n';
  63. };
  64. common.extend = function extend(dest, src) {
  65. for (var key in src) {
  66. dest[key] = src[key];
  67. }
  68. return dest;
  69. };
  70. common.getTestConnection = function getTestConnection(config, callback) {
  71. if (!callback && typeof config === 'function') {
  72. callback = config;
  73. config = {};
  74. }
  75. var connection = common.createConnection(config);
  76. connection.connect(function (err) {
  77. if (err && err.code === 'ECONNREFUSED') {
  78. if (process.env.CI) {
  79. throw err;
  80. }
  81. common.skipTest('cannot connect to MySQL server');
  82. }
  83. if (err) {
  84. callback(err);
  85. return;
  86. }
  87. callback(null, connection);
  88. });
  89. };
  90. common.skipTest = function skipTest(message) {
  91. var msg = 'skipping - ' + message + '\n';
  92. try {
  93. fs.writeSync(process.stdout.fd, msg);
  94. fs.fsyncSync(process.stdout.fd);
  95. } catch (e) {
  96. // Ignore error
  97. }
  98. process.exit(0);
  99. };
  100. common.useTestDb = function(connection) {
  101. common.createTestDatabase(connection, function (err) {
  102. if (err) throw err;
  103. });
  104. connection.query('USE ' + common.testDatabase);
  105. };
  106. common.getTestConfig = function(config) {
  107. return mergeTestConfig(config);
  108. };
  109. common.getSSLConfig = function() {
  110. return {
  111. ca : fs.readFileSync(path.join(common.fixtures, 'server.crt'), 'ascii'),
  112. cert : fs.readFileSync(path.join(common.fixtures, 'server.crt'), 'ascii'),
  113. ciphers : 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH',
  114. key : fs.readFileSync(path.join(common.fixtures, 'server.key'), 'ascii')
  115. };
  116. };
  117. function mergeTestConfig(config) {
  118. config = common.extend({
  119. host : process.env.MYSQL_HOST,
  120. port : process.env.MYSQL_PORT,
  121. user : process.env.MYSQL_USER,
  122. password : process.env.MYSQL_PASSWORD,
  123. socketPath : process.env.MYSQL_SOCKET
  124. }, config);
  125. return config;
  126. }