diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 4ebc8ae..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-coverage
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index c50229d..0000000
--- a/.eslintrc
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "env": {
-    "node": true
-  },
-  "rules": {
-    "comma-dangle": [2, "never"],
-    "comma-spacing": ["error", { "before": false, "after": true }],
-    "consistent-return": 2,
-    "eqeqeq": [2, "allow-null"],
-    "indent": [2, 2, { "VariableDeclarator": 2, "SwitchCase": 1 }],
-    "key-spacing": [2, { "align": { "beforeColon": true, "afterColon": true, "on": "colon" } }],
-    "keyword-spacing": 2,
-    "new-parens": 2,
-    "no-cond-assign": 2,
-    "no-constant-condition": 2,
-    "no-control-regex": 2,
-    "no-debugger": 2,
-    "no-dupe-args": 2,
-    "no-dupe-keys": 2,
-    "no-duplicate-case": 2,
-    "no-empty-character-class": 2,
-    "no-empty": 2,
-    "no-ex-assign": 2,
-    "no-extra-boolean-cast": 2,
-    "no-extra-semi": 2,
-    "no-func-assign": 2,
-    "no-inner-declarations": 2,
-    "no-invalid-regexp": 2,
-    "no-irregular-whitespace": 2,
-    "no-multiple-empty-lines": [2, { "max": 1 }],
-    "no-negated-in-lhs": 2,
-    "no-obj-calls": 2,
-    "no-regex-spaces": 2,
-    "no-sparse-arrays": 2,
-    "no-trailing-spaces": 2,
-    "no-undef": 2,
-    "no-unexpected-multiline": 2,
-    "no-unreachable": 2,
-    "no-unused-vars": 2,
-    "one-var": ["error", { "initialized": "never" }],
-    "quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
-    "semi": [2, "always"],
-    "semi-spacing": 2,
-    "space-infix-ops": 2,
-    "use-isnan": 2,
-    "valid-jsdoc": 2,
-    "valid-typeof": 2
-  }
-}
diff --git a/Changes.md b/Changes.md
index 73e549c..077764d 100644
--- a/Changes.md
+++ b/Changes.md
@@ -4,6 +4,19 @@ This file is a manually maintained list of changes for each release. Feel free
 to add your changes here when sending pull requests. Also send corrections if
 you spot any mistakes.
 
+## HEAD
+
+* Accept the `maxVersion` and `minVersion` properties in connection `ssl` option #2301 #2304
+* Support Node.js 14.x
+* Support Node.js 15.x
+* Support Node.js 16.x
+* Support Node.js 17.x
+* Update `bignumber.js` to 9.0.2
+* Update `safe-buffer` to 5.2.1
+* Update `sqlstring` to 2.3.3
+  - Fix escaping `Date` objects from foreign isolates
+  - perf: remove outdated array pattern
+
 ## v2.18.1 (2020-01-23)
 
 * Fix Amazon RDS profile for yaSSL MySQL servers with 2019 CA #2292
diff --git a/Readme.md b/Readme.md
index d7c9aa2..c83c147 100644
--- a/Readme.md
+++ b/Readme.md
@@ -3,7 +3,7 @@
 [![NPM Version][npm-version-image]][npm-url]
 [![NPM Downloads][npm-downloads-image]][npm-url]
 [![Node.js Version][node-image]][node-url]
-[![Linux Build][travis-image]][travis-url]
+[![Linux Build][github-actions-ci-image]][github-actions-ci-url]
 [![Windows Build][appveyor-image]][appveyor-url]
 [![Test Coverage][coveralls-image]][coveralls-url]
 
@@ -147,7 +147,7 @@ spend more time on it (ordered by time of contribution):
   video encoding as a service, check it out)
 * [Joyent](http://www.joyent.com/)
 * [pinkbike.com](http://pinkbike.com/)
-* [Holiday Extras](http://www.holidayextras.co.uk/) (they are [hiring](http://join.holidayextras.co.uk/))
+* [Holiday Extras](https://www.holidayextras.com/) (they are [hiring](https://join.holidayextras.co.uk/))
 * [Newscope](http://newscope.com/) (they are [hiring](https://newscope.com/unternehmen/jobs/))
 
 ## Community
@@ -217,8 +217,7 @@ When establishing a connection, you can set the following options:
 * `timezone`: The timezone configured on the MySQL server. This is used to type cast server date/time values to JavaScript `Date` object and vice versa. This can be `'local'`, `'Z'`, or an offset in the form `+HH:MM` or `-HH:MM`. (Default: `'local'`)
 * `connectTimeout`: The milliseconds before a timeout occurs during the initial connection
   to the MySQL server. (Default: `10000`)
-* `stringifyObjects`: Stringify objects instead of converting to values. See
-issue [#501](https://github.com/mysqljs/mysql/issues/501). (Default: `false`)
+* `stringifyObjects`: Stringify objects instead of converting to values. (Default: `false`)
 * `insecureAuth`: Allow connecting to MySQL instances that ask for the old
   (insecure) authentication method. (Default: `false`)
 * `typeCast`: Determines if column values should be converted to native
@@ -229,7 +228,7 @@ issue [#501](https://github.com/mysqljs/mysql/issues/501). (Default: `false`)
 * `bigNumberStrings`: Enabling both `supportBigNumbers` and `bigNumberStrings` forces big numbers
   (BIGINT and DECIMAL columns) to be always returned as JavaScript String objects (Default: `false`).
   Enabling `supportBigNumbers` but leaving `bigNumberStrings` disabled will return big numbers as String
-  objects only when they cannot be accurately represented with [JavaScript Number objects] (http://ecma262-5.com/ELS5_HTML.htm#Section_8.5)
+  objects only when they cannot be accurately represented with [JavaScript Number objects] (https://tc39.es/ecma262/#sec-ecmascript-language-types-number-type)
   (which happens when they exceed the [-2^53, +2^53] range), otherwise they will be returned as
   Number objects. This option is ignored if `supportBigNumbers` is disabled.
 * `dateStrings`: Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather than
@@ -268,10 +267,34 @@ it uses one of the predefined SSL profiles included. The following profiles are
   certificates from https://rds.amazonaws.com/doc/rds-ssl-ca-cert.pem and
   https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
 
-When connecting to other servers, you will need to provide an object of options, in the
-same format as [tls.createSecureContext](https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options).
-Please note the arguments expect a string of the certificate, not a file name to the
-certificate. Here is a simple example:
+When connecting to other servers, you will need to provide an object with any of the
+following options:
+
+* `ca`: The certificate(s) to trust instead of the ones Node.js is configured to trust. This refers
+  to the value of the certificate(s) and not a filename of the certificate(s). This is passed as the
+  `ca` option for the underlying [`tls.createSecureContext()`] call (or underlying [`crypto.createCredentials()`]
+  if using Node.js below 0.12).
+* `cert`: The client certificate to use in the SSL handshake. This is passed as the `cert` option for
+  the underlying [`tls.createSecureContext()`] call (or underlying [`crypto.createCredentials()`] if
+  using Node.js below 0.12).
+* `ciphers`: The ciphers to use to use in the SSL handshake instead of the default ones for Node.js. This
+  is passed as the `ciphers` option for [`tls.createSecureContext()`] call (or underlying [`crypto.createCredentials()`]
+  if using Node.js below 0.12).
+* `maxVersion`: This is passed as the `maxVersion` option for the underlying [`tls.createSecureContext()`]
+  call.
+* `minVersion`: This is passed as the `minVersion` option for the underlying [`tls.createSecureContext()`]
+  call.
+* `key`: This is passed as the `key` option for [`tls.createSecureContext()`] call (or underlying
+  [`crypto.createCredentials()`] if using Node.js below 0.12).
+* `passphrase`: This is passed as the `passphrase` option for [`tls.createSecureContext()`] call (or
+  underlying [`crypto.createCredentials()`] if using Node.js below 0.12).
+* `rejectUnauthorized`: The server certificate is verified against the list of supplied CAs and the
+  hostname, and if no match is found, the SSL connection will fail. (Default: `true`)
+
+[`crypto.createCredentials()`]: https://nodejs.org/docs/latest-v0.10.x/api/crypto.html#crypto_crypto_createcredentials_details
+[`tls.createSecureContext()`]: https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options
+
+Here is a simple example:
 
 ```js
 var connection = mysql.createConnection({
@@ -364,9 +387,9 @@ connection.end(function(err) {
 });
 ```
 
-This will make sure all previously enqueued queries are still before sending a
-`COM_QUIT` packet to the MySQL server. If a fatal error occurs before the
-`COM_QUIT` packet can be sent, an `err` argument will be provided to the
+This will make sure all previously enqueued queries are still executed before
+sending a `COM_QUIT` packet to the MySQL server. If a fatal error occurs before
+the `COM_QUIT` packet can be sent, an `err` argument will be provided to the
 callback, but the connection will be terminated regardless of that.
 
 An alternative way to end the connection is to call the `destroy()` method.
@@ -662,7 +685,7 @@ be set to restore offline nodes after a given timeout.
 The most basic way to perform a query is to call the `.query()` method on an object
 (like a `Connection`, `Pool`, or `PoolNamespace` instance).
 
-The simplest form of .`query()` is `.query(sqlString, callback)`, where a SQL string
+The simplest form of `.query()` is `.query(sqlString, callback)`, where a SQL string
 is the first argument and the second is a callback:
 
 ```js
@@ -687,7 +710,7 @@ connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function
 The third form `.query(options, callback)` comes when using various advanced
 options on the query, like [escaping query values](#escaping-query-values),
 [joins with overlapping column names](#joins-with-overlapping-column-names),
-[timeouts](#timeout), and [type casting](#type-casting).
+[timeouts](#timeouts), and [type casting](#type-casting).
 
 ```js
 connection.query({
@@ -741,6 +764,18 @@ connection.query(
 [NO_BACKSLASH_ESCAPES](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_backslash_escapes)
 SQL mode is disabled (which is the default state for MySQL servers).
 
+**Caution** This library performs client-side escaping, as this is a library
+to generate SQL strings on the client side. The syntax for functions like
+`mysql.format` may look similar to a prepared statement, but it is not
+and the escaping rules from this module are used to generate a resulting SQL
+string. The purpose of escaping input is to avoid SQL Injection attacks.
+In order to support enhanced support like `SET` and `IN` formatting, this
+module will escape based on the shape of the passed in JavaScript value,
+and the resulting escaped string may be more than a single value. When
+structured user input is provided as the value to escape, care should be taken
+to validate the shape of the input to validate the output will be what is
+expected.
+
 In order to avoid SQL Injection attacks, you should always escape any user
 provided data before using it inside a SQL query. You can do so using the
 `mysql.escape()`, `connection.escape()` or `pool.escape()` methods:
@@ -1249,16 +1284,16 @@ object. Additionally they typically come with two extra properties:
 * `err.sqlMessage`: String, contains the message string that provides a
   textual description of the error. Only populated from [MySQL server error][].
 
-[Error]: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error
+[Error]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
 [MySQL server error]: https://dev.mysql.com/doc/refman/5.5/en/server-error-reference.html
 
 Fatal errors are propagated to *all* pending callbacks. In the example below, a
-fatal error is triggered by trying to connect to an invalid port. Therefore the
+fatal error is triggered by trying to connect to a blocked port. Therefore the
 error object is propagated to both pending callbacks:
 
 ```js
 var connection = require('mysql').createConnection({
-  port: 84943, // WRONG PORT
+  port: 1 // example blocked port
 });
 
 connection.connect(function(err) {
@@ -1321,7 +1356,8 @@ one of your callback functions throws an error which you're catching using
 ## Type casting
 
 For your convenience, this driver will cast mysql types into native JavaScript
-types by default. The following mappings exist:
+types by default. The default behavior can be changed through various
+[Connection options](#connection-options). The following mappings exist:
 
 ### Number
 
@@ -1332,6 +1368,7 @@ types by default. The following mappings exist:
 * YEAR
 * FLOAT
 * DOUBLE
+* BIGINT
 
 ### Date
 
@@ -1363,7 +1400,6 @@ than a string.
 * ENUM
 * SET
 * DECIMAL (may exceed float precision)
-* BIGINT (may exceed float precision)
 * TIME (could be mapped to Date, but what date would be set?)
 * GEOMETRY (never used those, get in touch if you do)
 
@@ -1539,10 +1575,10 @@ $ MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_DATABASE=node_mysql_test MYSQL_USER
 [appveyor-url]: https://ci.appveyor.com/project/dougwilson/node-mysql
 [coveralls-image]: https://badgen.net/coveralls/c/github/mysqljs/mysql/master
 [coveralls-url]: https://coveralls.io/r/mysqljs/mysql?branch=master
+[github-actions-ci-image]: https://badgen.net/github/checks/mysqljs/mysql/master?label=linux
+[github-actions-ci-url]: https://github.com/mysqljs/mysql/actions/workflows/ci.yml
 [node-image]: https://badgen.net/npm/node/mysql
 [node-url]: https://nodejs.org/en/download
 [npm-downloads-image]: https://badgen.net/npm/dm/mysql
 [npm-url]: https://npmjs.org/package/mysql
 [npm-version-image]: https://badgen.net/npm/v/mysql
-[travis-image]: https://badgen.net/travis/mysqljs/mysql/master
-[travis-url]: https://travis-ci.org/mysqljs/mysql
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 7e2cbb4..0000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,57 +0,0 @@
-environment:
-  MYSQL_DATABASE: node_mysql
-  MYSQL_HOST: localhost
-  MYSQL_USER: root
-  MYSQL_PASSWORD: Password12!
-  MYSQL_PATH: C:\Program Files\MySQL\MySQL Server 5.7
-  MYSQL_PORT: 3306
-
-  matrix:
-    - nodejs_version: "0.8"
-    - nodejs_version: "0.10"
-    - nodejs_version: "0.12"
-    - nodejs_version: "1.8"
-    - nodejs_version: "2.5"
-    - nodejs_version: "3.3"
-    - nodejs_version: "4.9"
-    - nodejs_version: "5.12"
-    - nodejs_version: "6.17"
-    - nodejs_version: "7.10"
-    - nodejs_version: "8.17"
-    - nodejs_version: "9.11"
-    - nodejs_version: "10.18"
-    - nodejs_version: "11.15"
-    - nodejs_version: "12.14"
-    - nodejs_version: "13.6"
-
-services:
-  - mysql
-
-cache:
-  - node_modules
-
-install:
-  - ps: >-
-      try { Install-Product node $env:nodejs_version -ErrorAction Stop }
-      catch { Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) }
-  - npm config set shrinkwrap false
-  - if "%nodejs_version%" equ "0.8" npm config set strict-ssl false
-  - npm rm --silent --save-dev eslint
-  - if exist node_modules npm prune
-  - if exist node_modules npm rebuild
-  - npm install
-
-build: off
-
-before_test:
-  - SET PATH=%MYSQL_PATH%\bin;%PATH%
-  - node tool/wait-mysql.js %MYSQL_PORT% %MYSQL_HOST%
-  - mysqladmin --host=%MYSQL_HOST% --user=%MYSQL_USER% --password=%MYSQL_PASSWORD% create %MYSQL_DATABASE%
-
-test_script:
-  - mysql --version
-  - node --version
-  - npm --version
-  - npm test
-
-version: "{build}"
diff --git a/benchmark/analyze.js b/benchmark/analyze.js
deleted file mode 100644
index 439a253..0000000
--- a/benchmark/analyze.js
+++ /dev/null
@@ -1,98 +0,0 @@
-var script = process.cwd() + '/' + process.argv[2];
-var spawn  = require('child_process').spawn;
-
-var numbers       = [];
-var boringResults = 0;
-var scriptRuns    = 0;
-
-function runScript() {
-  scriptRuns++;
-
-  var child = spawn(process.execPath, [script]);
-
-  var buffer = '';
-  child.stdout.on('data', function(chunk) {
-    buffer += chunk;
-
-    var offset;
-    while ((offset = buffer.indexOf('\n')) > -1) {
-      var number = parseInt(buffer.substr(0, offset), 10);
-      buffer = buffer.substr(offset + 1);
-
-      var maxBefore = max();
-      var minBefore = min();
-
-      numbers.push(number);
-
-      if (maxBefore === max() && minBefore === min()) {
-        boringResults++;
-      }
-
-      if (boringResults > 10) {
-        boringResults = 0;
-        child.kill();
-        runScript();
-      }
-    }
-  });
-}
-
-function report() {
-  console.log(
-    'max: %s | median: %s | sdev: %s | last: %s | min: %s | runs: %s | results: %s',
-    max(),
-    median(),
-    sdev(),
-    numbers[numbers.length - 1],
-    min(),
-    scriptRuns,
-    numbers.length
-  );
-}
-
-function min() {
-  if (!numbers.length) return undefined;
-
-  return numbers.reduce(function(min, number) {
-    return (number < min)
-      ? number
-      : min;
-  });
-}
-
-function max() {
-  if (!numbers.length) return undefined;
-
-  return numbers.reduce(function(max, number) {
-    return (number > max)
-      ? number
-      : max;
-  });
-}
-
-function median() {
-  return numbers[Math.floor(numbers.length / 2)];
-}
-
-function sdev() {
-  if (!numbers.length) return undefined;
-
-  return Math.round(Math.sqrt(variance()));
-}
-
-function variance() {
-  var t       = 0;
-  var squares = 0;
-  var len     = numbers.length;
-
-  for (var i = 0; i < len; i++) {
-    var obs = numbers[i];
-    t += obs;
-    squares += Math.pow(obs, 2);
-  }
-  return (squares / len) - Math.pow(t / len, 2);
-}
-
-setInterval(report, 1000);
-
-runScript();
diff --git a/benchmark/parse-100k-blog-rows.js b/benchmark/parse-100k-blog-rows.js
deleted file mode 100644
index 71dd1de..0000000
--- a/benchmark/parse-100k-blog-rows.js
+++ /dev/null
@@ -1,115 +0,0 @@
-var lib          = __dirname + '/../lib';
-var Buffer       = require('safe-buffer').Buffer;
-var Protocol     = require(lib + '/protocol/protocol');
-var Packets      = require(lib + '/protocol/packets');
-var PacketWriter = require(lib + '/protocol/PacketWriter');
-var Parser       = require(lib + '/protocol/Parser');
-
-var options = {
-  rows       : 100000,
-  bufferSize : 64 * 1024
-};
-
-var buffers = createBuffers();
-
-console.error('Config:', options);
-run();
-
-function createBuffers() {
-  var parser = new Parser();
-
-  process.stderr.write('Creating row buffers ... ');
-
-  var number = 1;
-  var start  = Date.now();
-
-  var buffers = [
-    createPacketBuffer(parser, new Packets.ResultSetHeaderPacket({fieldCount: 2})),
-    createPacketBuffer(parser, new Packets.FieldPacket({catalog: 'foo', name: 'id'})),
-    createPacketBuffer(parser, new Packets.FieldPacket({catalog: 'foo', name: 'text'})),
-    createPacketBuffer(parser, new Packets.EofPacket())
-  ];
-
-  for (var i = 0; i < options.rows; i++) {
-    buffers.push(createRowDataPacketBuffer(parser, number++));
-  }
-
-  buffers.push(createPacketBuffer(parser, new Packets.EofPacket()));
-
-  buffers = mergeBuffers(buffers);
-
-  var bytes = buffers.reduce(function(bytes, buffer) {
-    return bytes + buffer.length;
-  }, 0);
-
-  var mb = (bytes / 1024 / 1024).toFixed(2);
-
-  console.error('%s buffers (%s mb) in %s ms', buffers.length, mb, (Date.now() - start));
-
-  return buffers;
-}
-
-function createPacketBuffer(parser, packet) {
-  var writer = new PacketWriter();
-  packet.write(writer);
-  return writer.toBuffer(parser);
-}
-
-function createRowDataPacketBuffer(parser) {
-  var writer = new PacketWriter();
-
-  writer.writeLengthCodedString(parser._nextPacketNumber);
-  writer.writeLengthCodedString('Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has sur');
-
-  return writer.toBuffer(parser);
-}
-
-function mergeBuffers(buffers) {
-  var mergeBuffer  = Buffer.alloc(options.bufferSize);
-  var mergeBuffers = [];
-  var offset       = 0;
-
-  for (var i = 0; i < buffers.length; i++) {
-    var buffer = buffers[i];
-
-    var bytesRemaining = mergeBuffer.length - offset;
-    if (buffer.length < bytesRemaining) {
-      buffer.copy(mergeBuffer, offset);
-      offset += buffer.length;
-    } else {
-      buffer.copy(mergeBuffer, offset, 0, bytesRemaining);
-      mergeBuffers.push(mergeBuffer);
-
-      mergeBuffer = Buffer.alloc(options.bufferSize);
-      buffer.copy(mergeBuffer, 0, bytesRemaining);
-      offset = buffer.length - bytesRemaining;
-    }
-  }
-
-  if (offset > 0) {
-    mergeBuffers.push(mergeBuffer.slice(0, offset));
-  }
-
-  return mergeBuffers;
-}
-
-function benchmark(buffers) {
-  var protocol = new Protocol();
-  protocol._handshakeInitializationPacket = true;
-  protocol.query({typeCast: false, sql: 'SELECT ...'});
-
-  var start = +new Date();
-
-  for (var i = 0; i < buffers.length; i++) {
-    protocol.write(buffers[i]);
-  }
-
-  var duration = Date.now() - start;
-  var hz = Math.round(options.rows / (duration / 1000));
-  console.log(hz);
-}
-
-function run() {
-  benchmark(buffers);
-  process.nextTick(run);
-}
diff --git a/benchmark/select-100k-blog-rows.js b/benchmark/select-100k-blog-rows.js
deleted file mode 100644
index d36ed26..0000000
--- a/benchmark/select-100k-blog-rows.js
+++ /dev/null
@@ -1,42 +0,0 @@
-var common     = require('../test/common');
-var client     = common.createConnection({typeCast: false});
-var rowsPerRun = 100000;
-
-client.connect(function(err) {
-  if (err) throw err;
-
-  client.query('USE node_mysql_test', function(err) {
-    if (err) throw err;
-
-    selectRows();
-  });
-});
-
-var firstSelect;
-var rowCount = 0;
-
-console.error('Benchmarking rows per second in hz:');
-
-function selectRows() {
-  firstSelect = firstSelect || Date.now();
-
-  client.query('SELECT * FROM posts', function(err, rows) {
-    if (err) throw err;
-
-    rowCount += rows.length;
-    if (rowCount < rowsPerRun) {
-      selectRows();
-      return;
-    }
-
-    var duration = (Date.now() - firstSelect) / 1000;
-    var hz = Math.round(rowCount / duration);
-
-    console.log(hz);
-
-    rowCount    = 0;
-    firstSelect = null;
-
-    selectRows();
-  });
-}
diff --git a/debian/changelog b/debian/changelog
index d38c820..e8d4d78 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+node-mysql (2.18.1+~2.3.2+git20220313.1.dc9c152-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 27 Mar 2022 23:02:02 -0000
+
 node-mysql (2.18.1+~2.3.2-1) unstable; urgency=medium
 
   * Team upload
diff --git a/lib/Connection.js b/lib/Connection.js
index 6802255..76fcbb0 100644
--- a/lib/Connection.js
+++ b/lib/Connection.js
@@ -306,7 +306,7 @@ if (tls.TLSSocket) {
       });
 
       // cleartext <-> protocol
-      secureSocket.pipe(connection._protocol);
+      secureSocket.pipe(connection._protocol, { end: false });
       connection._protocol.on('data', function(data) {
         secureSocket.write(data);
       });
@@ -465,6 +465,8 @@ function createSecureContext (config, cb) {
       cert       : config.ssl.cert,
       ciphers    : config.ssl.ciphers,
       key        : config.ssl.key,
+      maxVersion : config.ssl.maxVersion,
+      minVersion : config.ssl.minVersion,
       passphrase : config.ssl.passphrase
     });
   } catch (err) {
diff --git a/package.json b/package.json
index 7ed9d55..c587ea4 100644
--- a/package.json
+++ b/package.json
@@ -13,16 +13,15 @@
   ],
   "repository": "mysqljs/mysql",
   "dependencies": {
-    "bignumber.js": "9.0.0",
+    "bignumber.js": "9.0.2",
     "readable-stream": "2.3.7",
-    "safe-buffer": "5.1.2",
-    "sqlstring": "2.3.1"
+    "safe-buffer": "5.2.1",
+    "sqlstring": "2.3.3"
   },
   "devDependencies": {
     "after": "0.8.2",
-    "eslint": "5.16.0",
+    "eslint": "7.32.0",
     "seedrandom": "3.0.5",
-    "timezone-mock": "0.0.7",
     "urun": "0.0.8",
     "utest": "0.0.8"
   },
@@ -39,7 +38,7 @@
   "scripts": {
     "lint": "eslint . && node tool/lint-readme.js",
     "test": "node test/run.js",
-    "test-ci": "node tool/install-nyc.js --nyc-optional --reporter=text -- npm test",
+    "test-ci": "node tool/install-nyc.js --nyc-optional --reporter=lcovonly --reporter=text -- npm test",
     "test-cov": "node tool/install-nyc.js --reporter=html --reporter=text -- npm test",
     "version": "node tool/version-changes.js && git add Changes.md"
   }
diff --git a/sqlstring/.editorconfig b/sqlstring/.editorconfig
deleted file mode 100644
index cdb36c1..0000000
--- a/sqlstring/.editorconfig
+++ /dev/null
@@ -1,11 +0,0 @@
-# http://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[{*.js,*.json,*.yml}]
-indent_size = 2
-indent_style = space
diff --git a/sqlstring/.eslintignore b/sqlstring/.eslintignore
deleted file mode 100644
index c1cb757..0000000
--- a/sqlstring/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.nyc_output/
-coverage/
diff --git a/sqlstring/.eslintrc b/sqlstring/.eslintrc
deleted file mode 100644
index c50229d..0000000
--- a/sqlstring/.eslintrc
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "env": {
-    "node": true
-  },
-  "rules": {
-    "comma-dangle": [2, "never"],
-    "comma-spacing": ["error", { "before": false, "after": true }],
-    "consistent-return": 2,
-    "eqeqeq": [2, "allow-null"],
-    "indent": [2, 2, { "VariableDeclarator": 2, "SwitchCase": 1 }],
-    "key-spacing": [2, { "align": { "beforeColon": true, "afterColon": true, "on": "colon" } }],
-    "keyword-spacing": 2,
-    "new-parens": 2,
-    "no-cond-assign": 2,
-    "no-constant-condition": 2,
-    "no-control-regex": 2,
-    "no-debugger": 2,
-    "no-dupe-args": 2,
-    "no-dupe-keys": 2,
-    "no-duplicate-case": 2,
-    "no-empty-character-class": 2,
-    "no-empty": 2,
-    "no-ex-assign": 2,
-    "no-extra-boolean-cast": 2,
-    "no-extra-semi": 2,
-    "no-func-assign": 2,
-    "no-inner-declarations": 2,
-    "no-invalid-regexp": 2,
-    "no-irregular-whitespace": 2,
-    "no-multiple-empty-lines": [2, { "max": 1 }],
-    "no-negated-in-lhs": 2,
-    "no-obj-calls": 2,
-    "no-regex-spaces": 2,
-    "no-sparse-arrays": 2,
-    "no-trailing-spaces": 2,
-    "no-undef": 2,
-    "no-unexpected-multiline": 2,
-    "no-unreachable": 2,
-    "no-unused-vars": 2,
-    "one-var": ["error", { "initialized": "never" }],
-    "quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
-    "semi": [2, "always"],
-    "semi-spacing": 2,
-    "space-infix-ops": 2,
-    "use-isnan": 2,
-    "valid-jsdoc": 2,
-    "valid-typeof": 2
-  }
-}
diff --git a/sqlstring/HISTORY.md b/sqlstring/HISTORY.md
deleted file mode 100644
index e5afa0c..0000000
--- a/sqlstring/HISTORY.md
+++ /dev/null
@@ -1,48 +0,0 @@
-2.3.2 / 2020-04-15
-==================
-
-  * perf: remove outdated array pattern
-
-2.3.1 / 2018-02-24
-==================
-
-  * Fix incorrectly replacing non-placeholders in SQL
-
-2.3.0 / 2017-10-01
-==================
-
-  * Add `.toSqlString()` escape overriding
-  * Add `raw` method to wrap raw strings for escape overriding
-  * Small performance improvement on `escapeId`
-
-2.2.0 / 2016-11-01
-==================
-
-  * Escape invalid `Date` objects as `NULL`
-
-2.1.0 / 2016-09-26
-==================
-
-  * Accept numbers and other value types in `escapeId`
-  * Run `buffer.toString()` through escaping
-
-2.0.1 / 2016-06-06
-==================
-
-  * Fix npm package to include missing `lib/` directory
-
-2.0.0 / 2016-06-06
-==================
-
-  * Bring repository up-to-date with `mysql` module changes
-  * Support Node.js 0.6.x
-
-1.0.0 / 2014-11-09
-==================
-
-  * Support Node.js 0.8.x
-
-0.0.1 / 2014-02-25
-==================
-
-  * Initial release
diff --git a/sqlstring/LICENSE b/sqlstring/LICENSE
deleted file mode 100644
index c7ff12a..0000000
--- a/sqlstring/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
diff --git a/sqlstring/README.md b/sqlstring/README.md
deleted file mode 100644
index bdde7a9..0000000
--- a/sqlstring/README.md
+++ /dev/null
@@ -1,232 +0,0 @@
-# sqlstring
-
-[![NPM Version][npm-version-image]][npm-url]
-[![NPM Downloads][npm-downloads-image]][npm-url]
-[![Node.js Version][node-image]][node-url]
-[![Build Status][travis-image]][travis-url]
-[![Coverage Status][coveralls-image]][coveralls-url]
-
-Simple SQL escape and format for MySQL
-
-## Install
-
-```sh
-$ npm install sqlstring
-```
-
-## Usage
-
-<!-- eslint-disable no-undef, no-unused-vars -->
-
-```js
-var SqlString = require('sqlstring');
-```
-
-### Escaping query values
-
-**Caution** These methods of escaping values only works when the
-[NO_BACKSLASH_ESCAPES](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_backslash_escapes)
-SQL mode is disabled (which is the default state for MySQL servers).
-
-In order to avoid SQL Injection attacks, you should always escape any user
-provided data before using it inside a SQL query. You can do so using the
-`SqlString.escape()` method:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId = 'some user provided value';
-var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
-console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
-```
-
-Alternatively, you can use `?` characters as placeholders for values you would
-like to have escaped like this:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId = 1;
-var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
-console.log(sql); // SELECT * FROM users WHERE id = 1
-```
-
-Multiple placeholders are mapped to values in the same order as passed. For example,
-in the following query `foo` equals `a`, `bar` equals `b`, `baz` equals `c`, and
-`id` will be `userId`:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId = 1;
-var sql    = SqlString.format('UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?',
-  ['a', 'b', 'c', userId]);
-console.log(sql); // UPDATE users SET foo = 'a', bar = 'b', baz = 'c' WHERE id = 1
-```
-
-This looks similar to prepared statements in MySQL, however it really just uses
-the same `SqlString.escape()` method internally.
-
-**Caution** This also differs from prepared statements in that all `?` are
-replaced, even those contained in comments and strings.
-
-Different value types are escaped differently, here is how:
-
-* Numbers are left untouched
-* Booleans are converted to `true` / `false`
-* Date objects are converted to `'YYYY-mm-dd HH:ii:ss'` strings
-* Buffers are converted to hex strings, e.g. `X'0fa5'`
-* Strings are safely escaped
-* Arrays are turned into list, e.g. `['a', 'b']` turns into `'a', 'b'`
-* Nested arrays are turned into grouped lists (for bulk inserts), e.g. `[['a',
-  'b'], ['c', 'd']]` turns into `('a', 'b'), ('c', 'd')`
-* Objects that have a `toSqlString` method will have `.toSqlString()` called
-  and the returned value is used as the raw SQL.
-* Objects are turned into `key = 'val'` pairs for each enumerable property on
-  the object. If the property's value is a function, it is skipped; if the
-  property's value is an object, toString() is called on it and the returned
-  value is used.
-* `undefined` / `null` are converted to `NULL`
-* `NaN` / `Infinity` are left as-is. MySQL does not support these, and trying
-  to insert them as values will trigger MySQL errors until they implement
-  support.
-
-You may have noticed that this escaping allows you to do neat things like this:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var post  = {id: 1, title: 'Hello MySQL'};
-var sql = SqlString.format('INSERT INTO posts SET ?', post);
-console.log(sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'
-```
-
-And the `toSqlString` method allows you to form complex queries with functions:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var CURRENT_TIMESTAMP = { toSqlString: function() { return 'CURRENT_TIMESTAMP()'; } };
-var sql = SqlString.format('UPDATE posts SET modified = ? WHERE id = ?', [CURRENT_TIMESTAMP, 42]);
-console.log(sql); // UPDATE posts SET modified = CURRENT_TIMESTAMP() WHERE id = 42
-```
-
-To generate objects with a `toSqlString` method, the `SqlString.raw()` method can
-be used. This creates an object that will be left un-touched when using in a `?`
-placeholder, useful for using functions as dynamic values:
-
-**Caution** The string provided to `SqlString.raw()` will skip all escaping
-functions when used, so be careful when passing in unvalidated input.
-
-<!-- eslint-disable no-undef -->
-
-```js
-var CURRENT_TIMESTAMP = SqlString.raw('CURRENT_TIMESTAMP()');
-var sql = SqlString.format('UPDATE posts SET modified = ? WHERE id = ?', [CURRENT_TIMESTAMP, 42]);
-console.log(sql); // UPDATE posts SET modified = CURRENT_TIMESTAMP() WHERE id = 42
-```
-
-If you feel the need to escape queries by yourself, you can also use the escaping
-function directly:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var sql = 'SELECT * FROM posts WHERE title=' + SqlString.escape('Hello MySQL');
-console.log(sql); // SELECT * FROM posts WHERE title='Hello MySQL'
-```
-
-### Escaping query identifiers
-
-If you can't trust an SQL identifier (database / table / column name) because it is
-provided by a user, you should escape it with `SqlString.escapeId(identifier)` like this:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var sorter = 'date';
-var sql    = 'SELECT * FROM posts ORDER BY ' + SqlString.escapeId(sorter);
-console.log(sql); // SELECT * FROM posts ORDER BY `date`
-```
-
-It also supports adding qualified identifiers. It will escape both parts.
-
-<!-- eslint-disable no-undef -->
-
-```js
-var sorter = 'date';
-var sql    = 'SELECT * FROM posts ORDER BY ' + SqlString.escapeId('posts.' + sorter);
-console.log(sql); // SELECT * FROM posts ORDER BY `posts`.`date`
-```
-
-If you do not want to treat `.` as qualified identifiers, you can set the second
-argument to `true` in order to keep the string as a literal identifier:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var sorter = 'date.2';
-var sql    = 'SELECT * FROM posts ORDER BY ' + SqlString.escapeId(sorter, true);
-console.log(sql); // SELECT * FROM posts ORDER BY `date.2`
-```
-
-Alternatively, you can use `??` characters as placeholders for identifiers you would
-like to have escaped like this:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId = 1;
-var columns = ['username', 'email'];
-var sql     = SqlString.format('SELECT ?? FROM ?? WHERE id = ?', [columns, 'users', userId]);
-console.log(sql); // SELECT `username`, `email` FROM `users` WHERE id = 1
-```
-**Please note that this last character sequence is experimental and syntax might change**
-
-When you pass an Object to `.escape()` or `.format()`, `.escapeId()` is used to avoid SQL injection in object keys.
-
-### Formatting queries
-
-You can use `SqlString.format` to prepare a query with multiple insertion points,
-utilizing the proper escaping for ids and values. A simple example of this follows:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId  = 1;
-var inserts = ['users', 'id', userId];
-var sql     = SqlString.format('SELECT * FROM ?? WHERE ?? = ?', inserts);
-console.log(sql); // SELECT * FROM `users` WHERE `id` = 1
-```
-
-Following this you then have a valid, escaped query that you can then send to the database safely.
-This is useful if you are looking to prepare the query before actually sending it to the database.
-You also have the option (but are not required) to pass in `stringifyObject` and `timeZone`,
-allowing you provide a custom means of turning objects into strings, as well as a
-location-specific/timezone-aware `Date`.
-
-This can be further combined with the `SqlString.raw()` helper to generate SQL
-that includes MySQL functions as dynamic vales:
-
-<!-- eslint-disable no-undef -->
-
-```js
-var userId = 1;
-var data   = { email: 'foobar@example.com', modified: SqlString.raw('NOW()') };
-var sql    = SqlString.format('UPDATE ?? SET ? WHERE `id` = ?', ['users', data, userId]);
-console.log(sql); // UPDATE `users` SET `email` = 'foobar@example.com', `modified` = NOW() WHERE `id` = 1
-```
-
-## License
-
-[MIT](LICENSE)
-
-[npm-version-image]: https://img.shields.io/npm/v/sqlstring.svg
-[npm-downloads-image]: https://img.shields.io/npm/dm/sqlstring.svg
-[npm-url]: https://npmjs.org/package/sqlstring
-[travis-image]: https://img.shields.io/travis/mysqljs/sqlstring/master.svg
-[travis-url]: https://travis-ci.org/mysqljs/sqlstring
-[coveralls-image]: https://img.shields.io/coveralls/mysqljs/sqlstring/master.svg
-[coveralls-url]: https://coveralls.io/r/mysqljs/sqlstring?branch=master
-[node-image]: https://img.shields.io/node/v/sqlstring.svg
-[node-url]: https://nodejs.org/en/download
diff --git a/sqlstring/benchmark/escape.js b/sqlstring/benchmark/escape.js
deleted file mode 100644
index c195de4..0000000
--- a/sqlstring/benchmark/escape.js
+++ /dev/null
@@ -1,76 +0,0 @@
-var benchmark  = require('benchmark');
-var benchmarks = require('beautify-benchmark');
-
-global.SqlString = require('..');
-
-global.arr  = [ 42, 'foobar' ];
-global.buf  = new Buffer('foobar');
-global.date = new Date(0);
-global.func = { toSqlString: function () { return 'NOW()'; } };
-global.num  = 42;
-global.obj  = { foo: 'bar' };
-global.str  = 'foobar';
-
-var suite = new benchmark.Suite();
-
-suite.add({
-  name       : 'array',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(arr);'
-});
-
-suite.add({
-  name       : 'boolean',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(true);'
-});
-
-suite.add({
-  name       : 'date',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(date);'
-});
-
-suite.add({
-  name       : 'function',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(func);'
-});
-
-suite.add({
-  name       : 'null',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(null);'
-});
-
-suite.add({
-  name       : 'number',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(num);'
-});
-
-suite.add({
-  name       : 'object',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(obj);'
-});
-
-suite.add({
-  name       : 'string',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escape(str);'
-});
-
-suite.on('start', function onCycle() {
-  process.stdout.write('  escape\n\n');
-});
-
-suite.on('cycle', function onCycle(event) {
-  benchmarks.add(event.target);
-});
-
-suite.on('complete', function onComplete() {
-  benchmarks.log();
-});
-
-suite.run({async: false});
diff --git a/sqlstring/benchmark/escapeId.js b/sqlstring/benchmark/escapeId.js
deleted file mode 100644
index 3113bd0..0000000
--- a/sqlstring/benchmark/escapeId.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var benchmark  = require('benchmark');
-var benchmarks = require('beautify-benchmark');
-
-global.SqlString = require('..');
-
-var suite = new benchmark.Suite();
-
-suite.add({
-  name       : '"col"',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escapeId("col");'
-});
-
-suite.add({
-  name       : '"tbl.col"',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escapeId("tbl.col");'
-});
-
-suite.add({
-  name       : '["col1", "col2"]',
-  minSamples : 100,
-  fn         : 'var val = SqlString.escapeId(["col1", "col2"]);'
-});
-
-suite.on('start', function onCycle() {
-  process.stdout.write('  escapeId\n\n');
-});
-
-suite.on('cycle', function onCycle(event) {
-  benchmarks.add(event.target);
-});
-
-suite.on('complete', function onComplete() {
-  benchmarks.log();
-});
-
-suite.run({async: false});
diff --git a/sqlstring/benchmark/index.js b/sqlstring/benchmark/index.js
deleted file mode 100644
index 5c16f5e..0000000
--- a/sqlstring/benchmark/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var fs    = require('fs');
-var path  = require('path');
-var spawn = require('child_process').spawn;
-
-var exe = process.argv[0];
-var cwd = process.cwd();
-
-for (var dep in process.versions) {
-  console.log('  %s@%s', dep, process.versions[dep]);
-}
-
-console.log('');
-
-runScripts(fs.readdirSync(__dirname));
-
-function runScripts(fileNames) {
-  var fileName = fileNames.shift();
-
-  if (!fileName) {
-    return;
-  }
-
-  if (!/\.js$/i.test(fileName) || fileName.toLowerCase() === 'index.js') {
-    runScripts(fileNames);
-    return;
-  }
-
-  var fullPath = path.join(__dirname, fileName);
-
-  console.log('> %s %s', exe, path.relative(cwd, fullPath));
-
-  var proc = spawn(exe, [fullPath], {
-    'stdio': 'inherit'
-  });
-
-  proc.on('exit', function () {
-    runScripts(fileNames);
-  });
-}
diff --git a/sqlstring/index.js b/sqlstring/index.js
deleted file mode 100644
index 4ef5944..0000000
--- a/sqlstring/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib/SqlString');
diff --git a/sqlstring/lib/SqlString.js b/sqlstring/lib/SqlString.js
deleted file mode 100644
index 4567bfa..0000000
--- a/sqlstring/lib/SqlString.js
+++ /dev/null
@@ -1,237 +0,0 @@
-var SqlString  = exports;
-
-var ID_GLOBAL_REGEXP    = /`/g;
-var QUAL_GLOBAL_REGEXP  = /\./g;
-var CHARS_GLOBAL_REGEXP = /[\0\b\t\n\r\x1a\"\'\\]/g; // eslint-disable-line no-control-regex
-var CHARS_ESCAPE_MAP    = {
-  '\0'   : '\\0',
-  '\b'   : '\\b',
-  '\t'   : '\\t',
-  '\n'   : '\\n',
-  '\r'   : '\\r',
-  '\x1a' : '\\Z',
-  '"'    : '\\"',
-  '\''   : '\\\'',
-  '\\'   : '\\\\'
-};
-
-SqlString.escapeId = function escapeId(val, forbidQualified) {
-  if (Array.isArray(val)) {
-    var sql = '';
-
-    for (var i = 0; i < val.length; i++) {
-      sql += (i === 0 ? '' : ', ') + SqlString.escapeId(val[i], forbidQualified);
-    }
-
-    return sql;
-  } else if (forbidQualified) {
-    return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``') + '`';
-  } else {
-    return '`' + String(val).replace(ID_GLOBAL_REGEXP, '``').replace(QUAL_GLOBAL_REGEXP, '`.`') + '`';
-  }
-};
-
-SqlString.escape = function escape(val, stringifyObjects, timeZone) {
-  if (val === undefined || val === null) {
-    return 'NULL';
-  }
-
-  switch (typeof val) {
-    case 'boolean': return (val) ? 'true' : 'false';
-    case 'number': return val + '';
-    case 'object':
-      if (val instanceof Date) {
-        return SqlString.dateToString(val, timeZone || 'local');
-      } else if (Array.isArray(val)) {
-        return SqlString.arrayToList(val, timeZone);
-      } else if (Buffer.isBuffer(val)) {
-        return SqlString.bufferToString(val);
-      } else if (typeof val.toSqlString === 'function') {
-        return String(val.toSqlString());
-      } else if (stringifyObjects) {
-        return escapeString(val.toString());
-      } else {
-        return SqlString.objectToValues(val, timeZone);
-      }
-    default: return escapeString(val);
-  }
-};
-
-SqlString.arrayToList = function arrayToList(array, timeZone) {
-  var sql = '';
-
-  for (var i = 0; i < array.length; i++) {
-    var val = array[i];
-
-    if (Array.isArray(val)) {
-      sql += (i === 0 ? '' : ', ') + '(' + SqlString.arrayToList(val, timeZone) + ')';
-    } else {
-      sql += (i === 0 ? '' : ', ') + SqlString.escape(val, true, timeZone);
-    }
-  }
-
-  return sql;
-};
-
-SqlString.format = function format(sql, values, stringifyObjects, timeZone) {
-  if (values == null) {
-    return sql;
-  }
-
-  if (!Array.isArray(values)) {
-    values = [values];
-  }
-
-  var chunkIndex        = 0;
-  var placeholdersRegex = /\?+/g;
-  var result            = '';
-  var valuesIndex       = 0;
-  var match;
-
-  while (valuesIndex < values.length && (match = placeholdersRegex.exec(sql))) {
-    var len = match[0].length;
-
-    if (len > 2) {
-      continue;
-    }
-
-    var value = len === 2
-      ? SqlString.escapeId(values[valuesIndex])
-      : SqlString.escape(values[valuesIndex], stringifyObjects, timeZone);
-
-    result += sql.slice(chunkIndex, match.index) + value;
-    chunkIndex = placeholdersRegex.lastIndex;
-    valuesIndex++;
-  }
-
-  if (chunkIndex === 0) {
-    // Nothing was replaced
-    return sql;
-  }
-
-  if (chunkIndex < sql.length) {
-    return result + sql.slice(chunkIndex);
-  }
-
-  return result;
-};
-
-SqlString.dateToString = function dateToString(date, timeZone) {
-  var dt = new Date(date);
-
-  if (isNaN(dt.getTime())) {
-    return 'NULL';
-  }
-
-  var year;
-  var month;
-  var day;
-  var hour;
-  var minute;
-  var second;
-  var millisecond;
-
-  if (timeZone === 'local') {
-    year        = dt.getFullYear();
-    month       = dt.getMonth() + 1;
-    day         = dt.getDate();
-    hour        = dt.getHours();
-    minute      = dt.getMinutes();
-    second      = dt.getSeconds();
-    millisecond = dt.getMilliseconds();
-  } else {
-    var tz = convertTimezone(timeZone);
-
-    if (tz !== false && tz !== 0) {
-      dt.setTime(dt.getTime() + (tz * 60000));
-    }
-
-    year       = dt.getUTCFullYear();
-    month       = dt.getUTCMonth() + 1;
-    day         = dt.getUTCDate();
-    hour        = dt.getUTCHours();
-    minute      = dt.getUTCMinutes();
-    second      = dt.getUTCSeconds();
-    millisecond = dt.getUTCMilliseconds();
-  }
-
-  // YYYY-MM-DD HH:mm:ss.mmm
-  var str = zeroPad(year, 4) + '-' + zeroPad(month, 2) + '-' + zeroPad(day, 2) + ' ' +
-    zeroPad(hour, 2) + ':' + zeroPad(minute, 2) + ':' + zeroPad(second, 2) + '.' +
-    zeroPad(millisecond, 3);
-
-  return escapeString(str);
-};
-
-SqlString.bufferToString = function bufferToString(buffer) {
-  return 'X' + escapeString(buffer.toString('hex'));
-};
-
-SqlString.objectToValues = function objectToValues(object, timeZone) {
-  var sql = '';
-
-  for (var key in object) {
-    var val = object[key];
-
-    if (typeof val === 'function') {
-      continue;
-    }
-
-    sql += (sql.length === 0 ? '' : ', ') + SqlString.escapeId(key) + ' = ' + SqlString.escape(val, true, timeZone);
-  }
-
-  return sql;
-};
-
-SqlString.raw = function raw(sql) {
-  if (typeof sql !== 'string') {
-    throw new TypeError('argument sql must be a string');
-  }
-
-  return {
-    toSqlString: function toSqlString() { return sql; }
-  };
-};
-
-function escapeString(val) {
-  var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0;
-  var escapedVal = '';
-  var match;
-
-  while ((match = CHARS_GLOBAL_REGEXP.exec(val))) {
-    escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]];
-    chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex;
-  }
-
-  if (chunkIndex === 0) {
-    // Nothing was escaped
-    return "'" + val + "'";
-  }
-
-  if (chunkIndex < val.length) {
-    return "'" + escapedVal + val.slice(chunkIndex) + "'";
-  }
-
-  return "'" + escapedVal + "'";
-}
-
-function zeroPad(number, length) {
-  number = number.toString();
-  while (number.length < length) {
-    number = '0' + number;
-  }
-
-  return number;
-}
-
-function convertTimezone(tz) {
-  if (tz === 'Z') {
-    return 0;
-  }
-
-  var m = tz.match(/([\+\-\s])(\d\d):?(\d\d)?/);
-  if (m) {
-    return (m[1] === '-' ? -1 : 1) * (parseInt(m[2], 10) + ((m[3] ? parseInt(m[3], 10) : 0) / 60)) * 60;
-  }
-  return false;
-}
diff --git a/sqlstring/package.json b/sqlstring/package.json
deleted file mode 100644
index d487f85..0000000
--- a/sqlstring/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-  "name": "sqlstring",
-  "description": "Simple SQL escape and format for MySQL",
-  "version": "2.3.2",
-  "contributors": [
-    "Adri Van Houdt <adri.van.houdt@gmail.com>",
-    "Douglas Christopher Wilson <doug@somethingdoug.com>",
-    "fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com)",
-    "Kevin Jose Martin <kevin@tiliq.com>",
-    "Nathan Woltman <nwoltman@outlook.com>",
-    "Sergej Sintschilin <seregpie@gmail.com>"
-  ],
-  "license": "MIT",
-  "keywords": [
-    "sqlstring",
-    "sql",
-    "escape",
-    "sql escape"
-  ],
-  "repository": "mysqljs/sqlstring",
-  "devDependencies": {
-    "beautify-benchmark": "0.2.4",
-    "benchmark": "2.1.4",
-    "eslint": "5.16.0",
-    "eslint-plugin-markdown": "1.0.2",
-    "nyc": "15.0.0",
-    "urun": "0.0.8",
-    "utest": "0.0.8"
-  },
-  "files": [
-    "lib/",
-    "HISTORY.md",
-    "LICENSE",
-    "README.md",
-    "index.js"
-  ],
-  "engines": {
-    "node": ">= 0.6"
-  },
-  "scripts": {
-    "bench": "node benchmark/index.js",
-    "lint": "eslint --plugin markdown --ext js,md .",
-    "test": "node test/run.js",
-    "test-ci": "nyc --reporter=text npm test",
-    "test-cov": "nyc --reporter=html --reporter=text npm test"
-  }
-}
diff --git a/sqlstring/test/run.js b/sqlstring/test/run.js
deleted file mode 100644
index 1105054..0000000
--- a/sqlstring/test/run.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var urun = require('urun');
-
-var options = {};
-
-if (process.env.FILTER) {
-  options.include = new RegExp(process.env.FILTER + '.*\\.js$');
-}
-
-options.reporter = 'BashTapReporter';
-options.verbose  = process.env.VERBOSE
-  ? Boolean(JSON.parse(process.env.VERBOSE))
-  : true;
-
-urun(__dirname, options);
diff --git a/sqlstring/test/unit/test-SqlString.js b/sqlstring/test/unit/test-SqlString.js
deleted file mode 100644
index 8a83387..0000000
--- a/sqlstring/test/unit/test-SqlString.js
+++ /dev/null
@@ -1,336 +0,0 @@
-var assert    = require('assert');
-var SqlString = require('../../');
-var test      = require('utest');
-
-test('SqlString.escapeId', {
-  'value is quoted': function() {
-    assert.equal(SqlString.escapeId('id'), '`id`');
-  },
-
-  'value can be a number': function() {
-    assert.equal(SqlString.escapeId(42), '`42`');
-  },
-
-  'value can be an object': function() {
-    assert.equal(SqlString.escapeId({}), '`[object Object]`');
-  },
-
-  'value toString is called': function() {
-    assert.equal(SqlString.escapeId({ toString: function() { return 'foo'; } }), '`foo`');
-  },
-
-  'value toString is quoted': function() {
-    assert.equal(SqlString.escapeId({ toString: function() { return 'f`oo'; } }), '`f``oo`');
-  },
-
-  'value containing escapes is quoted': function() {
-    assert.equal(SqlString.escapeId('i`d'), '`i``d`');
-  },
-
-  'value containing separator is quoted': function() {
-    assert.equal(SqlString.escapeId('id1.id2'), '`id1`.`id2`');
-  },
-
-  'value containing separator and escapes is quoted': function() {
-    assert.equal(SqlString.escapeId('id`1.i`d2'), '`id``1`.`i``d2`');
-  },
-
-  'value containing separator is fully escaped when forbidQualified': function() {
-    assert.equal(SqlString.escapeId('id1.id2', true), '`id1.id2`');
-  },
-
-  'arrays are turned into lists': function() {
-    assert.equal(SqlString.escapeId(['a', 'b', 't.c']), '`a`, `b`, `t`.`c`');
-  },
-
-  'nested arrays are flattened': function() {
-    assert.equal(SqlString.escapeId(['a', ['b', ['t.c']]]), '`a`, `b`, `t`.`c`');
-  }
-});
-
-test('SqlString.escape', {
-  'undefined -> NULL': function() {
-    assert.equal(SqlString.escape(undefined), 'NULL');
-  },
-
-  'null -> NULL': function() {
-    assert.equal(SqlString.escape(null), 'NULL');
-  },
-
-  'booleans convert to strings': function() {
-    assert.equal(SqlString.escape(false), 'false');
-    assert.equal(SqlString.escape(true), 'true');
-  },
-
-  'numbers convert to strings': function() {
-    assert.equal(SqlString.escape(5), '5');
-  },
-
-  'raw not escaped': function () {
-    assert.equal(SqlString.escape(SqlString.raw('NOW()')), 'NOW()');
-  },
-
-  'objects are turned into key value pairs': function() {
-    assert.equal(SqlString.escape({a: 'b', c: 'd'}), "`a` = 'b', `c` = 'd'");
-  },
-
-  'objects function properties are ignored': function() {
-    assert.equal(SqlString.escape({a: 'b', c: function() {}}), "`a` = 'b'");
-  },
-
-  'object values toSqlString is called': function() {
-    assert.equal(SqlString.escape({id: { toSqlString: function() { return 'LAST_INSERT_ID()'; } }}), '`id` = LAST_INSERT_ID()');
-  },
-
-  'objects toSqlString is called': function() {
-    assert.equal(SqlString.escape({ toSqlString: function() { return '@foo_id'; } }), '@foo_id');
-  },
-
-  'objects toSqlString is not quoted': function() {
-    assert.equal(SqlString.escape({ toSqlString: function() { return 'CURRENT_TIMESTAMP()'; } }), 'CURRENT_TIMESTAMP()');
-  },
-
-  'nested objects are cast to strings': function() {
-    assert.equal(SqlString.escape({a: {nested: true}}), "`a` = '[object Object]'");
-  },
-
-  'nested objects use toString': function() {
-    assert.equal(SqlString.escape({a: { toString: function() { return 'foo'; } }}), "`a` = 'foo'");
-  },
-
-  'nested objects use toString is quoted': function() {
-    assert.equal(SqlString.escape({a: { toString: function() { return "f'oo"; } }}), "`a` = 'f\\'oo'");
-  },
-
-  'arrays are turned into lists': function() {
-    assert.equal(SqlString.escape([1, 2, 'c']), "1, 2, 'c'");
-  },
-
-  'nested arrays are turned into grouped lists': function() {
-    assert.equal(SqlString.escape([[1, 2, 3], [4, 5, 6], ['a', 'b', {nested: true}]]), "(1, 2, 3), (4, 5, 6), ('a', 'b', '[object Object]')");
-  },
-
-  'nested objects inside arrays are cast to strings': function() {
-    assert.equal(SqlString.escape([1, {nested: true}, 2]), "1, '[object Object]', 2");
-  },
-
-  'nested objects inside arrays use toString': function() {
-    assert.equal(SqlString.escape([1, { toString: function() { return 'foo'; } }, 2]), "1, 'foo', 2");
-  },
-
-  'strings are quoted': function() {
-    assert.equal(SqlString.escape('Super'), "'Super'");
-  },
-
-  '\0 gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\0er'), "'Sup\\0er'");
-    assert.equal(SqlString.escape('Super\0'), "'Super\\0'");
-  },
-
-  '\b gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ber'), "'Sup\\ber'");
-    assert.equal(SqlString.escape('Super\b'), "'Super\\b'");
-  },
-
-  '\n gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ner'), "'Sup\\ner'");
-    assert.equal(SqlString.escape('Super\n'), "'Super\\n'");
-  },
-
-  '\r gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\rer'), "'Sup\\rer'");
-    assert.equal(SqlString.escape('Super\r'), "'Super\\r'");
-  },
-
-  '\t gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ter'), "'Sup\\ter'");
-    assert.equal(SqlString.escape('Super\t'), "'Super\\t'");
-  },
-
-  '\\ gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\\er'), "'Sup\\\\er'");
-    assert.equal(SqlString.escape('Super\\'), "'Super\\\\'");
-  },
-
-  '\u001a (ascii 26) gets replaced with \\Z': function() {
-    assert.equal(SqlString.escape('Sup\u001aer'), "'Sup\\Zer'");
-    assert.equal(SqlString.escape('Super\u001a'), "'Super\\Z'");
-  },
-
-  'single quotes get escaped': function() {
-    assert.equal(SqlString.escape('Sup\'er'), "'Sup\\'er'");
-    assert.equal(SqlString.escape('Super\''), "'Super\\''");
-  },
-
-  'double quotes get escaped': function() {
-    assert.equal(SqlString.escape('Sup"er'), "'Sup\\\"er'");
-    assert.equal(SqlString.escape('Super"'), "'Super\\\"'");
-  },
-
-  'dates are converted to YYYY-MM-DD HH:II:SS.sss': function() {
-    var expected = '2012-05-07 11:42:03.002';
-    var date     = new Date(2012, 4, 7, 11, 42, 3, 2);
-    var string   = SqlString.escape(date);
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'dates are converted to specified time zone "Z"': function() {
-    var expected = '2012-05-07 11:42:03.002';
-    var date     = new Date(Date.UTC(2012, 4, 7, 11, 42, 3, 2));
-    var string   = SqlString.escape(date, false, 'Z');
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'dates are converted to specified time zone "+01"': function() {
-    var expected = '2012-05-07 12:42:03.002';
-    var date     = new Date(Date.UTC(2012, 4, 7, 11, 42, 3, 2));
-    var string   = SqlString.escape(date, false, '+01');
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'dates are converted to specified time zone "+0200"': function() {
-    var expected = '2012-05-07 13:42:03.002';
-    var date     = new Date(Date.UTC(2012, 4, 7, 11, 42, 3, 2));
-    var string   = SqlString.escape(date, false, '+0200');
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'dates are converted to specified time zone "-05:00"': function() {
-    var expected = '2012-05-07 06:42:03.002';
-    var date     = new Date(Date.UTC(2012, 4, 7, 11, 42, 3, 2));
-    var string   = SqlString.escape(date, false, '-05:00');
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'dates are converted to UTC for unknown time zone': function() {
-    var date     = new Date(Date.UTC(2012, 4, 7, 11, 42, 3, 2));
-    var expected = SqlString.escape(date, false, 'Z');
-    var string   = SqlString.escape(date, false, 'foo');
-
-    assert.strictEqual(string, expected);
-  },
-
-  'invalid dates are converted to null': function() {
-    var date   = new Date(NaN);
-    var string = SqlString.escape(date);
-
-    assert.strictEqual(string, 'NULL');
-  },
-
-  'buffers are converted to hex': function() {
-    var buffer = new Buffer([0, 1, 254, 255]);
-    var string = SqlString.escape(buffer);
-
-    assert.strictEqual(string, "X'0001feff'");
-  },
-
-  'buffers object cannot inject SQL': function() {
-    var buffer = new Buffer([0, 1, 254, 255]);
-    buffer.toString = function() { return "00' OR '1'='1"; };
-    var string = SqlString.escape(buffer);
-
-    assert.strictEqual(string, "X'00\\' OR \\'1\\'=\\'1'");
-  },
-
-  'NaN -> NaN': function() {
-    assert.equal(SqlString.escape(NaN), 'NaN');
-  },
-
-  'Infinity -> Infinity': function() {
-    assert.equal(SqlString.escape(Infinity), 'Infinity');
-  }
-});
-
-test('SqlString.format', {
-  'question marks are replaced with escaped array values': function() {
-    var sql = SqlString.format('? and ?', ['a', 'b']);
-    assert.equal(sql, "'a' and 'b'");
-  },
-
-  'double quest marks are replaced with escaped id': function () {
-    var sql = SqlString.format('SELECT * FROM ?? WHERE id = ?', ['table', 42]);
-    assert.equal(sql, 'SELECT * FROM `table` WHERE id = 42');
-  },
-
-  'triple question marks are ignored': function () {
-    var sql = SqlString.format('? or ??? and ?', ['foo', 'bar', 'fizz', 'buzz']);
-    assert.equal(sql, "'foo' or ??? and 'bar'");
-  },
-
-  'extra question marks are left untouched': function() {
-    var sql = SqlString.format('? and ?', ['a']);
-    assert.equal(sql, "'a' and ?");
-  },
-
-  'extra arguments are not used': function() {
-    var sql = SqlString.format('? and ?', ['a', 'b', 'c']);
-    assert.equal(sql, "'a' and 'b'");
-  },
-
-  'question marks within values do not cause issues': function() {
-    var sql = SqlString.format('? and ?', ['hello?', 'b']);
-    assert.equal(sql, "'hello?' and 'b'");
-  },
-
-  'undefined is ignored': function () {
-    var sql = SqlString.format('?', undefined, false);
-    assert.equal(sql, '?');
-  },
-
-  'objects is converted to values': function () {
-    var sql = SqlString.format('?', { 'hello': 'world' }, false);
-    assert.equal(sql, "`hello` = 'world'");
-  },
-
-  'objects is not converted to values': function () {
-    var sql = SqlString.format('?', { 'hello': 'world' }, true);
-    assert.equal(sql, "'[object Object]'");
-
-    var sql = SqlString.format('?', { toString: function () { return 'hello'; } }, true);
-    assert.equal(sql, "'hello'");
-
-    var sql = SqlString.format('?', { toSqlString: function () { return '@foo'; } }, true);
-    assert.equal(sql, '@foo');
-  },
-
-  'sql is untouched if no values are provided': function () {
-    var sql = SqlString.format('SELECT ??');
-    assert.equal(sql, 'SELECT ??');
-  },
-
-  'sql is untouched if values are provided but there are no placeholders': function () {
-    var sql = SqlString.format('SELECT COUNT(*) FROM table', ['a', 'b']);
-    assert.equal(sql, 'SELECT COUNT(*) FROM table');
-  }
-});
-
-test('SqlString.raw', {
-  'creates object': function() {
-    assert.equal(typeof SqlString.raw('NOW()'), 'object');
-  },
-
-  'rejects number': function() {
-    assert.throws(function () {
-      SqlString.raw(42);
-    });
-  },
-
-  'rejects undefined': function() {
-    assert.throws(function () {
-      SqlString.raw();
-    });
-  },
-
-  'object has toSqlString': function() {
-    assert.equal(typeof SqlString.raw('NOW()').toSqlString, 'function');
-  },
-
-  'toSqlString returns sql as-is': function() {
-    assert.equal(SqlString.raw("NOW() AS 'current_time'").toSqlString(), "NOW() AS 'current_time'");
-  }
-});
diff --git a/test/FakeServer.js b/test/FakeServer.js
deleted file mode 100644
index 28f67f2..0000000
--- a/test/FakeServer.js
+++ /dev/null
@@ -1,491 +0,0 @@
-// An experimental fake MySQL server for tricky integration tests. Expanded
-// as needed.
-
-var Buffer          = require('safe-buffer').Buffer;
-var common          = require('./common');
-var Charsets        = common.Charsets;
-var ClientConstants = common.ClientConstants;
-var Crypto          = require('crypto');
-var Net             = require('net');
-var tls             = require('tls');
-var Packets         = common.Packets;
-var PacketWriter    = common.PacketWriter;
-var Parser          = common.Parser;
-var Types           = common.Types;
-var Errors          = common.Errors;
-var EventEmitter    = require('events').EventEmitter;
-var Util            = require('util');
-
-module.exports = FakeServer;
-Util.inherits(FakeServer, EventEmitter);
-function FakeServer() {
-  EventEmitter.call(this);
-
-  this._server      = null;
-  this._connections = [];
-}
-
-FakeServer.prototype.listen = function(port, cb) {
-  this._server = Net.createServer(this._handleConnection.bind(this));
-  this._server.listen(port, cb);
-};
-
-FakeServer.prototype._handleConnection = function(socket) {
-  var connection = new FakeConnection(socket);
-
-  if (!this.emit('connection', connection)) {
-    connection.handshake();
-  }
-
-  this._connections.push(connection);
-};
-
-FakeServer.prototype.destroy = function() {
-  if (this._server._handle) {
-    // close server if listening
-    this._server.close();
-  }
-
-  // destroy all connections
-  this._connections.forEach(function(connection) {
-    connection.destroy();
-  });
-};
-
-Util.inherits(FakeConnection, EventEmitter);
-function FakeConnection(socket) {
-  EventEmitter.call(this);
-
-  this.database = null;
-  this.user     = null;
-
-  this._cipher = null;
-  this._socket = socket;
-  this._stream = socket;
-  this._parser = new Parser({onPacket: this._parsePacket.bind(this)});
-
-  this._expectedNextPacket            = null;
-  this._handshakeInitializationPacket = null;
-  this._handshakeOptions              = {};
-
-  socket.on('data', this._handleData.bind(this));
-}
-
-FakeConnection.prototype.authSwitchRequest = function authSwitchRequest(options) {
-  this._sendPacket(new Packets.AuthSwitchRequestPacket(options));
-};
-
-FakeConnection.prototype.deny = function deny(message, errno) {
-  message = message || 'Access Denied';
-  errno   = errno || Errors.ER_ACCESS_DENIED_ERROR;
-  this.error(message, errno);
-};
-
-FakeConnection.prototype.error = function deny(message, errno) {
-  this._sendPacket(new Packets.ErrorPacket({
-    message : (message || 'Error'),
-    errno   : (errno || Errors.ER_UNKNOWN_COM_ERROR)
-  }));
-  this._parser.resetPacketNumber();
-};
-
-FakeConnection.prototype.handshake = function(options) {
-  this._handshakeOptions = options || {};
-
-  var packetOptions = common.extend({
-    scrambleBuff1       : Buffer.from('1020304050607080', 'hex'),
-    scrambleBuff2       : Buffer.from('0102030405060708090A0B0C', 'hex'),
-    serverCapabilities1 : 512, // only 1 flag, PROTOCOL_41
-    protocol41          : true
-  }, this._handshakeOptions);
-
-  this._handshakeInitializationPacket = new Packets.HandshakeInitializationPacket(packetOptions);
-
-  this._sendPacket(this._handshakeInitializationPacket);
-};
-
-FakeConnection.prototype.ok = function ok() {
-  this._sendPacket(new Packets.OkPacket());
-  this._parser.resetPacketNumber();
-};
-
-FakeConnection.prototype._sendAuthResponse = function _sendAuthResponse(got, expected) {
-  if (expected.toString('hex') === got.toString('hex')) {
-    this.ok();
-  } else {
-    this.deny('expected ' + expected.toString('hex') + ' got ' + got.toString('hex'));
-  }
-
-  this._parser.resetPacketNumber();
-};
-
-FakeConnection.prototype._sendPacket = function(packet) {
-  switch (packet.constructor) {
-    case Packets.AuthSwitchRequestPacket:
-      this._expectedNextPacket = Packets.AuthSwitchResponsePacket;
-      break;
-    case Packets.HandshakeInitializationPacket:
-      this._expectedNextPacket = Packets.ClientAuthenticationPacket;
-      break;
-    case Packets.UseOldPasswordPacket:
-      this._expectedNextPacket = Packets.OldPasswordPacket;
-      break;
-    default:
-      this._expectedNextPacket = null;
-      break;
-  }
-
-  var writer = new PacketWriter();
-  packet.write(writer);
-  this._stream.write(writer.toBuffer(this._parser));
-};
-
-FakeConnection.prototype._handleData = function(buffer) {
-  this._parser.write(buffer);
-};
-
-FakeConnection.prototype._handleQueryPacket = function _handleQueryPacket(packet) {
-  var conn = this;
-  var match;
-  var sql = packet.sql;
-
-  if ((match = /^SELECT ([0-9]+);?$/i.exec(sql))) {
-    var num = match[1];
-
-    this._sendPacket(new Packets.ResultSetHeaderPacket({
-      fieldCount: 1
-    }));
-
-    this._sendPacket(new Packets.FieldPacket({
-      catalog    : 'def',
-      charsetNr  : Charsets.UTF8_GENERAL_CI,
-      default    : '0',
-      name       : num,
-      protocol41 : true,
-      type       : Types.LONG
-    }));
-
-    this._sendPacket(new Packets.EofPacket());
-
-    var writer = new PacketWriter();
-    writer.writeLengthCodedString(num);
-    this._socket.write(writer.toBuffer(this._parser));
-
-    this._sendPacket(new Packets.EofPacket());
-    this._parser.resetPacketNumber();
-    return;
-  }
-
-  if ((match = /^SELECT CURRENT_USER\(\);?$/i.exec(sql))) {
-    this._sendPacket(new Packets.ResultSetHeaderPacket({
-      fieldCount: 1
-    }));
-
-    this._sendPacket(new Packets.FieldPacket({
-      catalog    : 'def',
-      charsetNr  : Charsets.UTF8_GENERAL_CI,
-      name       : 'CURRENT_USER()',
-      protocol41 : true,
-      type       : Types.VARCHAR
-    }));
-
-    this._sendPacket(new Packets.EofPacket());
-
-    var writer = new PacketWriter();
-    writer.writeLengthCodedString((this.user || '') + '@localhost');
-    this._socket.write(writer.toBuffer(this._parser));
-
-    this._sendPacket(new Packets.EofPacket());
-    this._parser.resetPacketNumber();
-    return;
-  }
-
-  if ((match = /^SELECT SLEEP\(([0-9]+)\);?$/i.exec(sql))) {
-    var sec = match[1];
-    var time = sec * 1000;
-
-    setTimeout(function () {
-      conn._sendPacket(new Packets.ResultSetHeaderPacket({
-        fieldCount: 1
-      }));
-
-      conn._sendPacket(new Packets.FieldPacket({
-        catalog    : 'def',
-        charsetNr  : Charsets.UTF8_GENERAL_CI,
-        name       : 'SLEEP(' + sec + ')',
-        protocol41 : true,
-        type       : Types.LONG
-      }));
-
-      conn._sendPacket(new Packets.EofPacket());
-
-      var writer = new PacketWriter();
-      writer.writeLengthCodedString(0);
-      conn._socket.write(writer.toBuffer(conn._parser));
-
-      conn._sendPacket(new Packets.EofPacket());
-      conn._parser.resetPacketNumber();
-    }, time);
-    return;
-  }
-
-  if ((match = /^SELECT \* FROM stream LIMIT ([0-9]+);?$/i.exec(sql))) {
-    var num = match[1];
-
-    this._writePacketStream(num);
-    return;
-  }
-
-  if ((match = /^SHOW STATUS LIKE 'Ssl_cipher';?$/i.exec(sql))) {
-    this._sendPacket(new Packets.ResultSetHeaderPacket({
-      fieldCount: 2
-    }));
-
-    this._sendPacket(new Packets.FieldPacket({
-      catalog    : 'def',
-      charsetNr  : Charsets.UTF8_GENERAL_CI,
-      name       : 'Variable_name',
-      protocol41 : true,
-      type       : Types.VARCHAR
-    }));
-
-    this._sendPacket(new Packets.FieldPacket({
-      catalog    : 'def',
-      charsetNr  : Charsets.UTF8_GENERAL_CI,
-      name       : 'Value',
-      protocol41 : true,
-      type       : Types.VARCHAR
-    }));
-
-    this._sendPacket(new Packets.EofPacket());
-
-    var writer = new PacketWriter();
-    writer.writeLengthCodedString('Ssl_cipher');
-    writer.writeLengthCodedString(this._cipher ? this._cipher.name : '');
-    this._stream.write(writer.toBuffer(this._parser));
-
-    this._sendPacket(new Packets.EofPacket());
-    this._parser.resetPacketNumber();
-    return;
-  }
-
-  if (/INVALID/i.test(sql)) {
-    this.error('Invalid SQL', Errors.ER_PARSE_ERROR);
-    return;
-  }
-
-  this.error('Interrupted unknown query', Errors.ER_QUERY_INTERRUPTED);
-};
-
-FakeConnection.prototype._parsePacket = function _parsePacket(packetHeader) {
-  var Packet = this._determinePacket(packetHeader);
-  var packet = new Packet({protocol41: true});
-
-  packet.parse(this._parser);
-
-  switch (Packet) {
-    case Packets.AuthSwitchResponsePacket:
-      if (!this.emit('authSwitchResponse', packet)) {
-        this.deny('No auth response handler');
-      }
-      break;
-    case Packets.ClientAuthenticationPacket:
-      this.database = (packet.database || null);
-      this.user     = (packet.user || null);
-
-      if (!this.emit('clientAuthentication', packet)) {
-        this.ok();
-      }
-      break;
-    case Packets.SSLRequestPacket:
-      this._startTLS();
-      break;
-    case Packets.ComQueryPacket:
-      if (!this.emit('query', packet)) {
-        this._handleQueryPacket(packet);
-      }
-      break;
-    case Packets.ComPingPacket:
-      if (!this.emit('ping', packet)) {
-        this.ok();
-      }
-      break;
-    case Packets.ComChangeUserPacket:
-      this.database = (packet.database || null);
-      this.user     = (packet.user || null);
-
-      if (!this.emit('changeUser', packet)) {
-        if (packet.user === 'does-not-exist') {
-          this.deny('User does not exist');
-          break;
-        } else if (packet.database === 'does-not-exist') {
-          this.error('Database does not exist', Errors.ER_BAD_DB_ERROR);
-          break;
-        }
-
-        this.ok();
-      }
-      break;
-    case Packets.ComQuitPacket:
-      if (!this.emit('quit', packet)) {
-        this._socket.end();
-      }
-      break;
-    default:
-      if (!this.emit(packet.constructor.name, packet)) {
-        throw new Error('Unexpected packet: ' + Packet.name);
-      }
-  }
-};
-
-FakeConnection.prototype._determinePacket = function _determinePacket(packetHeader) {
-  if (this._expectedNextPacket) {
-    var Packet = this._expectedNextPacket;
-
-    if (Packet === Packets.ClientAuthenticationPacket) {
-      return !this._cipher && (this._parser.peak(1) << 8) & ClientConstants.CLIENT_SSL
-        ? Packets.SSLRequestPacket
-        : Packets.ClientAuthenticationPacket;
-    }
-
-    this._expectedNextPacket = null;
-
-    return Packet;
-  }
-
-  if (packetHeader.length === 0) {
-    return Packets.EmptyPacket;
-  }
-
-  var firstByte = this._parser.peak();
-  switch (firstByte) {
-    case 0x01: return Packets.ComQuitPacket;
-    case 0x03: return Packets.ComQueryPacket;
-    case 0x0e: return Packets.ComPingPacket;
-    case 0x11: return Packets.ComChangeUserPacket;
-    default:
-      throw new Error('Unknown packet, first byte: ' + firstByte);
-  }
-};
-
-FakeConnection.prototype.destroy = function() {
-  this._socket.destroy();
-};
-
-FakeConnection.prototype._writePacketStream = function _writePacketStream(count) {
-  var remaining = count;
-  var timer = setInterval(writeRow.bind(this), 20);
-
-  this._socket.on('close', cleanup);
-  this._socket.on('error', cleanup);
-
-  this._sendPacket(new Packets.ResultSetHeaderPacket({
-    fieldCount: 2
-  }));
-
-  this._sendPacket(new Packets.FieldPacket({
-    catalog    : 'def',
-    charsetNr  : Charsets.UTF8_GENERAL_CI,
-    name       : 'id',
-    protocol41 : true,
-    type       : Types.LONG
-  }));
-
-  this._sendPacket(new Packets.FieldPacket({
-    catalog    : 'def',
-    charsetNr  : Charsets.UTF8_GENERAL_CI,
-    name       : 'title',
-    protocol41 : true,
-    type       : Types.VARCHAR
-  }));
-
-  this._sendPacket(new Packets.EofPacket());
-
-  function cleanup() {
-    clearInterval(timer);
-  }
-
-  function writeRow() {
-    if (remaining === 0) {
-      cleanup();
-
-      this._socket.removeListener('close', cleanup);
-      this._socket.removeListener('error', cleanup);
-
-      this._sendPacket(new Packets.EofPacket());
-      this._parser.resetPacketNumber();
-      return;
-    }
-
-    remaining -= 1;
-
-    var num = count - remaining;
-    var writer = new PacketWriter();
-    writer.writeLengthCodedString(num);
-    writer.writeLengthCodedString('Row #' + num);
-    this._socket.write(writer.toBuffer(this._parser));
-  }
-};
-
-if (tls.TLSSocket) {
-  // 0.11+ environment
-  FakeConnection.prototype._startTLS = function _startTLS() {
-    // halt parser
-    this._parser.pause();
-    this._socket.removeAllListeners('data');
-
-    // socket <-> encrypted
-    var secureContext = tls.createSecureContext(common.getSSLConfig());
-    var secureSocket  = new tls.TLSSocket(this._socket, {
-      secureContext : secureContext,
-      isServer      : true
-    });
-
-    // cleartext <-> protocol
-    secureSocket.on('data', this._handleData.bind(this));
-    this._stream = secureSocket;
-
-    var conn = this;
-    secureSocket.on('secure', function () {
-      conn._cipher = this.getCipher();
-    });
-
-    // resume
-    var parser = this._parser;
-    process.nextTick(function() {
-      var buffer = parser._buffer.slice(parser._offset);
-      parser._offset = parser._buffer.length;
-      parser.resume();
-      secureSocket.ssl.receive(buffer);
-    });
-  };
-} else {
-  // pre-0.11 environment
-  FakeConnection.prototype._startTLS = function _startTLS() {
-    // halt parser
-    this._parser.pause();
-    this._socket.removeAllListeners('data');
-
-    // inject secure pair
-    var credentials = Crypto.createCredentials(common.getSSLConfig());
-    var securePair = tls.createSecurePair(credentials, true);
-    this._socket.pipe(securePair.encrypted);
-    this._stream = securePair.cleartext;
-    securePair.cleartext.on('data', this._handleData.bind(this));
-    securePair.encrypted.pipe(this._socket);
-
-    var conn = this;
-    securePair.on('secure', function () {
-      conn._cipher = securePair.cleartext.getCipher();
-    });
-
-    // resume
-    var parser = this._parser;
-    process.nextTick(function() {
-      var buffer = parser._buffer.slice(parser._offset);
-      parser._offset = parser._buffer.length;
-      parser.resume();
-      securePair.encrypted.write(buffer);
-    });
-  };
-}
diff --git a/test/common.js b/test/common.js
deleted file mode 100644
index f0eccbe..0000000
--- a/test/common.js
+++ /dev/null
@@ -1,160 +0,0 @@
-var common = exports;
-var fs     = require('fs');
-var path   = require('path');
-
-common.lib      = path.resolve(__dirname, '..', 'lib');
-common.fixtures = path.resolve(__dirname, 'fixtures');
-
-// Useful for triggering ECONNREFUSED errors on connect()
-common.bogusPort     = 47378;
-// Useful for triggering ER_ACCESS_DENIED_ERROR errors on connect()
-common.bogusPassword = 'INVALID PASSWORD';
-
-// Used for simulating a fake mysql server
-common.fakeServerPort = 32893;
-// Used for simulating a fake mysql server
-common.fakeServerSocket = __dirname + '/fake_server.sock';
-
-common.testDatabase = process.env.MYSQL_DATABASE || 'test';
-
-// Export common modules
-common.Auth             = require(common.lib + '/protocol/Auth');
-common.Charsets         = require(common.lib + '/protocol/constants/charsets');
-common.ClientConstants  = require(common.lib + '/protocol/constants/client');
-common.Connection       = require(common.lib + '/Connection');
-common.ConnectionConfig = require(common.lib + '/ConnectionConfig');
-common.Errors           = require(common.lib + '/protocol/constants/errors');
-common.Packets          = require(common.lib + '/protocol/packets');
-common.PacketWriter     = require(common.lib + '/protocol/PacketWriter');
-common.Parser           = require(common.lib + '/protocol/Parser');
-common.PoolConfig       = require(common.lib + '/PoolConfig');
-common.PoolConnection   = require(common.lib + '/PoolConnection');
-common.SqlString        = require(common.lib + '/protocol/SqlString');
-common.Types            = require(common.lib + '/protocol/constants/types');
-
-var Mysql      = require(path.resolve(common.lib, '../index'));
-var FakeServer = require('./FakeServer');
-
-common.createConnection = function(config) {
-  config = mergeTestConfig(config);
-  return Mysql.createConnection(config);
-};
-
-common.createQuery = Mysql.createQuery;
-
-common.createTestDatabase = function createTestDatabase(connection, callback) {
-  var database = common.testDatabase;
-
-  connection.query('CREATE DATABASE ??', [database], function (err) {
-    if (err && err.code !== 'ER_DB_CREATE_EXISTS') {
-      callback(err);
-      return;
-    }
-
-    callback(null, database);
-  });
-};
-
-common.createPool = function(config) {
-  config = mergeTestConfig(config);
-  config.connectionConfig = mergeTestConfig(config.connectionConfig);
-  return Mysql.createPool(config);
-};
-
-common.createPoolCluster = function(config) {
-  config = mergeTestConfig(config);
-  config.createConnection = common.createConnection;
-  return Mysql.createPoolCluster(config);
-};
-
-common.createFakeServer = function(options) {
-  return new FakeServer(common.extend({}, options));
-};
-
-common.detectNewline = function detectNewline(path) {
-  var newlines = fs.readFileSync(path, 'utf8').match(/(?:\r?\n)/g) || [];
-  var crlf = newlines.filter(function (nl) { return nl === '\r\n'; }).length;
-  var lf = newlines.length - crlf;
-
-  return crlf > lf ? '\r\n' : '\n';
-};
-
-common.extend = function extend(dest, src) {
-  for (var key in src) {
-    dest[key] = src[key];
-  }
-
-  return dest;
-};
-
-common.getTestConnection = function getTestConnection(config, callback) {
-  if (!callback && typeof config === 'function') {
-    callback = config;
-    config = {};
-  }
-
-  var connection = common.createConnection(config);
-
-  connection.connect(function (err) {
-    if (err && err.code === 'ECONNREFUSED') {
-      if (process.env.CI) {
-        throw err;
-      }
-
-      common.skipTest('cannot connect to MySQL server');
-    }
-
-    if (err) {
-      callback(err);
-      return;
-    }
-
-    callback(null, connection);
-  });
-};
-
-common.skipTest = function skipTest(message) {
-  var msg = 'skipping - ' + message + '\n';
-
-  try {
-    fs.writeSync(process.stdout.fd, msg);
-    fs.fsyncSync(process.stdout.fd);
-  } catch (e) {
-    // Ignore error
-  }
-
-  process.exit(0);
-};
-
-common.useTestDb = function(connection) {
-  common.createTestDatabase(connection, function (err) {
-    if (err) throw err;
-  });
-
-  connection.query('USE ' + common.testDatabase);
-};
-
-common.getTestConfig = function(config) {
-  return mergeTestConfig(config);
-};
-
-common.getSSLConfig = function() {
-  return {
-    ca      : fs.readFileSync(path.join(common.fixtures, 'server.crt'), 'ascii'),
-    cert    : fs.readFileSync(path.join(common.fixtures, 'server.crt'), 'ascii'),
-    ciphers : 'ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA:HIGH:!MD5:!aNULL:!EDH',
-    key     : fs.readFileSync(path.join(common.fixtures, 'server.key'), 'ascii')
-  };
-};
-
-function mergeTestConfig(config) {
-  config = common.extend({
-    host       : process.env.MYSQL_HOST,
-    port       : process.env.MYSQL_PORT,
-    user       : process.env.MYSQL_USER,
-    password   : process.env.MYSQL_PASSWORD,
-    socketPath : process.env.MYSQL_SOCKET
-  }, config);
-
-  return config;
-}
diff --git a/test/fixtures/data.csv b/test/fixtures/data.csv
deleted file mode 100644
index 64d9f07..0000000
--- a/test/fixtures/data.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-1,Hello World
-2,This is a test
-3,For loading data from a file
-4,中文内容
-5,this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string
diff --git a/test/fixtures/server.crt b/test/fixtures/server.crt
deleted file mode 100644
index 3f6eb64..0000000
--- a/test/fixtures/server.crt
+++ /dev/null
@@ -1,13 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIB3zCCAUgCCQCZc7IfkXLWeDANBgkqhkiG9w0BAQUFADA0MQswCQYDVQQGEwJV
-UzEQMA4GA1UECBMHSW5kaWFuYTETMBEGA1UEChMKbm9kZS1teXNxbDAeFw0xNDA1
-MTQxODM2NTdaFw0yNDA1MTExODM2NTdaMDQxCzAJBgNVBAYTAlVTMRAwDgYDVQQI
-EwdJbmRpYW5hMRMwEQYDVQQKEwpub2RlLW15c3FsMIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQDX4dUmhwwzqy8zCrNK5WybifZ4Z5vd12CnnrBpLgqw0VWiKa2b
-QQ5vmex4LhEPwr5p+tDntS1sbQf4HY69AgjHtcPAdoykWtUBDCrOjnhEBroLGzE2
-BbW0XnolsWUp8Zwnlq3nGOceCcvYX3AjUkK89B3L7YY+Rie/1QQ62FSS2wIDAQAB
-MA0GCSqGSIb3DQEBBQUAA4GBABNcExz8o1QxcTBuFIcdny4s6H7diTKeweqAtbPo
-JefVNokYjTjFDRdZqDOLKKJPgfyPYHCX170SQ/wr/b0qzNYL1QvBsDM7tvckBK5a
-OfKg/4TfMfHORNGRECBJAAn2Zi/DWfcdwOb39wIOG3hDk09IGOJ5F3wsUZFC/qiv
-152/
------END CERTIFICATE-----
diff --git a/test/fixtures/server.key b/test/fixtures/server.key
deleted file mode 100644
index 279ba8e..0000000
--- a/test/fixtures/server.key
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDX4dUmhwwzqy8zCrNK5WybifZ4Z5vd12CnnrBpLgqw0VWiKa2b
-QQ5vmex4LhEPwr5p+tDntS1sbQf4HY69AgjHtcPAdoykWtUBDCrOjnhEBroLGzE2
-BbW0XnolsWUp8Zwnlq3nGOceCcvYX3AjUkK89B3L7YY+Rie/1QQ62FSS2wIDAQAB
-AoGAUJvTsjIk/ToDQsTRE7s85YsLTAQr8BbW0V/wsSVu+nz/w7BaUalmEYfhAzL4
-TfFClmIAFTTShDTmD+BBhxO2YOQW0+aThwU2jyF6sq7VhHxgXnSVDps9ebmVXMjU
-jSZEV/Q3lOvxvQfcBYzV3jfEeyi7jNr5oCL7Y6OwxLLx1XkCQQD3Jv9CNBH0J8c1
-nIpkj3Mhd0ona7wFna7hKlIfjZjsK0B9aMvj5I5tTGIis16g4uzSISS4zymHv/yp
-njCwi54HAkEA35xDXEsfbvS8d/9MsdJEtuMWGQeHEu8Tdxt5U/WnUPo0r00blrD5
-G5+zElKYbJgN15QLOLTUpq8U2dvEjGrvjQJAeO84D+jysAmWzIDgpvwaVdHNEyUA
-R680lzDiJlZe8ZDoaXUR710y5ABwNJKYRxlC0D8vfM7Bf49NzqF9KaXnmQJAQyeI
-y1T8UbRKTbdsbxL48/vrDQVHuZX3QJQNsftajmU2IVeE65KmnXcurlgD0skvjwi0
-/gjAvHZkSrFHq+wJmQJBAK32f4/ssi/SQolzL3xVrEUayxOEVhDWslXtwdcr7ZCq
-bbOmEU5AoOVXSS+PsWrLmrDRs3gc9BRHxD7yYVBT9ts=
------END RSA PRIVATE KEY-----
diff --git a/test/integration/connection/test-bad-credentials.js b/test/integration/connection/test-bad-credentials.js
deleted file mode 100644
index 06d9b86..0000000
--- a/test/integration/connection/test-bad-credentials.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection({password: common.bogusPassword}, function (err) {
-  if (!err && process.env.NO_GRANT) {
-    common.skipTest('no grant tables');
-  }
-
-  assert.ok(err, 'got error');
-  assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-  assert.ok(/access denied/i.test(err.message), 'message is acccess denied');
-});
diff --git a/test/integration/connection/test-bulk-insert.js b/test/integration/connection/test-bulk-insert.js
deleted file mode 100644
index d5813ed..0000000
--- a/test/integration/connection/test-bulk-insert.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var common = require('../../common');
-var assert = require('assert');
-
-var table = 'insert_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  var items = [];
-  for (var i = 0; i < 100; i++) {
-    items[i] = ['test ' + i];
-  }
-
-  connection.query('INSERT INTO ?? (title) VALUES ?', [table, items], function (err) {
-    assert.ifError(err);
-
-    connection.query('SELECT title FROM ??', [table], function (err, rows) {
-      assert.ifError(err);
-
-      var itemsFoundInTable = rows.map(function (r) { return [r.title]; });
-
-      assert.deepEqual(items, itemsFoundInTable);
-
-      connection.end(assert.ifError);
-    });
-  });
-});
diff --git a/test/integration/connection/test-change-user-charset.js b/test/integration/connection/test-change-user-charset.js
deleted file mode 100644
index 45bf420..0000000
--- a/test/integration/connection/test-change-user-charset.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.changeUser({charset: 'KOI8R_GENERAL_CI'}, function (err) {
-    assert.ifError(err);
-
-    connection.query('SHOW VARIABLES LIKE \'character_set_client\'', function (err, result) {
-      assert.ifError(err);
-      assert.strictEqual(result[0]['Value'], 'koi8r');
-
-      connection.destroy();
-    });
-  });
-});
diff --git a/test/integration/connection/test-change-user-reset.js b/test/integration/connection/test-change-user-reset.js
deleted file mode 100644
index fc88e2e..0000000
--- a/test/integration/connection/test-change-user-reset.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.query('SET @custom = 2', assert.ifError);
-
-  connection.query('SELECT @custom', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['@custom'], 2);
-  });
-
-  connection.changeUser(assert.ifError);
-
-  connection.query('SELECT @custom', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['@custom'], null);
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-connection-config-flags-affected-rows.js b/test/integration/connection/test-connection-config-flags-affected-rows.js
deleted file mode 100644
index 9dc6583..0000000
--- a/test/integration/connection/test-connection-config-flags-affected-rows.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Based on:
-// https://github.com/ichernev/node-mysql/blob/on-duplicate-key-update/test/integration/connection/test-on-duplicate-key-update.js
-// (but with CLIENT_FOUND_ROWS connection flag blacklisted)
-
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'on_duplicate_key_test';
-
-common.getTestConnection({flags: '-FOUND_ROWS'}, function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`a` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`b` int(11),',
-    '`c` int(11),',
-    'PRIMARY KEY (`a`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET ?', [table, {a: 1, b: 1, c: 1}], assert.ifError);
-
-  connection.query('INSERT INTO ?? (a, b, c) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c = 1', [table], function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(0, result.affectedRows, 'both primary key and updated key are the same so nothing is affected');
-  });
-
-  connection.query('INSERT INTO ?? (a, b, c) VALUES (2, 3, 4) ON DUPLICATE KEY UPDATE c = 1', [table], function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(1, result.affectedRows, 'primary key differs, so new row is inserted');
-  });
-
-  connection.query('INSERT INTO ?? (a, b, c) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE c = 2', [table], function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(2, result.affectedRows, 'primary key is the same, row is updated');
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-connection-destroy.js b/test/integration/connection/test-connection-destroy.js
deleted file mode 100644
index feefe81..0000000
--- a/test/integration/connection/test-connection-destroy.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-  connection.destroy();
-});
diff --git a/test/integration/connection/test-connection-thread-id.js b/test/integration/connection/test-connection-thread-id.js
deleted file mode 100644
index 2fc99c9..0000000
--- a/test/integration/connection/test-connection-thread-id.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-  assert.notStrictEqual(connection.threadId, null);
-  assert.notStrictEqual(connection.threadId, 0);
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    assert.notStrictEqual(connection.threadId, null);
-    assert.notStrictEqual(connection.threadId, 0);
-  });
-});
diff --git a/test/integration/connection/test-error-sqlmessage.js b/test/integration/connection/test-error-sqlmessage.js
deleted file mode 100644
index 8ee44d5..0000000
--- a/test/integration/connection/test-error-sqlmessage.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'error_message_test';
-var message = 'Name must not contain b.';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  createTestTable(function (err3) {
-    assert.ifError(err3);
-
-    // Violates trigger condition, so it will throw an error on insert
-    connection.query('INSERT INTO ?? (name) VALUES ?', [table, [['bbbbbbbbbb']]], function (err4) {
-      // Remove table when insert finishes
-      connection.query('DROP TABLE IF EXISTS ??', [table], function (err5) {
-        assert.ifError(err5);
-        assert.ok(err4);
-        assert.equal(err4.sqlState, '45000');
-        assert.equal(err4.sqlMessage, message, 'error sqlMessage property is the trigger error message');
-        connection.end(assert.ifError);
-      });
-    });
-  });
-
-  function createTestTable(cb) {
-    // Must use real table because temporary tables cannot have triggers
-    connection.query([
-      'CREATE TABLE ?? (',
-      '`name` varchar(255)',
-      ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-    ].join('\n'), [table], function (err1) {
-      if (err1) {
-        cb(err1);
-      } else {
-        // Create a trigger that throws error when name contains the letter "b"
-        connection.query([
-          'CREATE TRIGGER `validateName`',
-          'BEFORE INSERT ON ??',
-          'FOR EACH ROW BEGIN',
-          'IF (NEW.name like \'%b%\') THEN',
-          'SIGNAL SQLSTATE \'45000\' SET MESSAGE_TEXT = ?;',
-          'END IF;',
-          'END;'
-        ].join('\n'), [table, message], function (err2) {
-          if (!err2) {
-            cb();
-          } else {
-            // Clean up table if create trigger fails
-            connection.query('DROP TABLE IF EXISTS ??', [table], function () {
-              cb(err2);
-            });
-          }
-        });
-      }
-    });
-  }
-});
diff --git a/test/integration/connection/test-insert-results.js b/test/integration/connection/test-insert-results.js
deleted file mode 100644
index 7bbf1b7..0000000
--- a/test/integration/connection/test-insert-results.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'insert_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET ?', [table, {title: 'test'}], function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result.insertId, 1);
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-load-data-infile-disable.js b/test/integration/connection/test-load-data-infile-disable.js
deleted file mode 100644
index 89cdf4a..0000000
--- a/test/integration/connection/test-load-data-infile-disable.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var path    = common.fixtures + '/data.csv';
-var table   = 'load_data_test';
-var newline = common.detectNewline(path);
-
-common.getTestConnection({localInfile: false}, function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(400),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  var sql =
-    'LOAD DATA LOCAL INFILE ? INTO TABLE ?? CHARACTER SET utf8 ' +
-    'FIELDS TERMINATED BY ? ' +
-    'LINES TERMINATED BY ? ' +
-    '(id, title)';
-
-  connection.query(sql, [path, table, ',', newline], function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_NOT_ALLOWED_COMMAND');
-  });
-
-  connection.query('SELECT * FROM ??', [table], function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 0);
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-load-data-infile.js b/test/integration/connection/test-load-data-infile.js
deleted file mode 100644
index ef5a72a..0000000
--- a/test/integration/connection/test-load-data-infile.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var badPath = common.fixtures + '/does_not_exist.csv';
-var path    = common.fixtures + '/data.csv';
-var table   = 'load_data_test';
-var newline = common.detectNewline(path);
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(400),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  var sql =
-    'LOAD DATA LOCAL INFILE ? INTO TABLE ?? CHARACTER SET utf8 ' +
-    'FIELDS TERMINATED BY ? ' +
-    'LINES TERMINATED BY ? ' +
-    '(id, title)';
-
-  connection.query(sql, [path, table, ',', newline], function (err, result) {
-    assert.ifError(err);
-    assert.equal(result.affectedRows, 5);
-  });
-
-  connection.query('SELECT * FROM ??', [table], function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 5);
-    assert.equal(rows[0].id, 1);
-    assert.equal(rows[0].title, 'Hello World');
-    assert.equal(rows[3].id, 4);
-    assert.equal(rows[3].title, '中文内容');
-    assert.equal(rows[4].id, 5);
-    assert.equal(rows[4].title.length, 321);
-    assert.equal(rows[4].title, 'this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string');
-  });
-
-  connection.query(sql, [badPath, table, ',', newline], function (err, result) {
-    assert.ok(err);
-    assert.equal(err.code, 'ENOENT');
-    assert.equal(result.affectedRows, 0);
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-multiple-statements-load-data-infile.js b/test/integration/connection/test-multiple-statements-load-data-infile.js
deleted file mode 100644
index cc11586..0000000
--- a/test/integration/connection/test-multiple-statements-load-data-infile.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var path    = common.fixtures + '/data.csv';
-var table   = 'multi_load_data_test';
-var newline = common.detectNewline(path);
-
-common.getTestConnection({multipleStatements: true}, function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(400),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  var stmt =
-    'LOAD DATA LOCAL INFILE ? INTO TABLE ?? CHARACTER SET utf8 ' +
-    'FIELDS TERMINATED BY ? ' +
-    'LINES TERMINATED BY ? ' +
-    '(id, title)';
-
-  var sql =
-    connection.format(stmt, [path, table, ',', newline]) + ';' +
-    connection.format(stmt, [path, table, ',', newline]) + ';';
-
-  connection.query(sql, function (err, results) {
-    assert.ifError(err);
-    assert.equal(results.length, 2);
-    assert.equal(results[0].affectedRows, 5);
-    assert.equal(results[1].affectedRows, 0);
-  });
-
-  connection.query('SELECT * FROM ??', [table], function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 5);
-    assert.equal(rows[0].id, 1);
-    assert.equal(rows[0].title, 'Hello World');
-    assert.equal(rows[3].id, 4);
-    assert.equal(rows[3].title, '中文内容');
-    assert.equal(rows[4].id, 5);
-    assert.equal(rows[4].title.length, 321);
-    assert.equal(rows[4].title, 'this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string');
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-multiple-statements-streaming.js b/test/integration/connection/test-multiple-statements-streaming.js
deleted file mode 100644
index d057a6b..0000000
--- a/test/integration/connection/test-multiple-statements-streaming.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection({multipleStatements: true}, function (err, connection) {
-  assert.ifError(err);
-
-  var count = 0;
-  var query = connection.query('SELECT 1; INVALID SQL; SELECT 3');
-
-  query.on('error', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_PARSE_ERROR');
-    assert.equal(err.index, 1);
-    assert.equal(count, 1);
-
-    connection.end(assert.ifError);
-  });
-
-  query.on('result', function (result) {
-    count++;
-    assert.deepEqual(result, {1: 1});
-  });
-});
diff --git a/test/integration/connection/test-multiple-statements-with-error.js b/test/integration/connection/test-multiple-statements-with-error.js
deleted file mode 100644
index 3e0aac8..0000000
--- a/test/integration/connection/test-multiple-statements-with-error.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection({multipleStatements: true}, function (err, connection) {
-  assert.ifError(err);
-
-  connection.query('SELECT 1; INVALID SQL; SELECT 3', function (err, results) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_PARSE_ERROR');
-    assert.equal(results.length, 1);
-    assert.deepEqual(results[0], [{1: 1}]);
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-multiple-statements.js b/test/integration/connection/test-multiple-statements.js
deleted file mode 100644
index 9cd9077..0000000
--- a/test/integration/connection/test-multiple-statements.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection({multipleStatements: true}, function (err, connection) {
-  assert.ifError(err);
-
-  connection.query('SELECT 1; SELECT 2; SELECT 3', function (err, results) {
-    assert.ifError(err);
-    assert.equal(results.length, 3);
-    assert.deepEqual(results[0], [{1: 1}]);
-    assert.deepEqual(results[1], [{2: 2}]);
-    assert.deepEqual(results[2], [{3: 3}]);
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-nested-tables-query.js b/test/integration/connection/test-nested-tables-query.js
deleted file mode 100644
index ee04cf6..0000000
--- a/test/integration/connection/test-nested-tables-query.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'nested_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET ?', [table, {title: 'test'}], assert.ifError);
-
-  connection.query({nestTables: true, sql: 'SELECT * FROM ??', values: [table]}, function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.equal(rows[0].nested_test.id, 1);
-    assert.equal(rows[0].nested_test.title, 'test');
-  });
-
-  connection.query({nestTables: '_', sql: 'SELECT * FROM ??', values: [table]}, function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.equal(rows[0].nested_test_id, 1);
-    assert.equal(rows[0].nested_test_title, 'test');
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-ping.js b/test/integration/connection/test-ping.js
deleted file mode 100644
index 0abe970..0000000
--- a/test/integration/connection/test-ping.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.ping(function (err) {
-    assert.ifError(err);
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-procedure-with-multiple-selects.js b/test/integration/connection/test-procedure-with-multiple-selects.js
deleted file mode 100644
index 781cf3a..0000000
--- a/test/integration/connection/test-procedure-with-multiple-selects.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var procedureName = 'multipleSelectProcedure';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  var input0 = 1;
-  var input1 = 1000;
-
-  connection.query([
-    'CREATE PROCEDURE ?? (IN param0 INT, IN param1 INT)',
-    'BEGIN',
-    'SELECT param0;',
-    'SELECT param1;',
-    'END'
-  ].join('\n'), [procedureName], assert.ifError);
-
-  connection.query('CALL ?? (?,?)', [procedureName, input0, input1], function (err, result) {
-    assert.ifError(err);
-    assert.deepEqual(result[0], [{param0: input0}], [{param1: input1}]);
-
-    connection.query('DROP PROCEDURE ??', [procedureName], assert.ifError);
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-procedure-with-single-select.js b/test/integration/connection/test-procedure-with-single-select.js
deleted file mode 100644
index 305cb32..0000000
--- a/test/integration/connection/test-procedure-with-single-select.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var procedureName = 'singleSelectProcedure';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  var input = 1;
-
-  connection.query([
-    'CREATE PROCEDURE ?? (IN param INT)',
-    'BEGIN',
-    'SELECT param;',
-    'END'
-  ].join('\n'), [procedureName], assert.ifError);
-
-  connection.query('CALL ?? (?)', [procedureName, input], function (err, result) {
-    assert.ifError(err);
-    assert.deepEqual(result[0], [{param: input}]);
-
-    connection.query('DROP PROCEDURE ??', [procedureName], assert.ifError);
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-query-changed-rows.js b/test/integration/connection/test-query-changed-rows.js
deleted file mode 100644
index 9507ce9..0000000
--- a/test/integration/connection/test-query-changed-rows.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'changed_rows_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query(
-    'CREATE TEMPORARY TABLE ?? (`col1` int, `col2` int) ENGINE=InnoDB DEFAULT CHARSET=utf8',
-    [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? VALUES(1,1)', [table], assert.ifError);
-
-  connection.query('UPDATE ?? SET `col1` = 2', [table], function (error, results) {
-    assert.ifError(error);
-    assert.strictEqual(results.affectedRows, 1);
-    assert.strictEqual(results.changedRows, 1);
-
-    connection.query('UPDATE ?? SET `col1` = 2', [table], function (error, results) {
-      assert.ifError(error);
-      assert.strictEqual(results.affectedRows, 1);
-      assert.strictEqual(results.changedRows, 0);
-      connection.end(assert.ifError);
-    });
-  });
-});
diff --git a/test/integration/connection/test-query-empty.js b/test/integration/connection/test-query-empty.js
deleted file mode 100644
index cb0337b..0000000
--- a/test/integration/connection/test-query-empty.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.query(function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_EMPTY_QUERY');
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-query-escape-id.js b/test/integration/connection/test-query-escape-id.js
deleted file mode 100644
index 37e3750..0000000
--- a/test/integration/connection/test-query-escape-id.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'escape_id_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`example` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET ?? = ?, ?? = ?', [table, 'id', 1, 'example', 'id escape'], assert.ifError);
-
-  connection.query('SELECT * FROM ??', [table], function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.deepEqual(rows[0], {id: 1, example: 'id escape'});
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-query-escaping.js b/test/integration/connection/test-query-escaping.js
deleted file mode 100644
index e4b26b6..0000000
--- a/test/integration/connection/test-query-escaping.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var common = require('../../common');
-var assert = require('assert');
-
-var table = 'escape_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`example` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET id = ?, example = ?', [table, 1, 'array escape']);
-  connection.query('INSERT INTO ?? SET ?', [table, {
-    id      : 2,
-    example : 'object escape'
-  }]);
-
-  connection.query('SELECT * FROM ??', [table], function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 2);
-    assert.deepEqual(rows[0], {id: 1, example: 'array escape'});
-    assert.deepEqual(rows[1], {id: 2, example: 'object escape'});
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-query.js b/test/integration/connection/test-query.js
deleted file mode 100644
index a11b04d..0000000
--- a/test/integration/connection/test-query.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.query('SELECT 1', function (err, rows, fields) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{1: 1}]);
-    assert.equal(fields[0].name, '1');
-  });
-
-  connection.query({ sql: 'SELECT ?' }, [ 1 ], function (err, rows, fields) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{1: 1}]);
-    assert.equal(fields[0].name, '1');
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-select-empty-string.js b/test/integration/connection/test-select-empty-string.js
deleted file mode 100644
index cc86d73..0000000
--- a/test/integration/connection/test-select-empty-string.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.query('SELECT ""', function (err, rows) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{'': ''}]);
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-send-and-receive-large-packets.js b/test/integration/connection/test-send-and-receive-large-packets.js
deleted file mode 100644
index b90000e..0000000
--- a/test/integration/connection/test-send-and-receive-large-packets.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var crypto = require('crypto');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  getMaxAllowedPacket(connection);
-});
-
-var oldMaxAllowedPacket;
-function getMaxAllowedPacket(connection) {
-  connection.query('SHOW VARIABLES WHERE Variable_name = ?', ['max_allowed_packet'], function (err, rows) {
-    assert.ifError(err);
-
-    oldMaxAllowedPacket = Number(rows[0].Value);
-
-    increaseMaxAllowedPacketIfNeeded(connection);
-  });
-}
-
-function increaseMaxAllowedPacketIfNeeded(connection) {
-  // Our test generates a SQL query a few bytes larger than 16 MB, but lets
-  // leave a little margin:
-  var minMaxAllowedPacket = 20 * 1024 * 1024;
-
-  var newMaxAllowedPacket = (oldMaxAllowedPacket < minMaxAllowedPacket)
-    ? minMaxAllowedPacket
-    : oldMaxAllowedPacket;
-
-  connection.query('SET GLOBAL max_allowed_packet = ?', [newMaxAllowedPacket], function (err) {
-    assert.ifError(err);
-
-    // We need to re-connect for this change to take effect, bah
-    connection.end();
-    connection = common.createConnection();
-
-    // We need to wait for the re-connect to happen before starting the actual
-    // test. That's because our buffer to hex shim in 0.4.x takes ~12 sec on
-    // TravisCI, causing a MySQL connection timeout otherwise.
-    connection.connect(function (err) {
-      assert.ifError(err);
-
-      triggerLargeQueryAndResponsePackets(connection);
-    });
-  });
-}
-
-var length = (Math.pow(256, 3) / 2) + 10; // Half, because of hex encoding
-var random = crypto.pseudoRandomBytes || crypto.randomBytes; // Depends on node.js version
-var table  = 'large_packet_test';
-
-function triggerLargeQueryAndResponsePackets(connection) {
-  random(length, function (err, buf) {
-    assert.ifError(err);
-    assert.equal(buf.length, length);
-
-    common.useTestDb(connection);
-
-    connection.query([
-      'CREATE TEMPORARY TABLE ?? (',
-      '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-      '`bb` longblob NOT NULL,',
-      'PRIMARY KEY (`id`)',
-      ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-    ].join('\n'), [table], assert.ifError);
-
-    connection.query('INSERT INTO ?? SET ?', [table, {bb: buf}], function (err) {
-      if (err && err.code === 'ER_TOO_BIG_ROWSIZE') {
-        common.skipTest('storage engine unable to store ' + buf.length + ' byte blob value');
-      }
-
-      assert.ifError(err);
-    });
-
-    connection.query('SELECT `id`, `bb` FROM ??', [table], function (err, rows) {
-      assert.ifError(err);
-
-      connection.query('SET GLOBAL max_allowed_packet = ?', [oldMaxAllowedPacket], assert.ifError);
-      connection.end(function (err) {
-        assert.ifError(err);
-        assert.equal(rows.length, 1);
-        assert.equal(rows[0].bb.length, buf.length);
-        assert.equal(rows[0].bb.toString('base64'), buf.toString('base64'));
-      });
-    });
-  });
-}
diff --git a/test/integration/connection/test-send-and-receive-large-text.js b/test/integration/connection/test-send-and-receive-large-text.js
deleted file mode 100644
index 37a7751..0000000
--- a/test/integration/connection/test-send-and-receive-large-text.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var crypto = require('crypto');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  getMaxAllowedPacket(connection);
-});
-
-var oldMaxAllowedPacket;
-function getMaxAllowedPacket(connection) {
-  connection.query('SHOW VARIABLES WHERE Variable_name = ?', ['max_allowed_packet'], function (err, rows) {
-    assert.ifError(err);
-
-    oldMaxAllowedPacket = Number(rows[0].Value);
-
-    increaseMaxAllowedPacketIfNeeded(connection);
-  });
-}
-
-function increaseMaxAllowedPacketIfNeeded(connection) {
-  // Our test generates a SQL query a few bytes larger than 16 MB, but lets
-  // leave a little margin:
-  var minMaxAllowedPacket = 20 * 1024 * 1024;
-
-  var newMaxAllowedPacket = (oldMaxAllowedPacket < minMaxAllowedPacket)
-    ? minMaxAllowedPacket
-    : oldMaxAllowedPacket;
-
-  connection.query('SET GLOBAL max_allowed_packet = ?', [newMaxAllowedPacket], function (err) {
-    assert.ifError(err);
-
-    // We need to re-connect for this change to take effect, bah
-    connection.end();
-    connection = common.createConnection();
-
-    // We need to wait for the re-connect to happen before starting the actual
-    // test. That's because our buffer to hex shim in 0.4.x takes ~12 sec on
-    // TravisCI, causing a MySQL connection timeout otherwise.
-    connection.connect(function (err) {
-      assert.ifError(err);
-
-      triggerLargeQueryAndResponsePackets(connection);
-    });
-  });
-}
-
-var length = (Math.pow(256, 3) / 2) + 10; // Half, because of hex encoding
-var random = crypto.pseudoRandomBytes || crypto.randomBytes; // Depends on node.js version
-var table  = 'large_text_test';
-
-function triggerLargeQueryAndResponsePackets(connection) {
-  random(length, function (err, buf) {
-    assert.ifError(err);
-    assert.equal(buf.length, length);
-
-    common.useTestDb(connection);
-
-    connection.query([
-      'CREATE TEMPORARY TABLE ?? (',
-      '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-      '`bt` longtext NOT NULL,',
-      'PRIMARY KEY (`id`)',
-      ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-    ].join('\n'), [table], assert.ifError);
-
-    var text = buf.toString('hex');
-
-    connection.query('INSERT INTO ?? SET ?', [table, {bt: text}], function (err) {
-      if (err && err.code === 'ER_TOO_BIG_ROWSIZE') {
-        common.skipTest('storage engine unable to store ' + text.length + ' byte text value');
-      }
-
-      assert.ifError(err);
-    });
-
-    connection.query('SELECT `id`, `bt` FROM ??', [table], function (err, rows) {
-      assert.ifError(err);
-
-      connection.query('SET GLOBAL max_allowed_packet = ?', [oldMaxAllowedPacket], assert.ifError);
-      connection.end(function (err) {
-        assert.ifError(err);
-        assert.equal(rows.length, 1);
-        assert.equal(rows[0].bt.length, text.length);
-        assert.equal(rows[0].bt, text);
-      });
-    });
-  });
-}
diff --git a/test/integration/connection/test-server-timeout-disconnect.js b/test/integration/connection/test-server-timeout-disconnect.js
deleted file mode 100644
index 1ab2f0b..0000000
--- a/test/integration/connection/test-server-timeout-disconnect.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-
-var timeout = setTimeout(function () {
-  throw new Error('test timeout');
-}, 2000);
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    clearTimeout(timeout);
-  });
-
-  connection.query('SET wait_timeout = 1', assert.ifError);
-
-  connection.on('end', function (err) {
-    assert.strictEqual(err.code, 'PROTOCOL_CONNECTION_LOST');
-    assert.strictEqual(err.fatal, true);
-    done();
-  });
-
-  connection.on('error', function (err) {
-    assert.strictEqual(err.code, 'PROTOCOL_CONNECTION_LOST');
-    assert.strictEqual(err.fatal, true);
-    done();
-  });
-});
diff --git a/test/integration/connection/test-statistics.js b/test/integration/connection/test-statistics.js
deleted file mode 100644
index a31ccb6..0000000
--- a/test/integration/connection/test-statistics.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  connection.statistics(function (err, data) {
-    assert.ifError(err);
-    assert.strictEqual(typeof data, 'object');
-    assert.ok(data.hasOwnProperty('message'));
-    assert.ok(data.hasOwnProperty('uptime'));
-    assert.ok(data.hasOwnProperty('threads'));
-    assert.ok(data.hasOwnProperty('questions'));
-    assert.ok(data.hasOwnProperty('slow_queries'));
-    assert.ok(data.hasOwnProperty('opens'));
-    assert.ok(data.hasOwnProperty('flush_tables'));
-    assert.ok(data.hasOwnProperty('open_tables'));
-    assert.ok(data.hasOwnProperty('queries_per_second_avg'));
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-timezones.js b/test/integration/connection/test-timezones.js
deleted file mode 100644
index 622b5c8..0000000
--- a/test/integration/connection/test-timezones.js
+++ /dev/null
@@ -1,140 +0,0 @@
-var timezone_mock = require('timezone-mock');
-
-var assert = require('assert');
-var common = require('../../common');
-
-function registerMock() {
-  timezone_mock.register('US/Pacific');
-  var date = new Date(Date.now());
-  var tzo = date.getTimezoneOffset();
-  assert.ok(tzo === 420 || tzo === 480);
-}
-
-var table = 'timezone_test';
-var pre_statements = ['', 'SET TIME_ZONE="+00:00"', 'SET TIME_ZONE="SYSTEM"', registerMock];
-var pre_idx = 0;
-var test_days = ['01-01', '03-07', '03-08', '03-09', '12-31'].map(function (day) {
-  // Choosing this because 2015-03-08 02:30 Pacific does not exist (due to DST),
-  // so if anything is using a local date object it will fail (at least if the
-  // test system is in Pacific Time).
-  return '2015-' + day + 'T02:32:11.000Z';
-});
-var day_idx = 0;
-var test_timezones = ['Z', 'local', 0, 1, 5, 12, 23, -1, -5, -20];
-var tz_idx = 0;
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`day` varchar(24),',
-    '`timezone` varchar(10),',
-    '`pre_idx` int,',
-    '`dt` datetime',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  if (pre_statements[pre_idx]) {
-    connection.query(pre_statements[pre_idx], assert.ifError);
-  }
-  testNextDate(connection);
-});
-
-function testNextDate(connection) {
-  if (tz_idx === test_timezones.length || day_idx === test_days.length) {
-    ++pre_idx;
-    if (pre_idx === pre_statements.length) {
-      connection.end(assert.ifError);
-      return;
-    } else {
-      if (typeof pre_statements[pre_idx] === 'function') {
-        pre_statements[pre_idx]();
-      } else {
-        connection.query(pre_statements[pre_idx], assert.ifError);
-      }
-      day_idx = tz_idx = 0;
-    }
-  }
-
-  var day = test_days[day_idx];
-  var offset = test_timezones[tz_idx];
-
-  ++day_idx;
-  if (day_idx === test_days.length) {
-    day_idx = 0;
-    ++tz_idx;
-  }
-
-  var timezone;
-  if (offset === 'Z') {
-    timezone = offset;
-    offset = 0;
-  } else if (offset === 'local') {
-    timezone = offset;
-  } else {
-    timezone = (offset < 0 ? '-' : '+') + pad2(Math.abs(offset)) + ':00';
-  }
-
-  var dt = new Date(day);
-  assert.strictEqual(day, dt.toISOString());
-
-  var expected_date_string;
-  if (offset === 'local') {
-    // If using a local timezone, it should be the same day/hour/etc as the Javascript date formatter
-    // Beware Daylight Saving Time though, using a "local" timezone is never a good idea, it maps
-    // multiple unique UTC dates to the same string.
-    expected_date_string = dt.getFullYear() + '-' + pad2(dt.getMonth() + 1) + '-' + pad2(dt.getDate()) + ' ' +
-      pad2(dt.getHours()) + ':' + pad2(dt.getMinutes()) + ':' + pad2(dt.getSeconds());
-  } else {
-    // If using a specific timezone, it should be a simple offset from the UTC date
-    var expected_dt = new Date(dt.getTime() + offset * 60 * 60 * 1000);
-    expected_date_string = expected_dt.getUTCFullYear() + '-' +
-      pad2(expected_dt.getUTCMonth() + 1) + '-' +
-      pad2(expected_dt.getUTCDate()) + ' ' +
-      pad2(expected_dt.getUTCHours()) + ':' +
-      pad2(expected_dt.getUTCMinutes()) + ':' +
-      pad2(expected_dt.getUTCSeconds());
-  }
-
-  connection.config.timezone = timezone;
-  connection.query('INSERT INTO ?? SET ?', [table, {day: day, timezone: timezone, dt: dt, pre_idx: pre_idx}], assert.ifError);
-
-  var options = {
-    sql      : 'SELECT * FROM ?? WHERE timezone = ? AND day = ? AND pre_idx = ?',
-    values   : [table, timezone, day, pre_idx],
-    typeCast : function (field, next) {
-      if (field.type !== 'DATETIME') {
-        return next();
-      }
-      return field.string();
-    }
-  };
-
-  connection.query(options, function (err, rows_raw) {
-    assert.ifError(err);
-    assert.equal(rows_raw.length, 1);
-    delete options.typeCast;
-    connection.query(options, function (err, rows) {
-      assert.ifError(err);
-      assert.equal(rows.length, 1);
-      if (dt.getTime() !== rows[0].dt.getTime() || expected_date_string !== rows_raw[0].dt) {
-        console.log('Failure while testing date: ' + day + ', Timezone: ' + timezone);
-        console.log('Pre-statement: ' + pre_statements[pre_idx]);
-        console.log('Expected raw string: ' + expected_date_string);
-        console.log('Received raw string: ' + rows_raw[0].dt);
-        console.log('Expected date object: ' + dt.toISOString() + ' (' + dt.getTime() + ', ' + dt.toLocaleString() + ')');
-        console.log('Received date object: ' + rows[0].dt.toISOString() + ' (' + rows[0].dt.getTime() + ', ' + rows[0].dt.toLocaleString() + ')');
-        assert.strictEqual(expected_date_string, rows_raw[0].dt);
-        assert.strictEqual(dt.toISOString(), rows[0].dt.toISOString());
-      }
-      testNextDate(connection);
-    });
-  });
-}
-
-function pad2(v) {
-  return (v < 10 ? '0' : '') + v;
-}
diff --git a/test/integration/connection/test-transaction-commit.js b/test/integration/connection/test-transaction-commit.js
deleted file mode 100644
index 0bbeefe..0000000
--- a/test/integration/connection/test-transaction-commit.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'transaction_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.beginTransaction(function (err) {
-    assert.ifError(err);
-
-    var row = {
-      id    : 1,
-      title : 'Test row'
-    };
-
-    connection.query('INSERT INTO ?? SET ?', [table, row], function (err) {
-      assert.ifError(err);
-
-      connection.commit(function  (err) {
-        assert.ifError(err);
-
-        connection.query('SELECT * FROM ??', [table], function (err, rows) {
-          assert.ifError(err);
-          assert.equal(rows.length, 1);
-          connection.end(assert.ifError);
-        });
-      });
-    });
-  });
-});
diff --git a/test/integration/connection/test-transaction-rollback.js b/test/integration/connection/test-transaction-rollback.js
deleted file mode 100644
index 66e1c75..0000000
--- a/test/integration/connection/test-transaction-rollback.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'transaction_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`title` varchar(255),',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.beginTransaction(function (err) {
-    assert.ifError(err);
-
-    var row = {
-      id    : 1,
-      title : 'Test row'
-    };
-
-    connection.query('INSERT INTO ?? SET ?', [table, row], function (err) {
-      assert.ifError(err);
-
-      connection.rollback(function  (err) {
-        assert.ifError(err);
-
-        connection.query('SELECT * FROM ??', [table], function (err, rows) {
-          assert.ifError(err);
-          assert.equal(rows.length, 0);
-          connection.end(assert.ifError);
-        });
-      });
-    });
-  });
-});
diff --git a/test/integration/connection/test-type-cast-null-fields.js b/test/integration/connection/test-type-cast-null-fields.js
deleted file mode 100644
index 87d7343..0000000
--- a/test/integration/connection/test-type-cast-null-fields.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'insert_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`date` DATETIME NULL,',
-    '`number` INT NULL,',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  connection.query('INSERT INTO ?? SET ?', [table, {
-    date   : null,
-    number : null
-  }]);
-
-  connection.query('SELECT * FROM ??', [table], function (err, results) {
-    assert.ifError(err);
-    assert.strictEqual(results[0].date, null);
-    assert.strictEqual(results[0].number, null);
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-type-cast-query.js b/test/integration/connection/test-type-cast-query.js
deleted file mode 100644
index ac6513b..0000000
--- a/test/integration/connection/test-type-cast-query.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-common.getTestConnection({typeCast: true}, function (err, connection) {
-  assert.ifError(err);
-
-  var options = {
-    sql      : 'SELECT NOW() as date, POINT(1.2,-3.4) as point',
-    typeCast : false
-  };
-
-  connection.query(options, function(err, rows) {
-    assert.ifError(err);
-
-    var point = rows[0].point;
-    var byteOrder = point.readUInt8(4);
-    var wkbType = byteOrder ? point.readUInt32LE(5) : point.readUInt32BE(5);
-    var x = byteOrder ? point.readDoubleLE(9) : point.readDoubleBE(9);
-    var y = byteOrder ? point.readDoubleLE(17) : point.readDoubleBE(17);
-
-    assert.strictEqual(typeof rows[0].date, 'object');
-    assert.equal(Buffer.isBuffer(rows[0].date), true);
-    assert.strictEqual(typeof point, 'object');
-    assert.equal(Buffer.isBuffer(point), true);
-    assert.equal(point.readUInt32LE(0), 0); // unknown
-    assert.equal(wkbType, 1); // WKBPoint
-    assert.equal(x, 1.2);
-    assert.equal(y, -3.4);
-  });
-
-  connection.end(assert.ifError);
-});
diff --git a/test/integration/connection/test-type-casting.js b/test/integration/connection/test-type-casting.js
deleted file mode 100644
index 1780564..0000000
--- a/test/integration/connection/test-type-casting.js
+++ /dev/null
@@ -1,118 +0,0 @@
-var assert = require('assert');
-var Buffer = require('safe-buffer').Buffer;
-var common = require('../../common');
-
-var tests = [
-  {type: 'decimal(3,3)', insert: '0.330', expect: 0.33 },
-  {type: 'decimal(3,3)', insert: 0.33},
-  {type: 'tinyint', insert: 1},
-  {type: 'smallint', insert: 2},
-  {type: 'int', insert: 3},
-  {type: 'float', insert: 4.5},
-  {type: 'double', insert: 5.5},
-  {type: 'bigint', insert: '6', expect: 6},
-  {type: 'bigint', insert: 6},
-  {type: 'bigint', insert: '9007199254740991', expect: 9007199254740991},
-  {type: 'bigint', insert: '9007199254740992', expect: '9007199254740992'},
-  {type: 'bigint', insert: '9223372036854775807', expect: '9223372036854775807'},
-  {type: 'bigint', insert: '-9007199254740991', expect: -9007199254740991},
-  {type: 'bigint', insert: '-9007199254740992', expect: '-9007199254740992'},
-  {type: 'bigint', insert: '-9223372036854775807', expect: '-9223372036854775807'},
-  {type: 'mediumint', insert: 7},
-  {type: 'year', insert: 2012},
-  {type: 'timestamp', insert: new Date('2012-05-12 11:00:23')},
-  {type: 'datetime', insert: new Date('2012-05-12 12:00:23')},
-  {type: 'date', insert: new Date('2012-05-12 00:00:00')},
-  {type: 'time', insert: '13:13:23'},
-  {type: 'binary(4)', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'varbinary(4)', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'tinyblob', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'mediumblob', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'longblob', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'blob', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'bit(32)', insert: Buffer.from([0, 1, 254, 255])},
-  {type: 'char(5)', insert: 'Hello'},
-  {type: 'varchar(5)', insert: 'Hello'},
-  {type: 'varchar(3) character set utf8 collate utf8_bin', insert: 'bin'},
-  {type: 'tinytext', insert: 'Hello World'},
-  {type: 'mediumtext', insert: 'Hello World'},
-  {type: 'longtext', insert: 'Hello World'},
-  {type: 'text', insert: 'Hello World'},
-  {type: 'point', insertRaw: 'POINT(1.2,-3.4)', expect: {x: 1.2, y: -3.4}, deep: true},
-  {type: 'point', insertRaw: '', insert: null, expect: null},
-  {type: 'linestring', insertRaw: 'LINESTRING(POINT(1.2,-3.4),POINT(-5.6,10.23),POINT(0.2,0.7))', expect: [{x: 1.2, y: -3.4}, {x: -5.6, y: 10.23}, {x: 0.2, y: 0.7}], deep: true},
-  {type: 'polygon', insertRaw: 'POLYGON(LINESTRING(POINT(0,0),POINT(10,0),POINT(10,10),POINT(0,10),POINT(0,0)),LINESTRING(POINT(5,5),POINT(7,5),POINT(7,7),POINT(5,7),POINT(5,5)))', expect: [[{x: 0, y: 0}, {x: 10, y: 0}, {x: 10, y: 10}, {x: 0, y: 10}, {x: 0, y: 0}], [{x: 5, y: 5}, {x: 7, y: 5}, {x: 7, y: 7}, {x: 5, y: 7}, {x: 5, y: 5}]], deep: true},
-  {type: 'geometry', insertRaw: 'POINT(1.2,-3.4)', expect: {x: 1.2, y: -3.4}, deep: true},
-  {type: 'multipoint', insertRaw: 'MULTIPOINT(POINT(0,0),POINT(20,20),POINT(60,60))', expect: [{x: 0, y: 0}, {x: 20, y: 20}, {x: 60, y: 60}], deep: true},
-  {type: 'multilinestring', insertRaw: 'MULTILINESTRING(LINESTRING(POINT(10,10),POINT(20,20)),LINESTRING(POINT(15,15),POINT(30,15)))', expect: [[{x: 10, y: 10}, {x: 20, y: 20}], [{x: 15, y: 15}, {x: 30, y: 15}]], deep: true},
-  {type: 'multipolygon', insertRaw: 'MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0),POINT(10,0),POINT(10,10),POINT(0,10),POINT(0,0))),POLYGON(LINESTRING(POINT(5,5),POINT(7,5),POINT(7,7),POINT(5,7),POINT(5,5))))', expect: [[[{x: 0, y: 0}, {x: 10, y: 0}, {x: 10, y: 10}, {x: 0, y: 10}, {x: 0, y: 0}]], [[{x: 5, y: 5}, {x: 7, y: 5}, {x: 7, y: 7}, {x: 5, y: 7}, {x: 5, y: 5}]]], deep: true},
-  {type: 'geometrycollection', insertRaw: 'GEOMETRYCOLLECTION(POINT(10,10),POINT(30,30),LINESTRING(POINT(15,15),POINT(20,20)))', expect: [{x: 10, y: 10}, {x: 30, y: 30}, [{x: 15, y: 15}, {x: 20, y: 20}]], deep: true}
-];
-
-var table = 'type_casting';
-
-common.getTestConnection({supportBigNumbers: true}, function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  var schema  = [];
-  var inserts = [];
-
-  tests.forEach(function(test, index) {
-    var escaped = test.insertRaw || connection.escape(test.insert);
-
-    test.columnName = test.type + '_' + index;
-
-    schema.push(connection.escapeId(test.columnName) + ' ' + test.type + ',');
-    inserts.push(connection.escapeId(test.columnName) + ' = ' + escaped);
-  });
-
-  var createTable = [
-    'CREATE TEMPORARY TABLE ' + connection.escapeId(table) + ' (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,'
-  ].concat(schema).concat([
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ]).join('\n');
-
-  connection.query(createTable);
-
-  connection.query('INSERT INTO ?? SET' + inserts.join(',\n'), [table]);
-
-  connection.query('SELECT * FROM type_casting', function (err, rows) {
-    assert.ifError(err);
-
-    var row = rows[0];
-
-    tests.forEach(function(test) {
-      var expected = test.expect || test.insert;
-      var got      = row[test.columnName];
-      var message;
-
-      if (expected instanceof Date) {
-        assert.equal(got instanceof Date, true, test.type);
-
-        expected = String(expected);
-        got      = String(got);
-      } else if (Buffer.isBuffer(expected)) {
-        assert.equal(Buffer.isBuffer(got), true, test.type);
-
-        expected = String(Array.prototype.slice.call(expected));
-        got      = String(Array.prototype.slice.call(got));
-      }
-
-      if (test.deep) {
-        message = 'got: "' + JSON.stringify(got) + '" expected: "' + JSON.stringify(expected) +
-                  '" test: ' + test.type + '';
-        assert.deepEqual(expected, got, message);
-      } else {
-        message = 'got: "' + got + '" (' + (typeof got) + ') expected: "' + expected +
-                  '" (' + (typeof expected) + ') test: ' + test.type + '';
-        assert.strictEqual(expected, got, message);
-      }
-    });
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/integration/connection/test-zerofill-results.js b/test/integration/connection/test-zerofill-results.js
deleted file mode 100644
index b24a939..0000000
--- a/test/integration/connection/test-zerofill-results.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var table = 'zerofill_results_test';
-
-common.getTestConnection(function (err, connection) {
-  assert.ifError(err);
-
-  common.useTestDb(connection);
-
-  connection.query([
-    'CREATE TEMPORARY TABLE ?? (',
-    '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
-    '`num` int(5) UNSIGNED ZEROFILL,',
-    'PRIMARY KEY (`id`)',
-    ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
-  ].join('\n'), [table], assert.ifError);
-
-  var test_numbers = ['00000', '00001', '00012', '00123', '01234', '12345', null];
-
-  for (var i = 0; i < test_numbers.length; i++) {
-    connection.query('INSERT INTO ?? SET ?', [table, {
-      id  : (i + 1),
-      num : (test_numbers[i] !== null ? parseInt(test_numbers[i], 10) : null)
-    }], assert.ifError);
-  }
-
-  connection.query('SELECT * FROM ??', [table], function (err, results) {
-    assert.ifError(err);
-    assert.strictEqual(results.length, test_numbers.length);
-
-    for (var i = 0; i < results.length; i++) {
-      assert.strictEqual(test_numbers[results[i].id - 1], (results[i].num !== null ? '' + results[i].num : null));
-    }
-
-    connection.end(assert.ifError);
-  });
-});
diff --git a/test/run.js b/test/run.js
deleted file mode 100644
index 1105054..0000000
--- a/test/run.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var urun = require('urun');
-
-var options = {};
-
-if (process.env.FILTER) {
-  options.include = new RegExp(process.env.FILTER + '.*\\.js$');
-}
-
-options.reporter = 'BashTapReporter';
-options.verbose  = process.env.VERBOSE
-  ? Boolean(JSON.parse(process.env.VERBOSE))
-  : true;
-
-urun(__dirname, options);
diff --git a/test/unit/connection/test-auth-no-old-password.js b/test/unit/connection/test-auth-no-old-password.js
deleted file mode 100644
index 9af2e87..0000000
--- a/test/unit/connection/test-auth-no-old-password.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port         : common.fakeServerPort,
-  user         : 'root',
-  password     : null,
-  insecureAuth : true
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.on('clientAuthentication', function () {
-    this._sendPacket(new common.Packets.UseOldPasswordPacket());
-  });
-
-  incomingConnection.on('OldPasswordPacket', function (packet) {
-    if (packet.scrambleBuff.length === 0) {
-      this.ok();
-    } else {
-      this.deny();
-    }
-  });
-
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-auth-no-password.js b/test/unit/connection/test-auth-no-password.js
deleted file mode 100644
index 86223ed..0000000
--- a/test/unit/connection/test-auth-no-password.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  password : null,
-  user     : 'root'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.on('clientAuthentication', function (packet) {
-    if (packet.scrambleBuff.length === 0) {
-      this.ok();
-    } else {
-      this.deny();
-    }
-  });
-
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-auth-old-password.js b/test/unit/connection/test-auth-old-password.js
deleted file mode 100644
index d73a076..0000000
--- a/test/unit/connection/test-auth-old-password.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var common     = require('../../common');
-var connection = common.createConnection({
-  port         : common.fakeServerPort,
-  password     : 'oldpw',
-  insecureAuth : true
-});
-var assert     = require('assert');
-var Auth       = require(common.lib + '/protocol/Auth');
-var Crypto     = require('crypto');
-
-var random = Crypto.pseudoRandomBytes || Crypto.randomBytes; // Depends on node.js version
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  random(8, function (err, scramble) {
-    assert.ifError(err);
-
-    incomingConnection.on('clientAuthentication', function () {
-      this._sendPacket(new common.Packets.UseOldPasswordPacket());
-    });
-
-    incomingConnection.on('OldPasswordPacket', function (packet) {
-      var expected = Auth.scramble323(scramble, 'oldpw');
-      this._sendAuthResponse(packet.scrambleBuff, expected);
-    });
-
-    incomingConnection.handshake({
-      scrambleBuff1: scramble
-    });
-  });
-});
diff --git a/test/unit/connection/test-auth-password.js b/test/unit/connection/test-auth-password.js
deleted file mode 100644
index 06f2aa4..0000000
--- a/test/unit/connection/test-auth-password.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  password : 'passwd'
-});
-var assert     = require('assert');
-var Auth       = require(common.lib + '/protocol/Auth');
-var Crypto     = require('crypto');
-
-var random = Crypto.pseudoRandomBytes || Crypto.randomBytes; // Depends on node.js version
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  random(20, function (err, scramble) {
-    assert.ifError(err);
-
-    incomingConnection.on('clientAuthentication', function (packet) {
-      this._sendAuthResponse(packet.scrambleBuff, Auth.token('passwd', scramble));
-    });
-
-    incomingConnection.handshake({
-      scrambleBuff1 : scramble.slice(0, 8),
-      scrambleBuff2 : scramble.slice(8, 20)
-    });
-  });
-});
diff --git a/test/unit/connection/test-auth-switch-native.js b/test/unit/connection/test-auth-switch-native.js
deleted file mode 100644
index 0d31dcc..0000000
--- a/test/unit/connection/test-auth-switch-native.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var assert     = require('assert');
-var Crypto     = require('crypto');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  password : 'authswitch'
-});
-
-var random = Crypto.pseudoRandomBytes || Crypto.randomBytes; // Depends on node.js version
-var server = common.createFakeServer();
-
-var connected;
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err, result) {
-    assert.ifError(err);
-
-    connected = result;
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  random(20, function (err, scramble) {
-    assert.ifError(err);
-
-    incomingConnection.on('authSwitchResponse', function (packet) {
-      this._sendAuthResponse(packet.data, common.Auth.token('authswitch', scramble));
-    });
-
-    incomingConnection.on('clientAuthentication', function () {
-      this.authSwitchRequest({
-        authMethodName : 'mysql_native_password',
-        authMethodData : scramble
-      });
-    });
-
-    incomingConnection.handshake();
-  });
-});
-
-process.on('exit', function() {
-  assert.equal(connected.fieldCount, 0);
-});
diff --git a/test/unit/connection/test-auth-switch-unknown.js b/test/unit/connection/test-auth-switch-unknown.js
deleted file mode 100644
index 059ab91..0000000
--- a/test/unit/connection/test-auth-switch-unknown.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var assert     = require('assert');
-var Buffer     = require('safe-buffer').Buffer;
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  password : 'authswitch'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'UNSUPPORTED_AUTH_METHOD');
-    assert.equal(err.fatal, true);
-    assert.ok(/foo_plugin_password/.test(err.message));
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.on('clientAuthentication', function () {
-    this.authSwitchRequest({
-      authMethodName : 'foo_plugin_password',
-      authMethodData : Buffer.alloc(0)
-    });
-  });
-
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-callback-errors-are-not-caught.js b/test/unit/connection/test-callback-errors-are-not-caught.js
deleted file mode 100644
index dd78659..0000000
--- a/test/unit/connection/test-callback-errors-are-not-caught.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var error  = new Error('uncaught exception');
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var caughtErr = null;
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-
-    process.once('uncaughtException', function (err) {
-      caughtErr = err;
-    });
-
-    throw error;
-  });
-
-  connection.end(function (err) {
-    process.removeAllListeners('uncaughtException');
-    assert.ifError(err);
-    assert.strictEqual(caughtErr, error);
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-callback-primitive-errors-are-not-caught.js b/test/unit/connection/test-callback-primitive-errors-are-not-caught.js
deleted file mode 100644
index 02bd6ec..0000000
--- a/test/unit/connection/test-callback-primitive-errors-are-not-caught.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var error  = undefined;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var caughtErr = null;
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-
-    process.once('uncaughtException', function (err) {
-      caughtErr = err;
-    });
-
-    throw error;
-  });
-
-  connection.end(function (err) {
-    process.removeAllListeners('uncaughtException');
-    assert.ifError(err);
-    assert.strictEqual(caughtErr, error);
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-change-database-fatal-error.js b/test/unit/connection/test-change-database-fatal-error.js
deleted file mode 100644
index ba6c848..0000000
--- a/test/unit/connection/test-change-database-fatal-error.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// This test verifies that changeUser errors are treated as fatal errors.  The
-// rationale for that is that a failure to execute a changeUser sequence may
-// cause unexpected behavior for queries that were enqueued under the
-// assumption of changeUser to succeed.
-
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.changeUser({database: 'does-not-exist'}, function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_BAD_DB_ERROR');
-    assert.equal(err.fatal, true);
-
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-change-user-auth-switch-unknown.js b/test/unit/connection/test-change-user-auth-switch-unknown.js
deleted file mode 100644
index dcaa327..0000000
--- a/test/unit/connection/test-change-user-auth-switch-unknown.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var assert     = require('assert');
-var Buffer     = require('safe-buffer').Buffer;
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  user     : 'user_1',
-  password : 'pass_1'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('SELECT CURRENT_USER()', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['CURRENT_USER()'], 'user_1@localhost');
-
-    connection.changeUser({user: 'user_2', password: 'pass_2'}, function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'UNSUPPORTED_AUTH_METHOD');
-      assert.equal(err.fatal, true);
-      assert.ok(/foo_plugin_password/.test(err.message));
-
-      connection.destroy();
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function (incomingConnection) {
-  incomingConnection.on('changeUser', function () {
-    this.authSwitchRequest({
-      authMethodName : 'foo_plugin_password',
-      authMethodData : Buffer.alloc(0)
-    });
-  });
-
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-change-user-auth-switch.js b/test/unit/connection/test-change-user-auth-switch.js
deleted file mode 100644
index f3f0805..0000000
--- a/test/unit/connection/test-change-user-auth-switch.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var assert     = require('assert');
-var Crypto     = require('crypto');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  user     : 'user_1',
-  password : 'pass_1'
-});
-
-var random = Crypto.pseudoRandomBytes || Crypto.randomBytes; // Depends on node.js version
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('SELECT CURRENT_USER()', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['CURRENT_USER()'], 'user_1@localhost');
-
-    connection.changeUser({user: 'user_2', password: 'pass_2'}, function (err) {
-      assert.ifError(err);
-      connection.destroy();
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function (incomingConnection) {
-  random(20, function (err, scramble) {
-    assert.ifError(err);
-
-    incomingConnection.on('authSwitchResponse', function (packet) {
-      this._sendAuthResponse(packet.data, common.Auth.token('pass_2', scramble));
-    });
-
-    incomingConnection.on('changeUser', function () {
-      this.authSwitchRequest({
-        authMethodName : 'mysql_native_password',
-        authMethodData : scramble
-      });
-    });
-
-    incomingConnection.handshake();
-  });
-});
diff --git a/test/unit/connection/test-change-user-before-connect.js b/test/unit/connection/test-change-user-before-connect.js
deleted file mode 100644
index 0549dd8..0000000
--- a/test/unit/connection/test-change-user-before-connect.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  user : 'user_1'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-  assert.equal(connection.state, 'disconnected');
-
-  connection.changeUser({user: 'user_2'}, function (err) {
-    assert.ifError(err);
-
-    connection.query('SELECT CURRENT_USER()', function (err, result) {
-      assert.ifError(err);
-      assert.strictEqual(result[0]['CURRENT_USER()'], 'user_2@localhost');
-
-      connection.destroy();
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/connection/test-change-user-empty-queue.js b/test/unit/connection/test-change-user-empty-queue.js
deleted file mode 100644
index 7c98eb2..0000000
--- a/test/unit/connection/test-change-user-empty-queue.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT 1', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-
-    // wait till protocol._queue is empty
-    connection.once('drain', function() {
-      connection.changeUser({user: 'user_1'}, function (err) {
-        assert.ifError(err);
-        connection.destroy();
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/connection/test-change-user-fatal-error.js b/test/unit/connection/test-change-user-fatal-error.js
deleted file mode 100644
index 8e680f2..0000000
--- a/test/unit/connection/test-change-user-fatal-error.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// This test verifies that changeUser errors are treated as fatal errors.  The
-// rationale for that is that a failure to execute a changeUser sequence may
-// cause unexpected behavior for queries that were enqueued under the
-// assumption of changeUser to succeed.
-
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.changeUser({user: 'does-not-exist', password: 'wrong-password'}, function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.equal(err.fatal, true);
-
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-change-user-timeout.js b/test/unit/connection/test-change-user-timeout.js
deleted file mode 100644
index ada603f..0000000
--- a/test/unit/connection/test-change-user-timeout.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  user : 'user_1'
-});
-
-var timeout = setTimeout(function () {
-  throw new Error('test timeout');
-}, 5000);
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT CURRENT_USER()', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['CURRENT_USER()'], 'user_1@localhost');
-
-    connection.changeUser({user: 'user_2', timeout: 1000}, function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'PROTOCOL_SEQUENCE_TIMEOUT');
-      assert.equal(err.message, 'ChangeUser inactivity timeout');
-
-      connection.destroy();
-      server.destroy();
-      clearTimeout(timeout);
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake();
-  conn.on('changeUser', function () {
-    // do nothing
-  });
-});
diff --git a/test/unit/connection/test-change-user.js b/test/unit/connection/test-change-user.js
deleted file mode 100644
index 53ca086..0000000
--- a/test/unit/connection/test-change-user.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  user : 'user_1'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('SELECT CURRENT_USER()', function (err, result) {
-    assert.ifError(err);
-    assert.strictEqual(result[0]['CURRENT_USER()'], 'user_1@localhost');
-
-    connection.changeUser({user: 'user_2'}, function (err) {
-      assert.ifError(err);
-
-      connection.query('SELECT CURRENT_USER()', function (err, result) {
-        assert.ifError(err);
-        assert.strictEqual(result[0]['CURRENT_USER()'], 'user_2@localhost');
-
-        connection.destroy();
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/connection/test-connect-domain.js b/test/unit/connection/test-connect-domain.js
deleted file mode 100644
index 0e179f3..0000000
--- a/test/unit/connection/test-connect-domain.js
+++ /dev/null
@@ -1,45 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-var d1 = domain.create();
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var connection = null;
-  var timer      = setInterval(function () {
-    if (connection.state !== 'authenticated') return;
-    clearInterval(timer);
-
-    assert.ok(!domain.active, 'no current domain');
-    connection.query('SELECT 1', function (err) {
-      assert.ifError(err);
-      assert.equal(domain.active, d0, 'current domain is d0');
-
-      connection.destroy();
-      server.destroy();
-    });
-  }, 200);
-
-  d0.run(function () {
-    connection = common.createConnection({port: common.fakeServerPort});
-    assert.equal(connection.domain, d0, 'connection belongs to d0');
-
-    d1.run(function () {
-      connection.connect(function (err) {
-        assert.ifError(err);
-        assert.equal(domain.active, d1, 'current domain is d1');
-      });
-    });
-  });
-});
diff --git a/test/unit/connection/test-connect-error-event.js b/test/unit/connection/test-connect-error-event.js
deleted file mode 100644
index 0354452..0000000
--- a/test/unit/connection/test-connect-error-event.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect();
-
-  connection.on('error', function (err) {
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.ok(err.fatal);
-
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.deny();
-});
diff --git a/test/unit/connection/test-connect-event.js b/test/unit/connection/test-connect-event.js
deleted file mode 100644
index ef59a86..0000000
--- a/test/unit/connection/test-connect-event.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.on('connect', function () {
-    connection.destroy();
-    server.destroy();
-  });
-
-  connection.connect(assert.ifError);
-});
diff --git a/test/unit/connection/test-connect-no-domain.js b/test/unit/connection/test-connect-no-domain.js
deleted file mode 100644
index 920ade7..0000000
--- a/test/unit/connection/test-connect-no-domain.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var connection = common.createConnection({port: common.fakeServerPort});
-  var timer      = setInterval(function () {
-    if (connection.state !== 'authenticated') return;
-    clearInterval(timer);
-
-    assert.ok(!domain.active, 'no current domain');
-    connection.query('SELECT 1', function (err) {
-      assert.ifError(err);
-      assert.equal(domain.active, null, 'query is not bound to domain');
-
-      connection.destroy();
-      server.destroy();
-    });
-  }, 200);
-
-  assert.equal(connection.domain, null, 'connection is not bound to domain');
-
-  d0.run(function () {
-    connection.connect(function (err) {
-      assert.ifError(err);
-      assert.equal(domain.active, d0, 'current domain is d0');
-    });
-  });
-});
diff --git a/test/unit/connection/test-connect-timeout-only.js b/test/unit/connection/test-connect-timeout-only.js
deleted file mode 100644
index a54e928..0000000
--- a/test/unit/connection/test-connect-timeout-only.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({connectTimeout: 2000, port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT SLEEP(3)', function (err, rows) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{'SLEEP(3)': 0}]);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  setTimeout(function () {
-    conn.handshake();
-  }, 400);
-});
diff --git a/test/unit/connection/test-connect-timeout.js b/test/unit/connection/test-connect-timeout.js
deleted file mode 100644
index 9050578..0000000
--- a/test/unit/connection/test-connect-timeout.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var os         = require('os');
-var interfaces = os.networkInterfaces();
-var external   = Object.keys(interfaces).some(function(name) {
-  return interfaces[name].some(function(interface) {
-    return !interface.internal;
-  });
-});
-
-if (!external) {
-  common.skipTest('no external network interfaces');
-}
-
-var connection = common.createConnection({host: '10.255.255.1', port: common.fakeServerPort, connectTimeout: 500});
-
-var testTimeout = setTimeout(function() {
-  connection.destroy();
-}, 5000);
-
-var connectErr;
-connection.connect(function(err) {
-  connectErr = err;
-  clearTimeout(testTimeout);
-});
-
-process.on('exit', function() {
-  assert.ok(connectErr);
-  assert.equal(connectErr.code, 'ETIMEDOUT');
-  assert.equal(connectErr.syscall, 'connect');
-  assert.equal(connectErr.fatal, true);
-});
diff --git a/test/unit/connection/test-connection-error.js b/test/unit/connection/test-connection-error.js
deleted file mode 100644
index c5167de..0000000
--- a/test/unit/connection/test-connection-error.js
+++ /dev/null
@@ -1,63 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-var connectErr;
-var finalErr;
-var queryErr1;
-var queryErr2;
-var queryErr3;
-var timeout;
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-  var waitCount = 4;
-
-  connection.connect(function(err) {
-    connectErr = err;
-    if (!--waitCount) end();
-  });
-
-  connection.query('SELECT 1', function(err) {
-    queryErr1 = err;
-    connection.query('SELECT 1', function(err) {
-      finalErr = err;
-      if (!--waitCount) end();
-    });
-  });
-
-  process.nextTick(function() {
-    connection.query('SELECT 1', function(err) {
-      queryErr2 = err;
-      if (!--waitCount) end();
-    });
-  });
-
-  setTimeout(function() {
-    connection.query('SELECT 1', function(err) {
-      queryErr3 = err;
-      if (!--waitCount) end();
-    });
-  }, 200);
-
-  timeout = setTimeout(end, 5000);
-});
-
-function end() {
-  if (timeout) clearTimeout(timeout);
-  server.destroy();
-}
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.deny();
-});
-
-process.on('exit', function() {
-  assert.ok(connectErr);
-  assert.ok(queryErr1);
-  assert.ok(queryErr2);
-  assert.ok(queryErr3);
-  assert.ok(finalErr);
-  assert.equal(finalErr.code, 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR');
-});
diff --git a/test/unit/connection/test-connection-ssl-ciphers-unknown.js b/test/unit/connection/test-connection-ssl-ciphers-unknown.js
deleted file mode 100644
index 81b9e92..0000000
--- a/test/unit/connection/test-connection-ssl-ciphers-unknown.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : {
-    ca      : common.getSSLConfig().ca,
-    ciphers : 'BOGUS-CIPHER'
-  }
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'HANDSHAKE_SSL_ERROR');
-    assert.equal(err.fatal, true);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (incomingConnection) {
-  incomingConnection.handshake({
-    serverCapabilities1: common.ClientConstants.CLIENT_SSL
-  });
-});
diff --git a/test/unit/connection/test-connection-ssl-ciphers.js b/test/unit/connection/test-connection-ssl-ciphers.js
deleted file mode 100644
index 6a0335f..0000000
--- a/test/unit/connection/test-connection-ssl-ciphers.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : {
-    ca      : common.getSSLConfig().ca,
-    ciphers : 'AES128-SHA'
-  }
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SHOW STATUS LIKE \'Ssl_cipher\';', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.equal(rows[0].Variable_name, 'Ssl_cipher');
-    assert.equal(rows[0].Value, 'AES128-SHA');
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (incomingConnection) {
-  incomingConnection.handshake({
-    serverCapabilities1: common.ClientConstants.CLIENT_SSL
-  });
-});
diff --git a/test/unit/connection/test-connection-ssl-denied.js b/test/unit/connection/test-connection-ssl-denied.js
deleted file mode 100644
index b3ca05b..0000000
--- a/test/unit/connection/test-connection-ssl-denied.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : 'Amazon RDS'
-});
-
-var server = common.createFakeServer();
-
-var connectErr;
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.connect(function(err) {
-    connectErr = err;
-    server.destroy();
-  });
-});
-
-process.on('exit', function() {
-  assert.ok(connectErr);
-  assert.equal(connectErr.code, 'HANDSHAKE_NO_SSL_SUPPORT');
-  assert.ok(connectErr.fatal);
-});
diff --git a/test/unit/connection/test-connection-ssl-ignore.js b/test/unit/connection/test-connection-ssl-ignore.js
deleted file mode 100644
index 1d2f50c..0000000
--- a/test/unit/connection/test-connection-ssl-ignore.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : 'Amazon RDS'
-});
-
-// Ignore bad SSL
-connection.config.ssl.rejectUnauthorized = false;
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.connect(function(err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    serverCapabilities1: common.ClientConstants.CLIENT_SSL
-  });
-});
diff --git a/test/unit/connection/test-connection-ssl-reject.js b/test/unit/connection/test-connection-ssl-reject.js
deleted file mode 100644
index 81255ce..0000000
--- a/test/unit/connection/test-connection-ssl-reject.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : 'Amazon RDS'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.connect(function(err) {
-    assert.ok(err);
-    assert.equal(err.code, 'HANDSHAKE_SSL_ERROR');
-    assert.equal(err.fatal, true);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    serverCapabilities1: common.ClientConstants.CLIENT_SSL
-  });
-});
diff --git a/test/unit/connection/test-connection-ssl.js b/test/unit/connection/test-connection-ssl.js
deleted file mode 100644
index ff9b639..0000000
--- a/test/unit/connection/test-connection-ssl.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port : common.fakeServerPort,
-  ssl  : {
-    ca: common.getSSLConfig().ca
-  }
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.ping(function(err) {
-    assert.ifError(err);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    serverCapabilities1: common.ClientConstants.CLIENT_SSL
-  });
-});
diff --git a/test/unit/connection/test-connection-thread-id-error.js b/test/unit/connection/test-connection-thread-id-error.js
deleted file mode 100644
index aea5617..0000000
--- a/test/unit/connection/test-connection-thread-id-error.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-  assert.strictEqual(connection.threadId, null);
-
-  connection.connect(function (err) {
-    assert.ok(err);
-    assert.strictEqual(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.strictEqual(connection.threadId, 42);
-
-    server.destroy();
-  });
-});
-
-server.on('connection', function (incomingConnection) {
-  incomingConnection.handshake({threadId: 42});
-  incomingConnection.on('clientAuthentication', function () {
-    this.deny();
-  });
-});
diff --git a/test/unit/connection/test-connection-thread-id.js b/test/unit/connection/test-connection-thread-id.js
deleted file mode 100644
index b5dad18..0000000
--- a/test/unit/connection/test-connection-thread-id.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-  assert.strictEqual(connection.threadId, null);
-
-  connection.connect(function(err) {
-    assert.ifError(err);
-    assert.strictEqual(connection.threadId, 42);
-
-    connection.end(function(err) {
-      assert.ifError(err);
-      assert.strictEqual(connection.threadId, 42);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    threadId: 42
-  });
-});
diff --git a/test/unit/connection/test-custom-query-format.js b/test/unit/connection/test-custom-query-format.js
deleted file mode 100644
index 9d03f7a..0000000
--- a/test/unit/connection/test-custom-query-format.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort, queryFormat: queryFormat});
-
-function queryFormat(query, values) {
-  if (!values) {
-    return query;
-  }
-
-  var escape = this.escape.bind(this);
-
-  return query.replace(/\:(\w+)/g, function (txt, key) {
-    if (values.hasOwnProperty(key)) {
-      return escape(values[key]);
-    }
-    return txt;
-  });
-}
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  assert.equal(connection.format('SELECT :a1, :a2', { a1: 1, a2: 'two' }), 'SELECT 1, \'two\'');
-  assert.equal(connection.format('SELECT :a1', []), 'SELECT :a1');
-  assert.equal(connection.format('SELECT :a1'), 'SELECT :a1');
-
-  connection.destroy();
-  server.destroy();
-});
diff --git a/test/unit/connection/test-custom-type-cast.js b/test/unit/connection/test-custom-type-cast.js
deleted file mode 100644
index 9635a00..0000000
--- a/test/unit/connection/test-custom-type-cast.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  typeCast : typeCast
-});
-
-function typeCast(field, next) {
-  if (field.type !== 'TINY') {
-    return next();
-  }
-
-  var val = field.string();
-
-  if (val === null) {
-    return null;
-  }
-
-  return (Number(val) > 0);
-}
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT value FROM typecast', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 3);
-    assert.strictEqual(rows[0].value, false);
-    assert.strictEqual(rows[1].value, true);
-    assert.strictEqual(rows[2].value, null);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM typecast':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.TINY
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('0');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('1');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString(null);
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-date-type-cast.js b/test/unit/connection/test-date-type-cast.js
deleted file mode 100644
index fea4636..0000000
--- a/test/unit/connection/test-date-type-cast.js
+++ /dev/null
@@ -1,122 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(4, function () {
-    server.destroy();
-  });
-
-  var conn1 = common.createConnection({
-    port     : common.fakeServerPort,
-    timezone : 'Z'
-  });
-  conn1.query('SELECT value FROM date_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 4);
-    assert.strictEqual(rows[0].value, '0000-00-00');
-    assert.strictEqual(rows[1].value, '2000-00-00');
-    assert.strictEqual(rows[2].value, '2000-01-00');
-    assert.ok(rows[3].value instanceof Date);
-    assert.strictEqual(rows[3].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    conn1.destroy();
-    done();
-  });
-
-  var conn2 = common.createConnection({
-    dateStrings : true,
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn2.query('SELECT value FROM date_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 4);
-    assert.strictEqual(rows[0].value, '0000-00-00');
-    assert.strictEqual(rows[1].value, '2000-00-00');
-    assert.strictEqual(rows[2].value, '2000-01-00');
-    assert.strictEqual(rows[3].value, '2000-01-02');
-    conn2.destroy();
-    done();
-  });
-
-  var conn3 = common.createConnection({
-    dateStrings : ['DATE'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn3.query('SELECT value FROM date_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 4);
-    assert.strictEqual(rows[0].value, '0000-00-00');
-    assert.strictEqual(rows[1].value, '2000-00-00');
-    assert.strictEqual(rows[2].value, '2000-01-00');
-    assert.strictEqual(rows[3].value, '2000-01-02');
-    conn3.destroy();
-    done();
-  });
-
-  var conn4 = common.createConnection({
-    dateStrings : ['DATETIME', 'TIMESTAMP'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn4.query('SELECT value FROM date_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 4);
-    assert.strictEqual(rows[0].value, '0000-00-00');
-    assert.strictEqual(rows[1].value, '2000-00-00');
-    assert.strictEqual(rows[2].value, '2000-01-00');
-    assert.ok(rows[3].value instanceof Date);
-    assert.strictEqual(rows[3].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    conn4.destroy();
-    done();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM date_rows':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.DATE
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('0000-00-00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-00-00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-datetime-type-cast.js b/test/unit/connection/test-datetime-type-cast.js
deleted file mode 100644
index 2c3a4d4..0000000
--- a/test/unit/connection/test-datetime-type-cast.js
+++ /dev/null
@@ -1,150 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(4, function () {
-    server.destroy();
-  });
-
-  var conn1 = common.createConnection({
-    port     : common.fakeServerPort,
-    timezone : 'Z'
-  });
-  conn1.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.ok(rows[4].value instanceof Date);
-    assert.strictEqual(rows[4].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    assert.ok(rows[5].value instanceof Date);
-    assert.strictEqual(rows[5].value.toISOString(), '2000-01-02T03:04:05.000Z');
-    assert.ok(rows[6].value instanceof Date);
-    assert.strictEqual(rows[6].value.toISOString(), '2000-01-02T03:04:05.006Z');
-    conn1.destroy();
-    done();
-  });
-
-  var conn2 = common.createConnection({
-    dateStrings : true,
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn2.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.strictEqual(rows[4].value, '2000-01-02 00:00:00');
-    assert.strictEqual(rows[5].value, '2000-01-02 03:04:05');
-    assert.strictEqual(rows[6].value, '2000-01-02 03:04:05.006');
-    conn2.destroy();
-    done();
-  });
-
-  var conn3 = common.createConnection({
-    dateStrings : ['DATE'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn3.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.ok(rows[4].value instanceof Date);
-    assert.strictEqual(rows[4].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    assert.ok(rows[5].value instanceof Date);
-    assert.strictEqual(rows[5].value.toISOString(), '2000-01-02T03:04:05.000Z');
-    assert.ok(rows[6].value instanceof Date);
-    assert.strictEqual(rows[6].value.toISOString(), '2000-01-02T03:04:05.006Z');
-    conn3.destroy();
-    done();
-  });
-
-  var conn4 = common.createConnection({
-    dateStrings : ['DATETIME', 'TIMESTAMP'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn4.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.strictEqual(rows[4].value, '2000-01-02 00:00:00');
-    assert.strictEqual(rows[5].value, '2000-01-02 03:04:05');
-    assert.strictEqual(rows[6].value, '2000-01-02 03:04:05.006');
-    conn4.destroy();
-    done();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM datetime_rows':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.DATETIME
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('0000-00-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-00-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:60');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:05');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:05.006');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-debug-exclude.js b/test/unit/connection/test-debug-exclude.js
deleted file mode 100644
index 406b045..0000000
--- a/test/unit/connection/test-debug-exclude.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  debug : ['OkPacket', 'ComPingPacket'],
-  port  : common.fakeServerPort
-});
-var util       = require('util');
-
-var tid    = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var messages = [];
-
-  console.log = function () {
-    var msg = util.format.apply(this, arguments);
-    if (String(msg).indexOf('--') !== -1) {
-      messages.push(msg.split(' {')[0]);
-    }
-  };
-
-  connection.ping(function (err) {
-    assert.ifError(err);
-    assert.equal(messages.length, 3);
-    assert.deepEqual(messages, [
-      '<-- (1) OkPacket',
-      '--> (1) ComPingPacket',
-      '<-- (1) OkPacket'
-    ]);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake({ threadId: ++tid });
-});
diff --git a/test/unit/connection/test-debug-parser-error.js b/test/unit/connection/test-debug-parser-error.js
deleted file mode 100644
index cdca875..0000000
--- a/test/unit/connection/test-debug-parser-error.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({debug: true, port: common.fakeServerPort});
-var util       = require('util');
-
-var tid    = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var messages = [];
-
-  console.log = function () {
-    var msg = util.format.apply(this, arguments);
-    if (String(msg).indexOf('--') !== -1) {
-      messages.push(msg.split(' {')[0]);
-    }
-  };
-
-  connection.query('SELECT value FROM stuff', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(messages.length, 6);
-    assert.deepEqual(messages, [
-      '<-- HandshakeInitializationPacket',
-      '--> (1) ClientAuthenticationPacket',
-      '<-- (1) OkPacket',
-      '--> (1) ComQueryPacket',
-      '<-- (1) ResultSetHeaderPacket',
-      '<-- (1) FieldPacket'
-    ]);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake({ threadId: ++tid });
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM stuff':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('def');
-        this._socket.write(writer.toBuffer(this._parser));
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handlePacketQuery(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-debug.js b/test/unit/connection/test-debug.js
deleted file mode 100644
index d6a2746..0000000
--- a/test/unit/connection/test-debug.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({debug: true, port: common.fakeServerPort});
-var util       = require('util');
-
-var tid    = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var messages = [];
-
-  console.log = function () {
-    var msg = util.format.apply(this, arguments);
-    if (String(msg).indexOf('--') !== -1) {
-      messages.push(msg.split(' {')[0]);
-    }
-  };
-
-  connection.ping(function (err) {
-    assert.ifError(err);
-    assert.equal(messages.length, 5);
-    assert.deepEqual(messages, [
-      '<-- HandshakeInitializationPacket',
-      '--> (1) ClientAuthenticationPacket',
-      '<-- (1) OkPacket',
-      '--> (1) ComPingPacket',
-      '<-- (1) OkPacket'
-    ]);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake({ threadId: ++tid });
-});
diff --git a/test/unit/connection/test-domain-implicit.js b/test/unit/connection/test-domain-implicit.js
deleted file mode 100644
index e26a242..0000000
--- a/test/unit/connection/test-domain-implicit.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  d0.run(function () {
-    var members = d0.members.slice(0);
-    var conn    = common.createConnection({port: common.fakeServerPort});
-
-    assert.equal(conn.domain, d0, 'connection is bound to domain d0');
-    assert.equal(d0.members.indexOf(conn), -1, 'connection is not an explicit member of domain d0');
-    assert.deepEqual(d0.members, members, 'no members added to domain d0');
-
-    conn.query('SELECT 1', function (err) {
-      assert.ifError(err);
-      assert.deepEqual(d0.members, members, 'no members added to domain d0');
-      conn.destroy();
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/connection/test-domains.js b/test/unit/connection/test-domains.js
deleted file mode 100644
index 69d13af..0000000
--- a/test/unit/connection/test-domains.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-var d1 = domain.create();
-var d2 = domain.create();
-var d3 = domain.create();
-
-var server = common.createFakeServer();
-
-var done = after(4, function () {
-  server.destroy();
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  d0.run(function () {
-    var connection = common.createConnection({port: common.fakeServerPort});
-
-    d1.run(function () {
-      connection.connect(function (err) {
-        assert.ifError(err);
-        throw new Error('inside domain 1');
-      });
-    });
-
-    d2.run(function () {
-      connection.query('SELECT 1', function (err) {
-        assert.ifError(err);
-        throw new Error('inside domain 2');
-      });
-    });
-
-    d3.run(function() {
-      connection.ping(function (err) {
-        assert.ifError(err);
-        throw new Error('inside domain 3');
-      });
-    });
-
-    connection.end(assert.ifError);
-
-    setTimeout(function() {
-      throw new Error('inside domain 0');
-    }, 100);
-
-    d2.on('error', function (err) {
-      assert.equal(err.toString(), 'Error: inside domain 2');
-      done();
-    });
-    d3.on('error', function (err) {
-      assert.equal(err.toString(), 'Error: inside domain 3');
-      done();
-    });
-  });
-});
-
-d0.on('error', function (err) {
-  assert.equal(err.toString(), 'Error: inside domain 0');
-  done();
-});
-
-d1.on('error', function (err) {
-  assert.equal(err.toString(), 'Error: inside domain 1');
-  done();
-});
diff --git a/test/unit/connection/test-double-connect.js b/test/unit/connection/test-double-connect.js
deleted file mode 100644
index 0ccee39..0000000
--- a/test/unit/connection/test-double-connect.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    connection.destroy();
-    server.destroy();
-  });
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-
-    connection.connect(function (err) {
-      assert.ok(err, 'got error');
-      assert.equal(err.code, 'PROTOCOL_ENQUEUE_HANDSHAKE_TWICE');
-      assert.ok(!err.fatal);
-      done();
-    });
-  });
-
-  connection.connect(function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'PROTOCOL_ENQUEUE_HANDSHAKE_TWICE');
-    assert.ok(!err.fatal);
-    done();
-  });
-});
diff --git a/test/unit/connection/test-drain-event.js b/test/unit/connection/test-drain-event.js
deleted file mode 100644
index 4df2114..0000000
--- a/test/unit/connection/test-drain-event.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.on('drain', function () {
-    connection.destroy();
-    server.destroy();
-  });
-
-  connection.query('SELECT 1', assert.ifError);
-});
-
diff --git a/test/unit/connection/test-end-event.js b/test/unit/connection/test-end-event.js
deleted file mode 100644
index af943f9..0000000
--- a/test/unit/connection/test-end-event.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.on('end', function () {
-    server.destroy();
-  });
-
-  connection.end(assert.ifError);
-});
-
diff --git a/test/unit/connection/test-enqueue-event.js b/test/unit/connection/test-enqueue-event.js
deleted file mode 100644
index 7a271f9..0000000
--- a/test/unit/connection/test-enqueue-event.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count = 0;
-  connection.on('enqueue', function () {
-    count++;
-  });
-
-  connection.on('drain', function () {
-    assert.equal(count, 3);
-    connection.destroy();
-    server.destroy();
-  });
-
-  connection.query('SELECT 1', assert.ifError);
-  connection.ping(assert.ifError);
-});
-
diff --git a/test/unit/connection/test-error-event.js b/test/unit/connection/test-error-event.js
deleted file mode 100644
index 44a87a2..0000000
--- a/test/unit/connection/test-error-event.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('INVALID SQL');
-
-  connection.on('error', function (err) {
-    assert.equal(err.code, 'ER_PARSE_ERROR');
-    assert.ok(!err.fatal);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-error-trace-bad-stack.js b/test/unit/connection/test-error-trace-bad-stack.js
deleted file mode 100644
index 7d17743..0000000
--- a/test/unit/connection/test-error-trace-bad-stack.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  // Common mistake to leave in code
-  Error.prepareStackTrace = function (err, stack) {
-    return stack;
-  };
-
-  connection.query('INVALID SQL', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(typeof err.stack !== 'string', 'error stack is not a string');
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-error-trace-no-stack.js b/test/unit/connection/test-error-trace-no-stack.js
deleted file mode 100644
index b705b66..0000000
--- a/test/unit/connection/test-error-trace-no-stack.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  Error.stackTraceLimit = 0;
-
-  connection.query('INVALID SQL', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(!err.stack || err.stack.indexOf('\n    --------------------\n') === -1,
-      'error stack does not have delimiter');
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-error-trace.js b/test/unit/connection/test-error-trace.js
deleted file mode 100644
index 3f56f20..0000000
--- a/test/unit/connection/test-error-trace.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('INVALID SQL', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(typeof err.stack === 'string', 'error stack is string');
-    assert.ok(err.stack.indexOf('\n    --------------------\n') !== -1, 'error stack has delimiter');
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-exception-safety.js b/test/unit/connection/test-exception-safety.js
deleted file mode 100644
index aa14706..0000000
--- a/test/unit/connection/test-exception-safety.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// This test covers all event / callback interfaces offered by node-mysql and
-// throws an exception in them. Exception safety means that each of those
-// exceptions can be caught by an 'uncaughtException' / Domain handler without
-// the connection instance ending up in a bad state where it doesn't work
-// properly or doesn't execute the next sequence anymore.
-
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var errors = [];
-  process.on('uncaughtException', function(err) {
-    errors.push(err);
-  });
-
-  // Normal callback
-  connection.connect(function(err) {
-    throw err || new Error('1');
-  });
-
-  // Normal callback (same code path as connect, but in here should that
-  // implementation detail change at some point).
-  connection.query('SELECT 1', function(err) {
-    throw err || new Error('2');
-  });
-
-  // Row streaming events
-  connection.query('SELECT 1')
-    .on('fields', function () {
-      throw new Error('3');
-    })
-    .on('result', function () {
-      throw new Error('4');
-    });
-
-  // Normal callback with error
-  connection.query('INVALID SQL', function(err) {
-    assert.equal(err.code, 'ER_PARSE_ERROR');
-    throw new Error('5');
-  });
-
-  // Row streaming 'result' event triggered by Ok Packet (special code path)
-  connection.query('USE test')
-    .on('result', function () {
-      throw new Error('6');
-    });
-
-  // Normal callback (same code path as connect, but in here should that
-  // implementation detail change at some point).
-  connection.end(function(err) {
-    server.destroy();
-    throw err || new Error('7');
-  });
-
-  process.on('exit', function() {
-    process.removeAllListeners();
-
-    var expectedErrors = 7;
-    for (var i = 0; i < expectedErrors - 1; i++) {
-      var error = errors[i];
-      assert.equal(error.message, String(i + 1));
-      assert.equal(error.code, undefined);
-    }
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'INVALID SQL':
-        this.error('Parse error', common.Errors.ER_PARSE_ERROR);
-        break;
-      case 'USE test':
-        this.ok();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-fatal-connect-error.js b/test/unit/connection/test-fatal-connect-error.js
deleted file mode 100644
index e39825e..0000000
--- a/test/unit/connection/test-fatal-connect-error.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var count  = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(3, function () {
-    server.destroy();
-  });
-
-  connection.connect(function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(err.fatal);
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    done();
-  });
-
-  connection.query('SELECT 1', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(err.fatal);
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    done();
-  });
-
-  connection.ping(function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(err.fatal);
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    done();
-  });
-});
-
-server.on('connection', function (conn) {
-  if (count === 0) {
-    conn.deny();
-    return;
-  }
-
-  count++;
-  conn.handshake();
-});
diff --git a/test/unit/connection/test-fatal-network-error-going-to-all-callbacks.js b/test/unit/connection/test-fatal-network-error-going-to-all-callbacks.js
deleted file mode 100644
index 8e21293..0000000
--- a/test/unit/connection/test-fatal-network-error-going-to-all-callbacks.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.bogusPort});
-
-var timer = setTimeout(function () {
-  throw new Error('test timeout');
-}, 5000);
-
-var done = after(2, function () {
-  clearTimeout(timer);
-});
-
-connection.connect(function (err) {
-  assert.ok(err, 'got connect error');
-  assert.equal(err.code, 'ECONNREFUSED');
-  assert.equal(err.fatal, true);
-  done();
-});
-
-connection.query('SELECT 1', function (err) {
-  assert.ok(err, 'got query error');
-  assert.equal(err.code, 'ECONNREFUSED');
-  assert.equal(err.fatal, true);
-  done();
-});
diff --git a/test/unit/connection/test-fatal-network-error-without-handlers.js b/test/unit/connection/test-fatal-network-error-without-handlers.js
deleted file mode 100644
index dde8f65..0000000
--- a/test/unit/connection/test-fatal-network-error-without-handlers.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.bogusPort});
-
-var timer = setTimeout(function () {
-  throw new Error('test timeout');
-}, 5000);
-
-connection.connect();
-connection.query('SELECT 1');
-
-connection.on('error', function (err) {
-  assert.ok(err, 'got connect error');
-  assert.equal(err.code, 'ECONNREFUSED');
-  assert.equal(err.fatal, true);
-  clearTimeout(timer);
-});
diff --git a/test/unit/connection/test-host-denied-error.js b/test/unit/connection/test-host-denied-error.js
deleted file mode 100644
index c19ac9b..0000000
--- a/test/unit/connection/test-host-denied-error.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var assert     = require('assert');
-
-var server = common.createFakeServer();
-
-var connectErr;
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.connect(function(err) {
-    connectErr = err;
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.deny('You suck.', common.Errors.ER_HOST_NOT_PRIVILEGED);
-});
-
-process.on('exit', function() {
-  assert.equal(connectErr.code, 'ER_HOST_NOT_PRIVILEGED');
-  assert.ok(/You suck/.test(connectErr.message));
-  assert.equal(connectErr.fatal, true);
-});
diff --git a/test/unit/connection/test-implicit-connect.js b/test/unit/connection/test-implicit-connect.js
deleted file mode 100644
index c751625..0000000
--- a/test/unit/connection/test-implicit-connect.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT 1', function (err, rows) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{1: 1}]);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-incorrect-packet-sequence.js b/test/unit/connection/test-incorrect-packet-sequence.js
deleted file mode 100644
index 4638fbf..0000000
--- a/test/unit/connection/test-incorrect-packet-sequence.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err){
-  assert.ifError(err);
-
-  connection.ping(function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'PROTOCOL_INCORRECT_PACKET_SEQUENCE');
-    assert.equal(err.fatal, true);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function (connection) {
-  connection.handshake();
-  connection.on('ping', function () {
-    this._sendPacket(new common.Packets.EofPacket());
-    this._parser.resetPacketNumber();
-  });
-});
diff --git a/test/unit/connection/test-insecure-auth-error.js b/test/unit/connection/test-insecure-auth-error.js
deleted file mode 100644
index b5d9998..0000000
--- a/test/unit/connection/test-insecure-auth-error.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({
-  port     : common.fakeServerPort,
-  password : 'oldpw'
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'HANDSHAKE_INSECURE_AUTH');
-    assert.equal(err.fatal, true);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.on('clientAuthentication', function () {
-    this._sendPacket(new common.Packets.UseOldPasswordPacket());
-  });
-
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-large-blobs.js b/test/unit/connection/test-large-blobs.js
deleted file mode 100644
index fcaee32..0000000
--- a/test/unit/connection/test-large-blobs.js
+++ /dev/null
@@ -1,76 +0,0 @@
-var assert     = require('assert');
-var Buffer     = require('safe-buffer').Buffer;
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT value FROM blobs', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 6);
-    assert.equal(rows[0].value.length, 0);
-    assert.equal(rows[1].value.length, 8);
-    assert.equal(rows[2].value.length, (Math.pow(2, 16) - 1));
-    assert.equal(rows[3].value.length, Math.pow(2, 16));
-    assert.equal(rows[4].value.length, (Math.pow(2, 24) - 1));
-    assert.equal(rows[5].value.length, Math.pow(2, 24));
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM blobs':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.BINARY,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.LONG_BLOB
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc(0));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc(8, '.'));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc((Math.pow(2, 16) - 1), '.'));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc(Math.pow(2, 16), '.'));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc((Math.pow(2, 24) - 1), '.'));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedBuffer(Buffer.alloc(Math.pow(2, 24), '.'));
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handlePacketQuery(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-load-data-infile-disable.js b/test/unit/connection/test-load-data-infile-disable.js
deleted file mode 100644
index 03d2be1..0000000
--- a/test/unit/connection/test-load-data-infile-disable.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort, localInfile: false});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('LOAD DATA LOCAL INFILE ? INTO TABLE ??', ['data.csv', 'foo'], function (err, result) {
-    assert.ok(err);
-    assert.equal(err.code, 'LOCAL_FILES_DISABLED');
-    assert.ok(!err.fatal);
-    assert.equal(result.affectedRows, 0);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.on('clientAuthentication', function (packet) {
-    if (packet.clientFlags & common.ClientConstants.LOCAL_FILES) {
-      conn.deny();
-    } else {
-      conn.ok();
-    }
-  });
-  conn.on('query', function (packet) {
-    if (packet.sql.indexOf('LOAD DATA LOCAL INFILE') === 0) {
-      conn.once('EmptyPacket', function () {
-        conn.ok();
-      });
-      this._sendPacket(new common.Packets.LocalInfileRequestPacket({
-        filename: common.fixtures + '/data.csv'
-      }));
-    } else {
-      this._handleQueryPacket(packet);
-    }
-  });
-  conn.handshake();
-});
diff --git a/test/unit/connection/test-long-stack-traces-disabled.js b/test/unit/connection/test-long-stack-traces-disabled.js
deleted file mode 100644
index d9ddb35..0000000
--- a/test/unit/connection/test-long-stack-traces-disabled.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort, trace: false});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('invalid sql', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(err.stack.indexOf(__filename) < 0);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-long-stack-traces-for-connection-errors.js b/test/unit/connection/test-long-stack-traces-for-connection-errors.js
deleted file mode 100644
index d10e696..0000000
--- a/test/unit/connection/test-long-stack-traces-for-connection-errors.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.bogusPort});
-
-connection.connect(function (err) {
-  assert.ok(err, 'got error');
-  assert.ok(err.stack.indexOf(__filename) > 0);
-});
diff --git a/test/unit/connection/test-long-stack-traces.js b/test/unit/connection/test-long-stack-traces.js
deleted file mode 100644
index 2f54e90..0000000
--- a/test/unit/connection/test-long-stack-traces.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('invalid sql', function (err) {
-    assert.ok(err, 'got error');
-    assert.ok(err.stack.indexOf(__filename) > 0);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/connection/test-packet-out-of-order.js b/test/unit/connection/test-packet-out-of-order.js
deleted file mode 100644
index c20e366..0000000
--- a/test/unit/connection/test-packet-out-of-order.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-var serverConn = null;
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.connect(function(err) {
-    assert.ifError(err);
-
-    serverConn.ok();
-
-    connection.end(function(err) {
-      assert.ok(err);
-      assert.equal(err.code, 'PROTOCOL_PACKETS_OUT_OF_ORDER');
-      assert.equal(err.fatal, true);
-      assert.ok(/Packets out of order/.test(err.message));
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  serverConn = incomingConnection;
-  incomingConnection.handshake();
-});
diff --git a/test/unit/connection/test-parser-error.js b/test/unit/connection/test-parser-error.js
deleted file mode 100644
index 8195f5f..0000000
--- a/test/unit/connection/test-parser-error.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  connection.query('SELECT value FROM stuff', function (err) {
-    assert.ok(err, 'got err');
-    assert.equal(err.code, 'PARSER_READ_PAST_END');
-    assert.equal(!!err.fatal, false);
-    assert.equal(err.offset, 4);
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM stuff':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('def');
-        this._socket.write(writer.toBuffer(this._parser));
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handlePacketQuery(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-protocol-stray-packet.js b/test/unit/connection/test-protocol-stray-packet.js
deleted file mode 100644
index 1220c37..0000000
--- a/test/unit/connection/test-protocol-stray-packet.js
+++ /dev/null
@@ -1,33 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.on('error', function (err) {
-    assert.equal(err.code, 'PROTOCOL_STRAY_PACKET');
-    assert.equal(err.fatal, true);
-    connection.destroy();
-    server.destroy();
-  });
-
-  connection.query('SELECT 1', assert.ifError);
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    var resetPacketNumber = this._parser.resetPacketNumber;
-
-    // Prevent packet number from being reset
-    this._parser.resetPacketNumber = function () {};
-    this._handleQueryPacket(packet);
-
-    this._parser.resetPacketNumber = resetPacketNumber;
-    this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-      fieldCount: 1
-    }));
-  });
-});
diff --git a/test/unit/connection/test-query-after-destroy.js b/test/unit/connection/test-query-after-destroy.js
deleted file mode 100644
index bc999f7..0000000
--- a/test/unit/connection/test-query-after-destroy.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var sync = true;
-
-  connection.destroy();
-
-  connection.query('SELECT 1', function (err) {
-    assert.ok(!sync);
-    assert.ok(err);
-    assert.equal(err.fatal, false);
-    assert.equal(err.code, 'PROTOCOL_ENQUEUE_AFTER_DESTROY');
-    server.destroy();
-  });
-
-  sync = false;
-});
diff --git a/test/unit/connection/test-query-after-end-without-callback.js b/test/unit/connection/test-query-after-end-without-callback.js
deleted file mode 100644
index a60281b..0000000
--- a/test/unit/connection/test-query-after-end-without-callback.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    server.destroy();
-  });
-
-  connection.connect(assert.ifError);
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    done();
-  });
-
-  connection.on('error', function (err) {
-    assert.ok(err);
-    assert.equal(err.fatal, false);
-    assert.equal(err.code, 'PROTOCOL_ENQUEUE_AFTER_QUIT');
-    done();
-  });
-
-  connection.query('SELECT 1');
-});
diff --git a/test/unit/connection/test-query-after-end.js b/test/unit/connection/test-query-after-end.js
deleted file mode 100644
index 81607a9..0000000
--- a/test/unit/connection/test-query-after-end.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    server.destroy();
-  });
-
-  connection.connect(assert.ifError);
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    done();
-  });
-
-  connection.query('SELECT 1', function (err) {
-    assert.ok(err);
-    assert.equal(err.fatal, false);
-    assert.equal(err.code, 'PROTOCOL_ENQUEUE_AFTER_QUIT');
-    done();
-  });
-});
diff --git a/test/unit/connection/test-query-timeout.js b/test/unit/connection/test-query-timeout.js
deleted file mode 100644
index 3ef8a67..0000000
--- a/test/unit/connection/test-query-timeout.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-var timer = setTimeout(function () {
-  throw new Error('test timeout');
-}, 2000);
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.query({sql: 'SELECT 1', timeout: 200}, function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'PROTOCOL_SEQUENCE_TIMEOUT');
-    assert.equal(err.fatal, true);
-    assert.equal(err.message, 'Query inactivity timeout');
-    assert.equal(err.timeout, 200);
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn._socket.on('close', function() {
-    clearTimeout(timer);
-    server.destroy();
-  });
-  conn.on('query', function () {
-    // Do nothing; timeout
-  });
-});
diff --git a/test/unit/connection/test-quit-ok-packet.js b/test/unit/connection/test-quit-ok-packet.js
deleted file mode 100644
index 5781a5b..0000000
--- a/test/unit/connection/test-quit-ok-packet.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake();
-  conn.on('quit', function () {
-    conn.ok();
-  });
-});
diff --git a/test/unit/connection/test-server-unexpected-disconnect.js b/test/unit/connection/test-server-unexpected-disconnect.js
deleted file mode 100644
index b5bc137..0000000
--- a/test/unit/connection/test-server-unexpected-disconnect.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var endErr;
-connection.on('end', function(err) {
-  assert.ok(!endErr);
-  endErr = err;
-});
-
-var queryErr;
-
-var server = common.createFakeServer();
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  connection.query('SELECT 1', function(err) {
-    assert.ok(!queryErr);
-    queryErr = err;
-  });
-});
-
-server.on('connection', function(connection) {
-  connection.handshake();
-
-  connection.on('query', function () {
-    server.destroy();
-  });
-});
-
-process.on('exit', function() {
-  assert.strictEqual(queryErr.code, 'PROTOCOL_CONNECTION_LOST');
-  assert.strictEqual(queryErr.fatal, true);
-
-  assert.strictEqual(endErr, queryErr);
-});
diff --git a/test/unit/connection/test-timestamp-type-cast.js b/test/unit/connection/test-timestamp-type-cast.js
deleted file mode 100644
index 295a5fc..0000000
--- a/test/unit/connection/test-timestamp-type-cast.js
+++ /dev/null
@@ -1,150 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(4, function () {
-    server.destroy();
-  });
-
-  var conn1 = common.createConnection({
-    port     : common.fakeServerPort,
-    timezone : 'Z'
-  });
-  conn1.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.ok(rows[4].value instanceof Date);
-    assert.strictEqual(rows[4].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    assert.ok(rows[5].value instanceof Date);
-    assert.strictEqual(rows[5].value.toISOString(), '2000-01-02T03:04:05.000Z');
-    assert.ok(rows[6].value instanceof Date);
-    assert.strictEqual(rows[6].value.toISOString(), '2000-01-02T03:04:05.006Z');
-    conn1.destroy();
-    done();
-  });
-
-  var conn2 = common.createConnection({
-    dateStrings : true,
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn2.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.strictEqual(rows[4].value, '2000-01-02 00:00:00');
-    assert.strictEqual(rows[5].value, '2000-01-02 03:04:05');
-    assert.strictEqual(rows[6].value, '2000-01-02 03:04:05.006');
-    conn2.destroy();
-    done();
-  });
-
-  var conn3 = common.createConnection({
-    dateStrings : ['DATE'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn3.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.ok(rows[4].value instanceof Date);
-    assert.strictEqual(rows[4].value.toISOString(), '2000-01-02T00:00:00.000Z');
-    assert.ok(rows[5].value instanceof Date);
-    assert.strictEqual(rows[5].value.toISOString(), '2000-01-02T03:04:05.000Z');
-    assert.ok(rows[6].value instanceof Date);
-    assert.strictEqual(rows[6].value.toISOString(), '2000-01-02T03:04:05.006Z');
-    conn3.destroy();
-    done();
-  });
-
-  var conn4 = common.createConnection({
-    dateStrings : ['DATETIME', 'TIMESTAMP'],
-    port        : common.fakeServerPort,
-    timezone    : 'Z'
-  });
-  conn4.query('SELECT value FROM datetime_rows', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 7);
-    assert.strictEqual(rows[0].value, '0000-00-00 00:00:00');
-    assert.strictEqual(rows[1].value, '2000-00-00 00:00:00');
-    assert.strictEqual(rows[2].value, '2000-01-00 00:00:00');
-    assert.strictEqual(rows[3].value, '2000-01-02 03:04:60');
-    assert.strictEqual(rows[4].value, '2000-01-02 00:00:00');
-    assert.strictEqual(rows[5].value, '2000-01-02 03:04:05');
-    assert.strictEqual(rows[6].value, '2000-01-02 03:04:05.006');
-    conn4.destroy();
-    done();
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM datetime_rows':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.TIMESTAMP
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('0000-00-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-00-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-00 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:60');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 00:00:00');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:05');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('2000-01-02 03:04:05.006');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/connection/test-unix-domain-socket.js b/test/unit/connection/test-unix-domain-socket.js
deleted file mode 100644
index a46c99b..0000000
--- a/test/unit/connection/test-unix-domain-socket.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * This test is skipped on Windows.
- */
-
-var assert = require('assert');
-var common = require('../../common');
-
-if (process.platform === 'win32') {
-  common.skipTest('windows does not support unix sockets');
-}
-
-var connection = common.createConnection({socketPath: common.fakeServerSocket});
-var server     = common.createFakeServer();
-var didConnect = false;
-
-server.listen(common.fakeServerSocket, function (err) {
-  assert.ifError(err);
-
-  connection.connect(function (err) {
-    assert.ifError(err);
-
-    assert.equal(didConnect, false);
-    didConnect = true;
-
-    connection.destroy();
-    server.destroy();
-  });
-});
-
-var hadConnection = false;
-server.on('connection', function(connection) {
-  connection.handshake();
-
-  assert.equal(hadConnection, false);
-  hadConnection = true;
-});
-
-process.on('exit', function() {
-  assert.equal(didConnect, true);
-  assert.equal(hadConnection, true);
-});
diff --git a/test/unit/pool-cluster/test-add-after-end.js b/test/unit/pool-cluster/test-add-after-end.js
deleted file mode 100644
index 07076c5..0000000
--- a/test/unit/pool-cluster/test-add-after-end.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var cluster    = common.createPoolCluster();
-var poolConfig = common.getTestConfig();
-
-assert.doesNotThrow(cluster.add.bind(cluster, 'SLAVE1', poolConfig));
-
-cluster.end(function (err) {
-  assert.ifError(err);
-
-  assert.throws(cluster.add.bind(cluster, 'SLAVE3', poolConfig), /PoolCluster is closed/);
-});
-
-assert.throws(cluster.add.bind(cluster, 'SLAVE2', poolConfig), /PoolCluster is closed/);
diff --git a/test/unit/pool-cluster/test-add-same-id.js b/test/unit/pool-cluster/test-add-same-id.js
deleted file mode 100644
index 084e7aa..0000000
--- a/test/unit/pool-cluster/test-add-same-id.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var cluster    = common.createPoolCluster();
-var poolConfig = common.getTestConfig();
-
-assert.doesNotThrow(cluster.add.bind(cluster, 'SLAVE1', poolConfig));
-assert.throws(cluster.add.bind(cluster, 'SLAVE1', poolConfig), /Node ID "SLAVE1" is already defined in PoolCluster/);
diff --git a/test/unit/pool-cluster/test-connection-default-selector.js b/test/unit/pool-cluster/test-connection-default-selector.js
deleted file mode 100644
index 32c2bf8..0000000
--- a/test/unit/pool-cluster/test-connection-default-selector.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({defaultSelector: 'ORDER'});
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*');
-
-  pool.getConnection(function (err, conn1) {
-    assert.ifError(err);
-    assert.strictEqual(conn1._clusterId, 'SLAVE1');
-
-    pool.getConnection(function (err, conn2) {
-      assert.ifError(err);
-      assert.strictEqual(conn2._clusterId, 'SLAVE1');
-
-      conn1.release();
-      conn2.release();
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-connection-error-remove.js b/test/unit/pool-cluster/test-connection-error-remove.js
deleted file mode 100644
index 2d66c66..0000000
--- a/test/unit/pool-cluster/test-connection-error-remove.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 1
-});
-
-var connCount = 0;
-var server1   = common.createFakeServer();
-var server2   = common.createFakeServer();
-cluster.add('SLAVE1', common.getTestConfig({port: common.fakeServerPort + 0}));
-cluster.add('SLAVE2', common.getTestConfig({port: common.fakeServerPort + 1}));
-
-server1.listen(common.fakeServerPort + 0, function (err) {
-  assert.ifError(err);
-
-  server2.listen(common.fakeServerPort + 1, function (err) {
-    assert.ifError(err);
-
-    var pool = cluster.of('*', 'RR');
-    var removedNodeId;
-
-    cluster.on('remove', function (nodeId) {
-      removedNodeId = nodeId;
-    });
-
-    pool.getConnection(function (err, connection) {
-      assert.ifError(err);
-      assert.equal(connCount, 2);
-      assert.equal(connection._clusterId, 'SLAVE2');
-      assert.equal(removedNodeId, 'SLAVE1');
-
-      connection.release();
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server1.destroy();
-        server2.destroy();
-      });
-    });
-  });
-});
-
-server1.on('connection', function (conn) {
-  connCount += 1;
-  conn.deny();
-});
-
-server2.on('connection', function (conn) {
-  connCount += 1;
-  conn.handshake();
-});
diff --git a/test/unit/pool-cluster/test-connection-error.js b/test/unit/pool-cluster/test-connection-error.js
deleted file mode 100644
index e9b5483..0000000
--- a/test/unit/pool-cluster/test-connection-error.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 5
-});
-var server  = common.createFakeServer();
-
-var connCount  = 0;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  cluster.getConnection('MASTER', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.equal(err.fatal, true);
-    assert.equal(connCount, 5);
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  connCount += 1;
-  incomingConnection.deny();
-});
diff --git a/test/unit/pool-cluster/test-connection-fatal-error-remove.js b/test/unit/pool-cluster/test-connection-fatal-error-remove.js
deleted file mode 100644
index 16f1ff7..0000000
--- a/test/unit/pool-cluster/test-connection-fatal-error-remove.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({removeNodeErrorCount: 1});
-
-var server = common.createFakeServer();
-cluster.add('MASTER', common.getTestConfig({
-  acquireTimeout : 100,
-  port           : common.fakeServerPort
-}));
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('*', 'RR');
-
-  pool.getConnection(function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'PROTOCOL_SEQUENCE_TIMEOUT');
-    assert.equal(err.fatal, true);
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function () {
-  // Let connection time out
-});
diff --git a/test/unit/pool-cluster/test-connection-no-retry.js b/test/unit/pool-cluster/test-connection-no-retry.js
deleted file mode 100644
index 3c33879..0000000
--- a/test/unit/pool-cluster/test-connection-no-retry.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({canRetry: false});
-var server  = common.createFakeServer();
-
-var connCount  = 0;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  cluster.getConnection('MASTER', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.equal(err.fatal, true);
-    assert.equal(connCount, 1);
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-  conn.deny();
-});
diff --git a/test/unit/pool-cluster/test-connection-order-fatal.js b/test/unit/pool-cluster/test-connection-order-fatal.js
deleted file mode 100644
index 6dfe718..0000000
--- a/test/unit/pool-cluster/test-connection-order-fatal.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var after   = require('after');
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig1 = common.getTestConfig({port: common.bogusPort});
-var poolConfig2 = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig1);
-cluster.add('SLAVE2', poolConfig2);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  var done = after(2, function () {
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.strictEqual(connection._clusterId, 'SLAVE2');
-    done();
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.strictEqual(connection._clusterId, 'SLAVE2');
-    done();
-  });
-});
diff --git a/test/unit/pool-cluster/test-connection-order.js b/test/unit/pool-cluster/test-connection-order.js
deleted file mode 100644
index 2540b1f..0000000
--- a/test/unit/pool-cluster/test-connection-order.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.getConnection(function (err, conn1) {
-    assert.ifError(err);
-    assert.strictEqual(conn1._clusterId, 'SLAVE1');
-
-    pool.getConnection(function (err, conn2) {
-      assert.ifError(err);
-      assert.strictEqual(conn2._clusterId, 'SLAVE1');
-
-      conn1.release();
-      conn2.release();
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-connection-random.js b/test/unit/pool-cluster/test-connection-random.js
deleted file mode 100644
index 805e1fc..0000000
--- a/test/unit/pool-cluster/test-connection-random.js
+++ /dev/null
@@ -1,54 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var seedrandom = require('seedrandom');
-var cluster    = common.createPoolCluster();
-var server     = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-cluster.add('SLAVE3', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var count = 7;
-  var order = [];
-  var pool  = cluster.of('SLAVE*', 'RANDOM');
-
-  seedrandom('cluster random rest', {
-    global: true
-  });
-
-  next();
-
-  function done() {
-    assert.deepEqual(order, [
-      'SLAVE2',
-      'SLAVE3',
-      'SLAVE2',
-      'SLAVE2',
-      'SLAVE1',
-      'SLAVE2',
-      'SLAVE1'
-    ]);
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  }
-
-  function next() {
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      order.push(conn._clusterId);
-      conn.release();
-
-      if (--count > 0) {
-        next();
-      } else {
-        done();
-      }
-    });
-  }
-});
diff --git a/test/unit/pool-cluster/test-connection-retry-fatal-end.js b/test/unit/pool-cluster/test-connection-retry-fatal-end.js
deleted file mode 100644
index 563e768..0000000
--- a/test/unit/pool-cluster/test-connection-retry-fatal-end.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 1
-});
-
-var connCount  = 0;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  cluster.getConnection('MASTER', function (err) {
-    assert.ifError(err);
-
-    cluster.getConnection('MASTER', function (err) {
-      assert.ok(err);
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-
-  if (connCount < 2) {
-    conn.handshake();
-  } else {
-    conn.destroy();
-    server.destroy();
-  }
-});
diff --git a/test/unit/pool-cluster/test-connection-retry.js b/test/unit/pool-cluster/test-connection-retry.js
deleted file mode 100644
index e7c9a2f..0000000
--- a/test/unit/pool-cluster/test-connection-retry.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 5
-});
-
-var connCount  = 0;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  cluster.getConnection('MASTER', function (err, connection) {
-    assert.ifError(err);
-    assert.equal(connCount, 2);
-    assert.equal(connection._clusterId, 'MASTER');
-
-    connection.release();
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-
-  if (connCount < 2) {
-    conn.destroy();
-  } else {
-    conn.handshake();
-  }
-});
diff --git a/test/unit/pool-cluster/test-connection-rr-error.js b/test/unit/pool-cluster/test-connection-rr-error.js
deleted file mode 100644
index 9b3f01c..0000000
--- a/test/unit/pool-cluster/test-connection-rr-error.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 5
-});
-
-var connCount = 0;
-var server1   = common.createFakeServer();
-var server2   = common.createFakeServer();
-cluster.add('SLAVE1', common.getTestConfig({port: common.fakeServerPort + 0}));
-cluster.add('SLAVE2', common.getTestConfig({port: common.fakeServerPort + 1}));
-
-server1.listen(common.fakeServerPort + 0, function (err) {
-  assert.ifError(err);
-
-  server2.listen(common.fakeServerPort + 1, function (err) {
-    assert.ifError(err);
-
-    var pool = cluster.of('SLAVE*', 'RR');
-
-    pool.getConnection(function (err, connection) {
-      assert.ifError(err);
-      assert.equal(connCount, 2);
-      assert.equal(connection._clusterId, 'SLAVE2');
-
-      connection.release();
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server1.destroy();
-        server2.destroy();
-      });
-    });
-  });
-});
-
-server1.on('connection', function (conn) {
-  connCount += 1;
-  conn.destroy();
-});
-
-server2.on('connection', function (conn) {
-  connCount += 1;
-  conn.handshake();
-});
diff --git a/test/unit/pool-cluster/test-connection-rr.js b/test/unit/pool-cluster/test-connection-rr.js
deleted file mode 100644
index 5c6b8da..0000000
--- a/test/unit/pool-cluster/test-connection-rr.js
+++ /dev/null
@@ -1,44 +0,0 @@
-var after   = require('after');
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var count      = 5;
-var order      = [];
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-var done = after(count, function () {
-  assert.deepEqual(order, [
-    'SLAVE1',
-    'SLAVE2',
-    'SLAVE1',
-    'SLAVE2',
-    'SLAVE1'
-  ]);
-  cluster.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'RR');
-
-  function getConnection(i) {
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      order[i] = conn._clusterId;
-      conn.release();
-      done();
-    });
-  }
-
-  for (var i = 0; i < count; i++) {
-    getConnection(i);
-  }
-});
diff --git a/test/unit/pool-cluster/test-end-empty.js b/test/unit/pool-cluster/test-end-empty.js
deleted file mode 100644
index 4b1111a..0000000
--- a/test/unit/pool-cluster/test-end-empty.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-
-var testTimeout = setTimeout(function() {
-  throw new Error('Cluster did not end');
-}, 5000);
-
-cluster.end(function (err) {
-  clearTimeout(testTimeout);
-  assert.ifError(err);
-});
diff --git a/test/unit/pool-cluster/test-internals.js b/test/unit/pool-cluster/test-internals.js
deleted file mode 100644
index 25acba5..0000000
--- a/test/unit/pool-cluster/test-internals.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add(poolConfig);
-cluster.add('MASTER', poolConfig);
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  // added nodes
-  assert.deepEqual(Object.keys(cluster._nodes), ['CLUSTER::1', 'MASTER', 'SLAVE1', 'SLAVE2']);
-
-  // _findNodeIds
-  assert.deepEqual(cluster._findNodeIds('MASTER'), ['MASTER']);
-  assert.deepEqual(cluster._findNodeIds('MA*ER'), ['MASTER']);
-  assert.deepEqual(cluster._findNodeIds('*TER*'), ['CLUSTER::1', 'MASTER']);
-  assert.deepEqual(cluster._findNodeIds('SLAVE*'), ['SLAVE1', 'SLAVE2']);
-  assert.deepEqual(cluster._findNodeIds(/slave[1-2]/i), ['SLAVE1', 'SLAVE2']);
-
-  // of singletone instance
-  var poolNamespace = cluster.of('*', 'RR');
-  var poolNamespace2 = cluster.of('*');
-  assert.strictEqual(poolNamespace, poolNamespace2);
-
-  // empty pattern
-  var emptyPoolNamespace = cluster.of();
-  assert.strictEqual(poolNamespace, emptyPoolNamespace);
-
-  // wrong selector
-  var wrongPoolNamespace = cluster.of('*', 'RR2');
-  assert.strictEqual(poolNamespace, wrongPoolNamespace);
-
-  server.destroy();
-});
diff --git a/test/unit/pool-cluster/test-pattern.js b/test/unit/pool-cluster/test-pattern.js
deleted file mode 100644
index 8e2941b..0000000
--- a/test/unit/pool-cluster/test-pattern.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-cluster.add('SLAVE', poolConfig);
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  cluster.getConnection('SLAVE4', function (err) {
-    assert.ok(err);
-    assert.equal(err.message, 'Pool does not exist.');
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-query-connection-error.js b/test/unit/pool-cluster/test-query-connection-error.js
deleted file mode 100644
index c01be16..0000000
--- a/test/unit/pool-cluster/test-query-connection-error.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-// cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.query('SELECT 1', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.deny();
-});
diff --git a/test/unit/pool-cluster/test-query-pool-error.js b/test/unit/pool-cluster/test-query-pool-error.js
deleted file mode 100644
index 6aa9d48..0000000
--- a/test/unit/pool-cluster/test-query-pool-error.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.query('SELECT 1', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'POOL_NOEXIST');
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool-cluster/test-query-restore.js b/test/unit/pool-cluster/test-query-restore.js
deleted file mode 100644
index 3bb3a61..0000000
--- a/test/unit/pool-cluster/test-query-restore.js
+++ /dev/null
@@ -1,53 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 2,
-  restoreNodeTimeout   : 100
-});
-var server  = common.createFakeServer();
-
-var connCount  = 0;
-var offline    = true;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('MASTER', 'ORDER');
-
-  pool.query('SELECT 1', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'PROTOCOL_CONNECTION_LOST');
-    assert.equal(err.fatal, true);
-    assert.equal(connCount, 2);
-
-    pool.query('SELECT 1', function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'POOL_NONEONLINE');
-
-      offline = false;
-    });
-
-    setTimeout(function () {
-      pool.query('SELECT 1', function (err) {
-        assert.ifError(err);
-        cluster.end(function (err) {
-          assert.ifError(err);
-          server.destroy();
-        });
-      });
-    }, 200);
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-
-  if (offline) {
-    conn.destroy();
-  } else {
-    conn.handshake();
-  }
-});
diff --git a/test/unit/pool-cluster/test-query.js b/test/unit/pool-cluster/test-query.js
deleted file mode 100644
index 631603a..0000000
--- a/test/unit/pool-cluster/test-query.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.query('SELECT 1', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.equal(rows[0]['1'], 1);
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-remove-by-name.js b/test/unit/pool-cluster/test-remove-by-name.js
deleted file mode 100644
index 79a6f3b..0000000
--- a/test/unit/pool-cluster/test-remove-by-name.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.strictEqual(connection._clusterId, 'SLAVE1');
-
-    connection.release();
-    cluster.remove('SLAVE1');
-
-    pool.getConnection(function (err, connection) {
-      assert.ifError(err);
-      assert.strictEqual(connection._clusterId, 'SLAVE2');
-
-      connection.release();
-      cluster.remove('SLAVE2');
-
-      pool.getConnection(function (err) {
-        assert.ok(err);
-        assert.equal(err.code, 'POOL_NOEXIST');
-
-        cluster.remove('SLAVE1');
-        cluster.remove('SLAVE2');
-
-        cluster.end(function (err) {
-          assert.ifError(err);
-          server.destroy();
-        });
-      });
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-remove-by-pattern.js b/test/unit/pool-cluster/test-remove-by-pattern.js
deleted file mode 100644
index 190340a..0000000
--- a/test/unit/pool-cluster/test-remove-by-pattern.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.strictEqual(connection._clusterId, 'SLAVE1');
-
-    connection.release();
-    cluster.remove('SLAVE*');
-
-    pool.getConnection(function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'POOL_NOEXIST');
-
-      cluster.remove('SLAVE*');
-
-      cluster.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool-cluster/test-remove-fatal-end.js b/test/unit/pool-cluster/test-remove-fatal-end.js
deleted file mode 100644
index a7f8411..0000000
--- a/test/unit/pool-cluster/test-remove-fatal-end.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster();
-var server  = common.createFakeServer();
-
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('SLAVE1', poolConfig);
-cluster.add('SLAVE2', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var pool = cluster.of('SLAVE*', 'ORDER');
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.strictEqual(connection._clusterId, 'SLAVE1');
-
-    connection.release();
-    server.destroy();
-    cluster.remove('SLAVE*');
-
-    cluster.end(assert.ifError);
-  });
-});
diff --git a/test/unit/pool-cluster/test-restore-events.js b/test/unit/pool-cluster/test-restore-events.js
deleted file mode 100644
index 061bcab..0000000
--- a/test/unit/pool-cluster/test-restore-events.js
+++ /dev/null
@@ -1,67 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 2,
-  restoreNodeTimeout   : 100
-});
-var server  = common.createFakeServer();
-
-var connCount     = 0;
-var offline       = true;
-var offlineEvents = 0;
-var onlineEvents  = 0;
-var poolConfig    = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  cluster.on('offline', function (id) {
-    assert.equal(++offlineEvents, 1);
-    assert.equal(id, 'MASTER');
-    assert.equal(connCount, 2);
-
-    cluster.getConnection('MASTER', function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'POOL_NONEONLINE');
-
-      offline = false;
-    });
-
-    setTimeout(function () {
-      cluster.getConnection('MASTER', function (err, conn) {
-        assert.ifError(err);
-        conn.release();
-      });
-    }, 200);
-  });
-
-  cluster.on('online', function (id) {
-    assert.equal(++onlineEvents, 1);
-    assert.equal(id, 'MASTER');
-    assert.equal(connCount, 3);
-
-    cluster.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-
-  cluster.getConnection('MASTER', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'PROTOCOL_CONNECTION_LOST');
-    assert.equal(err.fatal, true);
-    assert.equal(connCount, 2);
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-
-  if (offline) {
-    conn.destroy();
-  } else {
-    conn.handshake();
-  }
-});
diff --git a/test/unit/pool-cluster/test-restore.js b/test/unit/pool-cluster/test-restore.js
deleted file mode 100644
index 0567c23..0000000
--- a/test/unit/pool-cluster/test-restore.js
+++ /dev/null
@@ -1,54 +0,0 @@
-var assert  = require('assert');
-var common  = require('../../common');
-var cluster = common.createPoolCluster({
-  canRetry             : true,
-  removeNodeErrorCount : 2,
-  restoreNodeTimeout   : 100
-});
-var server  = common.createFakeServer();
-
-var connCount  = 0;
-var offline    = true;
-var poolConfig = common.getTestConfig({port: common.fakeServerPort});
-cluster.add('MASTER', poolConfig);
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  cluster.getConnection('MASTER', function (err) {
-    assert.ok(err);
-    assert.equal(err.code, 'PROTOCOL_CONNECTION_LOST');
-    assert.equal(err.fatal, true);
-    assert.equal(connCount, 2);
-
-    cluster.getConnection('MASTER', function (err) {
-      assert.ok(err);
-      assert.equal(err.code, 'POOL_NONEONLINE');
-
-      offline = false;
-    });
-
-    setTimeout(function () {
-      cluster.getConnection('MASTER', function (err, conn) {
-        assert.ifError(err);
-
-        conn.release();
-
-        cluster.end(function (err) {
-          assert.ifError(err);
-          server.destroy();
-        });
-      });
-    }, 200);
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount += 1;
-
-  if (offline) {
-    conn.destroy();
-  } else {
-    conn.handshake();
-  }
-});
diff --git a/test/unit/pool/test-acquire-after-end.js b/test/unit/pool/test-acquire-after-end.js
deleted file mode 100644
index ea63bb3..0000000
--- a/test/unit/pool/test-acquire-after-end.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-
-    connection.release();
-    pool.end(function (err) {
-      assert.ifError(err);
-      pool.getConnection(function (err, connection) {
-        assert.ok(err);
-        assert.equal(err.code, 'POOL_CLOSED');
-        assert.equal(err.message, 'Pool is closed.');
-        assert.ok(!connection);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool/test-acquire-event.js b/test/unit/pool/test-acquire-event.js
deleted file mode 100644
index ee6c231..0000000
--- a/test/unit/pool/test-acquire-event.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count    = 0;
-  var threadId = -1;
-  pool.on('acquire', function (connection) {
-    count++;
-    threadId = connection.threadId;
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(count, 1);
-    assert.equal(threadId, connection.threadId);
-    connection.release();
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(count, 2);
-    assert.equal(threadId, connection.threadId);
-    connection.release();
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-acquire-timeout-existing.js b/test/unit/pool/test-acquire-timeout-existing.js
deleted file mode 100644
index aa0f743..0000000
--- a/test/unit/pool/test-acquire-timeout-existing.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  acquireTimeout  : 200,
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-var server  = common.createFakeServer();
-
-var fail = false;
-var seq  = 0;
-var tid  = 0;
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, conn) {
-    assert.ifError(err);
-    assert.equal(conn.threadId, 1);
-    conn.release();
-
-    // lag the next ping
-    fail = true;
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 1);
-      assert.equal(conn.threadId, 2);
-      assert.equal(fail, false);
-      conn.ping(function(err){
-        assert.ifError(err);
-        conn.release();
-      });
-    });
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 2);
-      assert.equal(conn.threadId, 2);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    threadId: ++tid
-  });
-  incomingConnection.on('ping', function() {
-    if (!fail) {
-      this.ok();
-    }
-
-    fail = false;
-  });
-});
diff --git a/test/unit/pool/test-acquire-timeout-new.js b/test/unit/pool/test-acquire-timeout-new.js
deleted file mode 100644
index 31edc81..0000000
--- a/test/unit/pool/test-acquire-timeout-new.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  acquireTimeout  : 100,
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-var server  = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'PROTOCOL_SEQUENCE_TIMEOUT');
-    assert.equal(err.fatal, true);
-    assert.equal(err.message, 'Handshake inactivity timeout');
-    server.destroy();
-  });
-});
-
-server.on('connection', function () {
-  // timeout handshake
-});
diff --git a/test/unit/pool/test-change-user-config.js b/test/unit/pool/test-change-user-config.js
deleted file mode 100644
index 47086a1..0000000
--- a/test/unit/pool/test-change-user-config.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  user : 'user_1',
-  port : common.fakeServerPort
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  assert.strictEqual(pool.config.connectionConfig.user, 'user_1');
-
-  pool.getConnection(function(err, conn) {
-    assert.ifError(err);
-    assert.strictEqual(conn.config.user, 'user_1');
-
-    conn.changeUser({user: 'user_2'}, function(err) {
-      assert.ifError(err);
-      assert.strictEqual(conn.config.user, 'user_2');
-      assert.strictEqual(pool.config.connectionConfig.user, 'user_1');
-
-      conn.destroy();
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-change-user-restore.js b/test/unit/pool/test-change-user-restore.js
deleted file mode 100644
index 6f6629f..0000000
--- a/test/unit/pool/test-change-user-restore.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 2,
-  user            : 'user_1',
-  port            : common.fakeServerPort
-});
-
-var closed = 0;
-var server = common.createFakeServer();
-var thread = 0;
-
-server.listen(common.fakeServerPort, function(err) {
-  assert.ifError(err);
-
-  pool.getConnection(function(err, conn0) {
-    assert.ifError(err);
-    assert.ok(conn0.threadId === 1 || conn0.threadId === 2);
-
-    pool.getConnection(function(err, conn1) {
-      assert.ifError(err);
-      assert.ok(conn1.threadId === 1 || conn1.threadId === 2);
-
-      var threadId = conn1.threadId;
-
-      conn1.changeUser({user: 'user_2'}, function(err) {
-        assert.ifError(err);
-        assert.strictEqual(conn1.threadId, threadId);
-
-        conn1.query('SELECT CURRENT_USER()', function (err, rows) {
-          assert.ifError(err);
-          assert.strictEqual(rows.length, 1);
-          assert.strictEqual(rows[0]['CURRENT_USER()'], 'user_2@localhost');
-          conn1.release();
-        });
-      });
-
-      pool.getConnection(function(err, conn2) {
-        assert.ifError(err);
-        assert.strictEqual(conn2.threadId, threadId);
-
-        conn2.query('SELECT CURRENT_USER()', function (err, rows) {
-          assert.ifError(err);
-          assert.strictEqual(rows.length, 1);
-          assert.strictEqual(rows[0]['CURRENT_USER()'], 'user_1@localhost');
-
-          pool.getConnection(function(err, conn3) {
-            assert.ifError(err);
-            assert.ok(conn3.threadId === 1 || conn3.threadId === 2);
-            conn2.release();
-            conn3.release();
-
-            pool.end(function(err) {
-              assert.ifError(err);
-              assert.strictEqual(closed, 2);
-              server.destroy();
-            });
-          });
-
-          conn0.release();
-        });
-      });
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    threadId: ++thread
-  });
-  incomingConnection.on('quit', function() {
-    closed++;
-    incomingConnection._socket.end();
-  });
-});
diff --git a/test/unit/pool/test-connection-bad.js b/test/unit/pool/test-connection-bad.js
deleted file mode 100644
index c96f51f..0000000
--- a/test/unit/pool/test-connection-bad.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-var server  = common.createFakeServer();
-
-var fail = false;
-var seq  = 0;
-var tid  = 0;
-
-server.listen(common.fakeServerPort, function(err){
-  assert.ifError(err);
-
-  pool.getConnection(function(err, conn){
-    assert.ifError(err);
-    assert.equal(conn.threadId, 1);
-    conn.release();
-
-    // fail the next ping
-    fail = true;
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 1);
-      assert.equal(conn.threadId, 2);
-      assert.equal(fail, false);
-      conn.ping(function(err){
-        assert.ifError(err);
-        conn.release();
-      });
-    });
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 2);
-      assert.equal(conn.threadId, 2);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  incomingConnection.handshake({
-    threadId: ++tid
-  });
-  incomingConnection.on('ping', function() {
-    if (fail) {
-      setTimeout(this.destroy.bind(this), 100);
-    } else {
-      this.ok();
-    }
-
-    fail = false;
-  });
-});
diff --git a/test/unit/pool/test-connection-destroy.js b/test/unit/pool/test-connection-destroy.js
deleted file mode 100644
index 5a5e1d2..0000000
--- a/test/unit/pool/test-connection-destroy.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.notEqual(connection.state, 'disconnected');
-
-    connection.on('enqueue', function () {
-      throw new Error('Unexpected sequence enqueued after connection destroy');
-    });
-
-    connection.destroy();
-    assert.equal(connection.state, 'disconnected');
-
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-domain.js b/test/unit/pool/test-connection-domain.js
deleted file mode 100644
index f1ec28e..0000000
--- a/test/unit/pool/test-connection-domain.js
+++ /dev/null
@@ -1,58 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-var d1 = domain.create();
-
-var server = common.createFakeServer();
-
-var pool = null;
-var done = after(2, function () {
-  pool.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var released = false;
-  var timer    = setInterval(function () {
-    if (!released) return;
-    clearInterval(timer);
-
-    assert.ok(!domain.active, 'no current domain');
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      assert.equal(domain.active, d0, 'current domain is d0');
-      assert.equal(conn.domain, d0, 'connection domain is d0');
-      conn.release();
-      done();
-    });
-  }, 200);
-
-  d0.run(function () {
-    pool = common.createPool({port: common.fakeServerPort, connectionLimit: 1});
-    assert.equal(pool.domain, d0, 'pool belongs to d0');
-
-    d1.run(function () {
-      pool.getConnection(function (err, conn) {
-        assert.ifError(err);
-        assert.equal(domain.active, d1, 'current domain is d1');
-        assert.equal(conn.domain, d0, 'connection domain is d0');
-        conn.release();
-        released = true;
-        done();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-event.js b/test/unit/pool/test-connection-event.js
deleted file mode 100644
index dc6703e..0000000
--- a/test/unit/pool/test-connection-event.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-
-  pool.on('connection', function (connection) {
-    assert.ok(connection);
-    done();
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    connection.release();
-    done();
-  });
-});
diff --git a/test/unit/pool/test-connection-fatal-end.js b/test/unit/pool/test-connection-fatal-end.js
deleted file mode 100644
index 39d01f0..0000000
--- a/test/unit/pool/test-connection-fatal-end.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.bogusPort
-});
-
-pool.getConnection(function (err) {
-  assert.ok(err);
-  assert.ok(err.fatal);
-  assert.equal(err.code, 'ECONNREFUSED');
-
-  pool.end(function (err) {
-    assert.ifError(err);
-  });
-});
diff --git a/test/unit/pool/test-connection-limit-no-wait.js b/test/unit/pool/test-connection-limit-no-wait.js
deleted file mode 100644
index 6245904..0000000
--- a/test/unit/pool/test-connection-limit-no-wait.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit    : 1,
-  port               : common.fakeServerPort,
-  waitForConnections : false
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err){
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-
-    pool.getConnection(function (err) {
-      assert.ok(err);
-      assert.equal(err.message, 'No connections available.');
-      assert.equal(err.code, 'POOL_CONNLIMIT');
-
-      connection.destroy();
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-limit.js b/test/unit/pool/test-connection-limit.js
deleted file mode 100644
index 9f0d928..0000000
--- a/test/unit/pool/test-connection-limit.js
+++ /dev/null
@@ -1,32 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-
-var index  = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(++index, 1);
-
-    pool.getConnection(function (err) {
-      assert.ifError(err);
-      assert.equal(++index, 3);
-
-      connection.destroy();
-      server.destroy();
-    });
-
-    process.nextTick(function () {
-      assert.equal(++index, 2);
-      connection.release();
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-no-domain.js b/test/unit/pool/test-connection-no-domain.js
deleted file mode 100644
index 1c3f8a3..0000000
--- a/test/unit/pool/test-connection-no-domain.js
+++ /dev/null
@@ -1,55 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-
-var server = common.createFakeServer();
-
-var pool = null;
-var done = after(2, function () {
-  pool.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var released = false;
-  var timer    = setInterval(function () {
-    if (!released) return;
-    clearInterval(timer);
-
-    assert.ok(!domain.active, 'no current domain');
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      assert.ok(!domain.active, 'no current domain');
-      assert.equal(conn.domain, null, 'connection is not bound to domain');
-      conn.release();
-      done();
-    });
-  }, 200);
-
-  pool = common.createPool({port: common.fakeServerPort, connectionLimit: 1});
-  assert.equal(pool.domain, null, 'pool is not bound to domain');
-
-  d0.run(function () {
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      assert.equal(domain.active, d0, 'current domain is d0');
-      assert.equal(conn.domain, null, 'connection is not bound to domain');
-      conn.release();
-      released = true;
-      done();
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-release-after-error.js b/test/unit/pool/test-connection-release-after-error.js
deleted file mode 100644
index ee7c170..0000000
--- a/test/unit/pool/test-connection-release-after-error.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-process.on('uncaughtException', function (err) {
-  if (err.code !== 'ER_PARSE_ERROR') throw err;
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, conn) {
-    assert.ifError(err);
-
-    var query = conn.query('SELECT INVALID');
-
-    query.on('end', function () {
-      conn.release();
-      pool.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool/test-connection-reset.js b/test/unit/pool/test-connection-reset.js
deleted file mode 100644
index 5e9a4c2..0000000
--- a/test/unit/pool/test-connection-reset.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-var server = common.createFakeServer();
-
-var seq        = 0;
-var serverConn = null;
-var tid        = 0;
-
-server.listen(common.fakeServerPort, function(err){
-  assert.ifError(err);
-
-  pool.getConnection(function(err, conn){
-    assert.ifError(err);
-    assert.equal(conn.threadId, 1);
-    conn.release();
-
-    // server destroys connection in pool
-    // read ECONNRESET
-    serverConn.destroy();
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 1);
-      assert.equal(conn.threadId, 2);
-      conn.ping(function(err){
-        assert.ifError(err);
-        conn.release();
-      });
-    });
-
-    pool.getConnection(function(err, conn){
-      assert.ifError(err);
-      assert.equal(++seq, 2);
-      assert.equal(conn.threadId, 2);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(incomingConnection) {
-  serverConn = incomingConnection;
-  incomingConnection.handshake({
-    threadId: ++tid
-  });
-});
diff --git a/test/unit/pool/test-custom-type-cast.js b/test/unit/pool/test-custom-type-cast.js
deleted file mode 100644
index 4b4bd08..0000000
--- a/test/unit/pool/test-custom-type-cast.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  port     : common.fakeServerPort,
-  typeCast : typeCast
-});
-var server = common.createFakeServer();
-
-function typeCast(field, next) {
-  if (field.type !== 'TINY') {
-    return next();
-  }
-
-  var val = field.string();
-
-  if (val === null) {
-    return null;
-  }
-
-  return (Number(val) > 0);
-}
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.query('SELECT value FROM typecast', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 3);
-    assert.strictEqual(rows[0].value, false);
-    assert.strictEqual(rows[1].value, true);
-    assert.strictEqual(rows[2].value, null);
-
-    pool.end(function(err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM typecast':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.TINY
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('0');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('1');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString(null);
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handleQueryPacket(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/pool/test-debug.js b/test/unit/pool/test-debug.js
deleted file mode 100644
index e9953cd..0000000
--- a/test/unit/pool/test-debug.js
+++ /dev/null
@@ -1,67 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({debug: true, port: common.fakeServerPort});
-var util   = require('util');
-
-var tid    = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var messages = [];
-
-  console.log = function () {
-    var msg = util.format.apply(this, arguments);
-    if (String(msg).indexOf('--') !== -1) {
-      messages.push(msg.split(' {')[0]);
-    }
-  };
-
-  pool.getConnection(function (err, conn1) {
-    assert.ifError(err);
-    conn1.query('SELECT 1', function (err) {
-      assert.ifError(err);
-      pool.getConnection(function (err, conn2) {
-        assert.ifError(err);
-        conn2.query('SELECT 1', function (err) {
-          assert.ifError(err);
-          conn1.release();
-          conn2.release();
-          pool.end(function (err) {
-            assert.ifError(err);
-            assert.equal(messages.length, 20);
-            assert.deepEqual(messages, [
-              '<-- HandshakeInitializationPacket',
-              '--> (1) ClientAuthenticationPacket',
-              '<-- (1) OkPacket',
-              '--> (1) ComQueryPacket',
-              '<-- (1) ResultSetHeaderPacket',
-              '<-- (1) FieldPacket',
-              '<-- (1) EofPacket',
-              '<-- (1) RowDataPacket',
-              '<-- (1) EofPacket',
-              '<-- HandshakeInitializationPacket',
-              '--> (2) ClientAuthenticationPacket',
-              '<-- (2) OkPacket',
-              '--> (2) ComQueryPacket',
-              '<-- (2) ResultSetHeaderPacket',
-              '<-- (2) FieldPacket',
-              '<-- (2) EofPacket',
-              '<-- (2) RowDataPacket',
-              '<-- (2) EofPacket',
-              '--> (1) ComQuitPacket',
-              '--> (2) ComQuitPacket'
-            ]);
-
-            server.destroy();
-          });
-        });
-      });
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake({ threadId: ++tid });
-});
diff --git a/test/unit/pool/test-destroy-connection.js b/test/unit/pool/test-destroy-connection.js
deleted file mode 100644
index 478a70f..0000000
--- a/test/unit/pool/test-destroy-connection.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-
-    assert.strictEqual(connection, pool._allConnections[0]);
-    connection.destroy();
-
-    assert.strictEqual(pool._allConnections.length, 0);
-    assert.ok(!connection._pool);
-
-    assert.doesNotThrow(function () { connection.release(); });
-
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-domain-implicit.js b/test/unit/pool/test-domain-implicit.js
deleted file mode 100644
index befaa35..0000000
--- a/test/unit/pool/test-domain-implicit.js
+++ /dev/null
@@ -1,54 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  d0.run(function () {
-    var members = d0.members.slice(0);
-    var conn    = common.createConnection({port: common.fakeServerPort});
-
-    assert.equal(conn.domain, d0, 'connection is bound to domain d0');
-    assert.equal(d0.members.indexOf(conn), -1, 'connection is not an explicit member of domain d0');
-    assert.deepEqual(d0.members, members, 'no members added to domain d0');
-
-    conn.query('SELECT 1', function (err) {
-      assert.ifError(err);
-      assert.deepEqual(d0.members, members, 'no members added to domain d0');
-      conn.destroy();
-      server.destroy();
-    });
-
-    var members = d0.members.slice(0);
-    var pool    = common.createPool({port: common.fakeServerPort});
-
-    assert.equal(pool.domain, d0, 'pool is bound to domain d0');
-    assert.equal(d0.members.indexOf(pool), -1, 'pool is not an explicit member of domain d0');
-    assert.deepEqual(d0.members, members, 'no members added to domain d0');
-
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-
-      assert.equal(conn.domain, d0, 'connection is bound to domain d0');
-      assert.equal(d0.members.indexOf(conn), -1, 'connection is not an explicit member of domain d0');
-      assert.deepEqual(d0.members, members, 'no members added to domain d0');
-
-      conn.release();
-      pool.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
diff --git a/test/unit/pool/test-domains.js b/test/unit/pool/test-domains.js
deleted file mode 100644
index 7dd6c91..0000000
--- a/test/unit/pool/test-domains.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var domain = null;
-
-try {
-  domain = require('domain');
-} catch (e) {
-  common.skipTest('node ' + process.version + ' does not support domains');
-}
-
-var d0 = domain.create();
-var d1 = domain.create();
-var d2 = domain.create();
-var d3 = domain.create();
-
-var pool;
-var server = common.createFakeServer();
-
-var done = after(4, function () {
-  pool.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  d0.run(function () {
-    pool = common.createPool({connectionLimit: 1, port: common.fakeServerPort});
-
-    d1.run(function () {
-      pool.getConnection(function (err, connection) {
-        assert.ifError(err);
-
-        d2.run(function () {
-          pool.query('SELECT 2', function (err) {
-            assert.ifError(err);
-            throw new Error('inside domain 2');
-          });
-        });
-
-        connection.release();
-        throw new Error('inside domain 1');
-      });
-    });
-
-    d3.run(function () {
-      pool.getConnection(function (err, connection) {
-        assert.ifError(err);
-        connection.release();
-        throw new Error('inside domain 3');
-      });
-    });
-
-    setTimeout(function() {
-      throw new Error('inside domain 0');
-    }, 100);
-
-    d2.on('error', function (err) {
-      assert.equal(err.toString(), 'Error: inside domain 2');
-      done();
-    });
-    d3.on('error', function (err) {
-      assert.equal(err.toString(), 'Error: inside domain 3');
-      done();
-    });
-  });
-});
-
-d0.on('error', function (err) {
-  assert.equal(err.toString(), 'Error: inside domain 0');
-  done();
-});
-
-d1.on('error', function (err) {
-  assert.equal(err.toString(), 'Error: inside domain 1');
-  done();
-});
diff --git a/test/unit/pool/test-double-release.js b/test/unit/pool/test-double-release.js
deleted file mode 100644
index c756fb1..0000000
--- a/test/unit/pool/test-double-release.js
+++ /dev/null
@@ -1,25 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err){
-  assert.ifError(err);
-
-  pool.getConnection(function(err, conn){
-    assert.ifError(err);
-    conn.release();
-
-    try {
-      conn.release();
-    } catch (e) {
-      err = e;
-    }
-
-    assert.ok(err);
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-end-empty.js b/test/unit/pool/test-end-empty.js
deleted file mode 100644
index f1bf7e8..0000000
--- a/test/unit/pool/test-end-empty.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-end-ping.js b/test/unit/pool/test-end-ping.js
deleted file mode 100644
index eb27edc..0000000
--- a/test/unit/pool/test-end-ping.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var common = require('../../common');
-var assert = require('assert');
-var pool   = common.createPool({
-  connectionLimit    : 1,
-  port               : common.fakeServerPort,
-  queueLimit         : 5,
-  waitForConnections : true
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, conn) {
-    assert.ifError(err);
-    conn.release();
-
-    pool.getConnection(function (err) {
-      assert.ok(err);
-      assert.equal(err.message, 'Pool is closed.');
-      assert.equal(err.code, 'POOL_CLOSED');
-    });
-
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.handshake();
-  conn.on('ping', function () {
-    setTimeout(function () {
-      conn.ok();
-    }, 100);
-  });
-});
diff --git a/test/unit/pool/test-end-queued.js b/test/unit/pool/test-end-queued.js
deleted file mode 100644
index 263c2fa..0000000
--- a/test/unit/pool/test-end-queued.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var common = require('../../common');
-var assert = require('assert');
-var pool   = common.createPool({
-  connectionLimit    : 1,
-  port               : common.fakeServerPort,
-  queueLimit         : 5,
-  waitForConnections : true
-});
-
-var conn1Err  = null;
-var conn2Err  = null;
-var poolEnded = false;
-var server    = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  pool.getConnection(function(err, conn){
-    if (err) throw err;
-
-    pool.end(function(err) {
-      poolEnded = true;
-      server.destroy();
-      if (err) throw err;
-    });
-
-    conn.release();
-  });
-
-  pool.getConnection(function (err) {
-    conn1Err = err;
-  });
-
-  pool.getConnection(function (err) {
-    conn2Err = err;
-  });
-});
-
-process.on('exit', function() {
-  assert.ok(poolEnded);
-  assert.ok(conn1Err);
-  assert.ok(conn2Err);
-  assert.equal(conn1Err.message, 'Pool is closed.');
-  assert.equal(conn2Err.code, 'POOL_CLOSED');
-  assert.equal(conn1Err.message, 'Pool is closed.');
-  assert.equal(conn2Err.code, 'POOL_CLOSED');
-});
diff --git a/test/unit/pool/test-enqueue-event.js b/test/unit/pool/test-enqueue-event.js
deleted file mode 100644
index 3894015..0000000
--- a/test/unit/pool/test-enqueue-event.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-
-var index  = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count = 0;
-  pool.on('enqueue', function () {
-    count++;
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(++index, 1);
-    assert.equal(count, 0);
-
-    pool.getConnection(function (err) {
-      assert.ifError(err);
-      assert.equal(++index, 2);
-      assert.equal(count, 2);
-
-      connection.release();
-    });
-
-    pool.getConnection(function (err) {
-      assert.ifError(err);
-      assert.equal(++index, 3);
-      assert.equal(count, 2);
-
-      connection.destroy();
-      server.destroy();
-    });
-
-    process.nextTick(function () {
-      assert.equal(count, 2);
-      connection.release();
-    });
-  });
-});
diff --git a/test/unit/pool/test-escape-id.js b/test/unit/pool/test-escape-id.js
deleted file mode 100644
index f652761..0000000
--- a/test/unit/pool/test-escape-id.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  assert.equal(pool.escapeId('id'), '`id`');
-
-  pool.end(function (err) {
-    assert.ifError(err);
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-escape.js b/test/unit/pool/test-escape.js
deleted file mode 100644
index d3dfade..0000000
--- a/test/unit/pool/test-escape.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var pool2  = common.createPool({port: common.fakeServerPort, stringifyObjects: true});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  assert.equal(pool.escape('Super'), "'Super'");
-  assert.equal(pool.escape({ a: 123 }), '`a` = 123');
-
-  assert.equal(pool2.escape('Super'), "'Super'");
-  assert.equal(pool2.escape({ a: 123 }), "'[object Object]'");
-
-  pool.end(function (err) {
-    assert.ifError(err);
-    pool2.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-get-connection.js b/test/unit/pool/test-get-connection.js
deleted file mode 100644
index 2dfd39b..0000000
--- a/test/unit/pool/test-get-connection.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var common     = require('../../common');
-var assert     = require('assert');
-var Connection = common.Connection;
-var pool       = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection instanceof Connection);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-long-stack-traces.js b/test/unit/pool/test-long-stack-traces.js
deleted file mode 100644
index ae11b41..0000000
--- a/test/unit/pool/test-long-stack-traces.js
+++ /dev/null
@@ -1,27 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({connectionLimit: 1, port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, conn) {
-    assert.ifError(err);
-
-    pool.query('invalid sql', function (err) {
-      assert.ok(err, 'got error');
-      assert.ok(err.stack.indexOf(__filename) > 0);
-
-      pool.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-
-    process.nextTick(function() {
-      conn.release();
-    });
-  });
-});
diff --git a/test/unit/pool/test-pool-connection.js b/test/unit/pool/test-pool-connection.js
deleted file mode 100644
index 9583c09..0000000
--- a/test/unit/pool/test-pool-connection.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var assert         = require('assert');
-var common         = require('../../common');
-var Connection     = common.Connection;
-var EventEmitter   = require('events').EventEmitter;
-var pool           = common.createPool({port: common.fakeServerPort});
-var PoolConnection = common.PoolConnection;
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-
-    assert(connection instanceof PoolConnection);
-    assert(connection instanceof Connection);
-    assert(connection instanceof EventEmitter);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/pool/test-protocol-stray-packet.js b/test/unit/pool/test-protocol-stray-packet.js
deleted file mode 100644
index c87e315..0000000
--- a/test/unit/pool/test-protocol-stray-packet.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var pool       = common.createPool({port: common.fakeServerPort});
-var server     = common.createFakeServer();
-
-var connCount  = 0;
-var connection = null;
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.on('error', function (err) {
-    assert.equal(err.code, 'PROTOCOL_STRAY_PACKET');
-    assert.equal(err.fatal, true);
-    connection.destroy();
-    server.destroy();
-  });
-
-  pool.query('SELECT 1', function (err) {
-    assert.ifError(err);
-
-    pool.getConnection(function (err, conn) {
-      assert.ifError(err);
-      assert.equal(connCount, 2);
-
-      connection = conn;
-
-      pool.end(function (err) {
-        assert.ifError(err);
-        server.destroy();
-      });
-    });
-  });
-});
-
-server.on('connection', function (conn) {
-  connCount++;
-  conn.handshake();
-  conn.on('query', function(packet) {
-    var resetPacketNumber = this._parser.resetPacketNumber;
-
-    // Prevent packet number from being reset
-    this._parser.resetPacketNumber = function () {};
-    this._handleQueryPacket(packet);
-
-    this._parser.resetPacketNumber = resetPacketNumber;
-    this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-      fieldCount: 1
-    }));
-    this._parser.resetPacketNumber();
-  });
-});
diff --git a/test/unit/pool/test-query-connection-error.js b/test/unit/pool/test-query-connection-error.js
deleted file mode 100644
index d1c8f7c..0000000
--- a/test/unit/pool/test-query-connection-error.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.query('SELECT 1', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.equal(err.fatal, true);
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.deny();
-});
diff --git a/test/unit/pool/test-query-end-after-error.js b/test/unit/pool/test-query-end-after-error.js
deleted file mode 100644
index 08f44dc..0000000
--- a/test/unit/pool/test-query-end-after-error.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-process.on('uncaughtException', function (err) {
-  if (err.code !== 'ER_PARSE_ERROR') throw err;
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var query = pool.query('SELECT INVALID');
-
-  query.on('end', function () {
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-query-error.js b/test/unit/pool/test-query-error.js
deleted file mode 100644
index abf202a..0000000
--- a/test/unit/pool/test-query-error.js
+++ /dev/null
@@ -1,31 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit    : 1,
-  port               : common.fakeServerPort,
-  waitForConnections : false
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.getConnection(function (err, conn) {
-    assert.ifError(err);
-
-    conn.query('SELECT INVALID');
-    conn.on('error', function () {
-      pool.getConnection(function (err) {
-        assert.ok(err);
-        assert.equal(err.message, 'No connections available.');
-
-        conn.release();
-        pool.end(function (err) {
-          assert.ifError(err);
-          server.destroy();
-        });
-      });
-    });
-  });
-});
diff --git a/test/unit/pool/test-query-events.js b/test/unit/pool/test-query-events.js
deleted file mode 100644
index 63b6fd0..0000000
--- a/test/unit/pool/test-query-events.js
+++ /dev/null
@@ -1,65 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function(err) {
-  if (err) throw err;
-
-  var query   = pool.query('SELECT value FROM stuff');
-  var results = [];
-
-  assert.ok(query);
-
-  query.on('end', function() {
-    assert.equal(results.length, 2);
-    assert.equal(results[0].value, 'one');
-    assert.equal(results[1].value, 'two');
-
-    pool.end(function(err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-  query.on('error', assert.ifError);
-  query.on('result', function(row) {
-    results.push(row);
-  });
-});
-
-server.on('connection', function(conn) {
-  conn.handshake();
-  conn.on('query', function(packet) {
-    switch (packet.sql) {
-      case 'SELECT value FROM stuff':
-        this._sendPacket(new common.Packets.ResultSetHeaderPacket({
-          fieldCount: 1
-        }));
-
-        this._sendPacket(new common.Packets.FieldPacket({
-          catalog    : 'def',
-          charsetNr  : common.Charsets.UTF8_GENERAL_CI,
-          name       : 'value',
-          protocol41 : true,
-          type       : common.Types.VARCHAR
-        }));
-
-        this._sendPacket(new common.Packets.EofPacket());
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('one');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        var writer = new common.PacketWriter();
-        writer.writeLengthCodedString('two');
-        this._socket.write(writer.toBuffer(this._parser));
-
-        this._sendPacket(new common.Packets.EofPacket());
-        this._parser.resetPacketNumber();
-        break;
-      default:
-        this._handlePacketQuery(packet);
-        break;
-    }
-  });
-});
diff --git a/test/unit/pool/test-query-stream-connection-error.js b/test/unit/pool/test-query-stream-connection-error.js
deleted file mode 100644
index bb57e43..0000000
--- a/test/unit/pool/test-query-stream-connection-error.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var query = pool.query('SELECT 1');
-
-  query.on('error', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_ACCESS_DENIED_ERROR');
-    assert.equal(err.fatal, true);
-    server.destroy();
-  });
-});
-
-server.on('connection', function (conn) {
-  conn.deny();
-});
diff --git a/test/unit/pool/test-query-streaming-rows.js b/test/unit/pool/test-query-streaming-rows.js
deleted file mode 100644
index 243c0b3..0000000
--- a/test/unit/pool/test-query-streaming-rows.js
+++ /dev/null
@@ -1,50 +0,0 @@
-var after  = require('after');
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-
-    var count  = 0;
-    var paused = false;
-    var query  = connection.query('SELECT * FROM stream LIMIT 5');
-
-    query.on('fields', function (fields) {
-      assert.ok(fields, 'got fields');
-      done();
-    });
-
-    query.on('result', function (row) {
-      count++;
-
-      assert.equal(paused, false);
-      assert.equal(row.id, count);
-
-      paused = true;
-      connection.pause();
-
-      setTimeout(function () {
-        paused = false;
-        connection.resume();
-      }, 50);
-    });
-
-    query.on('end', function () {
-      connection.release();
-      done();
-    });
-  });
-});
diff --git a/test/unit/pool/test-query.js b/test/unit/pool/test-query.js
deleted file mode 100644
index 9af8f0c..0000000
--- a/test/unit/pool/test-query.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({port: common.fakeServerPort});
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  pool.query('SELECT 1', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-    assert.equal(rows[0]['1'], 1);
-
-    // Should work without error
-    pool.query('SELECT SQL_ERROR');
-
-    pool.end(function(err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/pool/test-queue-limit.js b/test/unit/pool/test-queue-limit.js
deleted file mode 100644
index 145e032..0000000
--- a/test/unit/pool/test-queue-limit.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit    : 1,
-  port               : common.fakeServerPort,
-  queueLimit         : 1,
-  waitForConnections : true
-});
-
-var index  = 0;
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var error = null;
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.equal(++index, 1);
-    connection.release();
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.equal(++index, 2);
-    connection.release();
-
-    pool.end(function (err) {
-      assert.ifError(err);
-      assert.ok(error);
-      assert.equal(error.message, 'Queue limit reached.');
-      assert.equal(error.code, 'POOL_ENQUEUELIMIT');
-      server.destroy();
-    });
-  });
-
-  pool.getConnection(function (err) {
-    error = err;
-  });
-});
diff --git a/test/unit/pool/test-release-event.js b/test/unit/pool/test-release-event.js
deleted file mode 100644
index 3d175ef..0000000
--- a/test/unit/pool/test-release-event.js
+++ /dev/null
@@ -1,41 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-var pool   = common.createPool({
-  connectionLimit : 1,
-  port            : common.fakeServerPort
-});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count    = 0;
-  var threadId = -1;
-  pool.on('release', function (connection) {
-    count++;
-    threadId = connection.threadId;
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(count, 0);
-    connection.release();
-    assert.equal(count, 1);
-    assert.equal(threadId, connection.threadId);
-  });
-
-  pool.getConnection(function (err, connection) {
-    assert.ifError(err);
-    assert.ok(connection);
-    assert.equal(count, 1);
-    connection.release();
-    assert.equal(count, 2);
-    assert.equal(threadId, connection.threadId);
-    pool.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/protocol/test-Parser.js b/test/unit/protocol/test-Parser.js
deleted file mode 100644
index 112aebe..0000000
--- a/test/unit/protocol/test-Parser.js
+++ /dev/null
@@ -1,147 +0,0 @@
-var Buffer = require('safe-buffer').Buffer;
-var common = require('../../common');
-var test   = require('utest');
-var assert = require('assert');
-var Parser = common.Parser;
-
-function packet(bytes) {
-  var buffer = Buffer.from(bytes);
-  var parser = new Parser();
-
-  parser.append(buffer);
-
-  return parser;
-}
-
-test('Parser', {
-  "parseBuffer: buffer won\'t change after appending another one": function() {
-    var startBuffer = Buffer.alloc(5, 'a');
-    var parser      = new Parser();
-
-    parser.append(startBuffer);
-
-    var value = parser.parseBuffer(4);
-
-    assert.equal(value.toString(), 'aaaa');
-
-    parser.append(Buffer.from('b'));
-
-    assert.equal(value.toString(), 'aaaa');
-  },
-
-  'parseUnsignedNumber: 1 byte': function() {
-    var value = packet([5]).parseUnsignedNumber(1);
-    assert.equal(value, 5);
-  },
-
-  'parseUnsignedNumber: 2 bytes': function() {
-    var value = packet([1, 1]).parseUnsignedNumber(2);
-    assert.equal(value, 256 + 1);
-  },
-
-  'parseUnsignedNumber: 3 bytes': function() {
-    var value = packet([1, 1, 1]).parseUnsignedNumber(3);
-    assert.equal(value, 65536 + 256 + 1);
-  },
-
-  'parseUnsignedNumber: 4 bytes': function() {
-    var value = packet([255, 255, 255, 255]).parseUnsignedNumber(4);
-    assert.equal(value, Math.pow(2, 32) - 1);
-  },
-
-  'parseUnsignedNumber: honors offsets': function() {
-    var parser = packet([1, 2]);
-    assert.equal(parser.parseUnsignedNumber(1), 1);
-    assert.equal(parser.parseUnsignedNumber(1), 2);
-  },
-
-  'parseLengthCodedNumber: 1 byte': function() {
-    var parser = packet([250]);
-    assert.strictEqual(parser.parseLengthCodedNumber(), 250);
-  },
-
-  'parseLengthCodedNumber: 251 = null': function() {
-    var parser = packet([251]);
-    assert.strictEqual(parser.parseLengthCodedNumber(), null);
-  },
-
-  'parseLengthCodedNumber: 252 = 16 bit': function() {
-    var parser = packet([252, 2, 1]);
-    var expected =
-      2 * Math.pow(256, 0) +
-      1 * Math.pow(256, 1);
-    assert.strictEqual(parser.parseLengthCodedNumber(), expected);
-  },
-
-  'parseLengthCodedNumber: 253 = 24 bit': function() {
-    var parser = packet([253, 3, 2, 1]);
-    var expected =
-      3 * Math.pow(256, 0) +
-      2 * Math.pow(256, 1) +
-      1 * Math.pow(256, 2);
-
-    assert.strictEqual(parser.parseLengthCodedNumber(), expected);
-  },
-
-  'parseLengthCodedNumber: 254 = 64 bit': function() {
-    var parser = packet([254, 8, 7, 6, 5, 4, 3, 2, 0]);
-    var expected =
-      8 * Math.pow(256, 0) +
-      7 * Math.pow(256, 1) +
-      6 * Math.pow(256, 2) +
-      5 * Math.pow(256, 3) +
-      4 * Math.pow(256, 4) +
-      3 * Math.pow(256, 5) +
-      2 * Math.pow(256, 6) +
-      0 * Math.pow(256, 7);
-
-    assert.strictEqual(parser.parseLengthCodedNumber(), expected);
-  },
-
-  'parseLengthCodedNumber: < 53 bit = no problemo': function() {
-    var parser = packet([254, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00]);
-    assert.strictEqual(parser.parseLengthCodedNumber(), Math.pow(2, 53) - 1);
-  },
-
-  'parseLengthCodedNumber:  53 bit = Error': function() {
-    var parser = packet([254, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00]);
-    assert.throws(function() {
-      parser.parseLengthCodedNumber();
-    }, /precision/i);
-  },
-
-  'parseLengthCodedNumber: 255 = Error': function() {
-    var parser = packet([255]);
-    assert.throws(function() {
-      parser.parseLengthCodedNumber();
-    }, /unexpected/i);
-  },
-
-  'parseLengthCodedNumber:  53 bit BigNumber': function() {
-    var parser = packet([254, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00]);
-    parser._supportBigNumbers = true;
-    assert.strictEqual(parser.parseLengthCodedNumber(), '9007199254740992');
-  },
-
-  'parseLengthCodedNumber:  64 bit BigNumber': function() {
-    var parser = packet([254, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
-    parser._supportBigNumbers = true;
-    assert.strictEqual(parser.parseLengthCodedNumber(), '18446744073709551615');
-  },
-
-  'parsePacketTerminatedString: regular case': function() {
-    var parser = packet([0x48, 0x69]);
-    parser._packetEnd = 2;
-
-    var str = parser.parsePacketTerminatedString();
-    assert.equal(str, 'Hi');
-  },
-
-  'parsePacketTerminatedString: 0x00 terminated': function() {
-    var parser = packet([0x48, 0x69, 0x00]);
-    parser._packetEnd = 2;
-
-    var str = parser.parsePacketTerminatedString();
-    assert.equal(str, 'Hi');
-  }
-});
diff --git a/test/unit/protocol/test-SqlString.js b/test/unit/protocol/test-SqlString.js
deleted file mode 100644
index 63fdb54..0000000
--- a/test/unit/protocol/test-SqlString.js
+++ /dev/null
@@ -1,195 +0,0 @@
-var Buffer    = require('safe-buffer').Buffer;
-var common    = require('../../common');
-var test      = require('utest');
-var assert    = require('assert');
-var SqlString = common.SqlString;
-
-test('SqlString.escapeId', {
-  'value is quoted': function() {
-    assert.equal('`id`', SqlString.escapeId('id'));
-  },
-
-  'value containing escapes is quoted': function() {
-    assert.equal('`i``d`', SqlString.escapeId('i`d'));
-  },
-
-  'value containing separator is quoted': function() {
-    assert.equal('`id1`.`id2`', SqlString.escapeId('id1.id2'));
-  },
-  'value containing separator and escapes is quoted': function() {
-    assert.equal('`id``1`.`i``d2`', SqlString.escapeId('id`1.i`d2'));
-  },
-
-  'arrays are turned into lists': function() {
-    assert.equal(SqlString.escapeId(['a', 'b', 't.c']), '`a`, `b`, `t`.`c`');
-  },
-
-  'nested arrays are flattened': function() {
-    assert.equal(SqlString.escapeId(['a', ['b', ['t.c']]]), '`a`, `b`, `t`.`c`');
-  }
-});
-
-test('SqlString.escape', {
-  'undefined -> NULL': function() {
-    assert.equal(SqlString.escape(undefined), 'NULL');
-  },
-
-  'null -> NULL': function() {
-    assert.equal(SqlString.escape(null), 'NULL');
-  },
-
-  'booleans convert to strings': function() {
-    assert.equal(SqlString.escape(false), 'false');
-    assert.equal(SqlString.escape(true), 'true');
-  },
-
-  'numbers convert to strings': function() {
-    assert.equal(SqlString.escape(5), '5');
-  },
-
-  'objects are turned into key value pairs': function() {
-    assert.equal(SqlString.escape({a: 'b', c: 'd'}), "`a` = 'b', `c` = 'd'");
-  },
-
-  'objects function properties are ignored': function() {
-    assert.equal(SqlString.escape({a: 'b', c: function() {}}), "`a` = 'b'");
-  },
-
-  'nested objects are cast to strings': function() {
-    assert.equal(SqlString.escape({a: {nested: true}}), "`a` = '[object Object]'");
-  },
-
-  'arrays are turned into lists': function() {
-    assert.equal(SqlString.escape([1, 2, 'c']), "1, 2, 'c'");
-  },
-
-  'nested arrays are turned into grouped lists': function() {
-    assert.equal(SqlString.escape([[1, 2, 3], [4, 5, 6], ['a', 'b', {nested: true}]]), "(1, 2, 3), (4, 5, 6), ('a', 'b', '[object Object]')");
-  },
-
-  'nested objects inside arrays are cast to strings': function() {
-    assert.equal(SqlString.escape([1, {nested: true}, 2]), "1, '[object Object]', 2");
-  },
-
-  'strings are quoted': function() {
-    assert.equal(SqlString.escape('Super'), "'Super'");
-  },
-
-  '\0 gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\0er'), "'Sup\\0er'");
-    assert.equal(SqlString.escape('Super\0'), "'Super\\0'");
-  },
-
-  '\b gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ber'), "'Sup\\ber'");
-    assert.equal(SqlString.escape('Super\b'), "'Super\\b'");
-  },
-
-  '\n gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ner'), "'Sup\\ner'");
-    assert.equal(SqlString.escape('Super\n'), "'Super\\n'");
-  },
-
-  '\r gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\rer'), "'Sup\\rer'");
-    assert.equal(SqlString.escape('Super\r'), "'Super\\r'");
-  },
-
-  '\t gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\ter'), "'Sup\\ter'");
-    assert.equal(SqlString.escape('Super\t'), "'Super\\t'");
-  },
-
-  '\\ gets escaped': function() {
-    assert.equal(SqlString.escape('Sup\\er'), "'Sup\\\\er'");
-    assert.equal(SqlString.escape('Super\\'), "'Super\\\\'");
-  },
-
-  '\u001a (ascii 26) gets replaced with \\Z': function() {
-    assert.equal(SqlString.escape('Sup\u001aer'), "'Sup\\Zer'");
-    assert.equal(SqlString.escape('Super\u001a'), "'Super\\Z'");
-  },
-
-  'single quotes get escaped': function() {
-    assert.equal(SqlString.escape('Sup\'er'), "'Sup\\'er'");
-    assert.equal(SqlString.escape('Super\''), "'Super\\''");
-  },
-
-  'double quotes get escaped': function() {
-    assert.equal(SqlString.escape('Sup"er'), "'Sup\\\"er'");
-    assert.equal(SqlString.escape('Super"'), "'Super\\\"'");
-  },
-
-  'dates are converted to YYYY-MM-DD HH:II:SS.sss': function() {
-    var expected = '2012-05-07 11:42:03.002';
-    var date     = new Date(2012, 4, 7, 11, 42, 3, 2);
-    var string   = SqlString.escape(date);
-
-    assert.strictEqual(string, "'" + expected + "'");
-  },
-
-  'buffers are converted to hex': function() {
-    var buffer = Buffer.from([0, 1, 254, 255]);
-    var string = SqlString.escape(buffer);
-
-    assert.strictEqual(string, "X'0001feff'");
-  },
-
-  'NaN -> NaN': function() {
-    assert.equal(SqlString.escape(NaN), 'NaN');
-  },
-
-  'Infinity -> Infinity': function() {
-    assert.equal(SqlString.escape(Infinity), 'Infinity');
-  }
-});
-
-test('SqlString.format', {
-  'question marks are replaced with escaped array values': function() {
-    var sql = SqlString.format('? and ?', ['a', 'b']);
-    assert.equal(sql, "'a' and 'b'");
-  },
-
-  'extra question marks are left untouched': function() {
-    var sql = SqlString.format('? and ?', ['a']);
-    assert.equal(sql, "'a' and ?");
-  },
-
-  'extra arguments are not used': function() {
-    var sql = SqlString.format('? and ?', ['a', 'b', 'c']);
-    assert.equal(sql, "'a' and 'b'");
-  },
-
-  'question marks within values do not cause issues': function() {
-    var sql = SqlString.format('? and ?', ['hello?', 'b']);
-    assert.equal(sql, "'hello?' and 'b'");
-  },
-
-  'undefined is ignored': function () {
-    var sql = SqlString.format('?', undefined, false);
-    assert.equal(sql, '?');
-  },
-
-  'objects is converted to values': function () {
-    var sql = SqlString.format('?', { 'hello': 'world' }, false);
-    assert.equal(sql, "`hello` = 'world'");
-  },
-
-  'objects is not converted to values': function () {
-    var sql = SqlString.format('?', { 'hello': 'world' }, true);
-    assert.equal(sql, "'[object Object]'");
-
-    var sql = SqlString.format('?', { toString: function () { return 'hello'; } }, true);
-    assert.equal(sql, "'hello'");
-  },
-
-  'sql is untouched if no values are provided': function () {
-    var sql = SqlString.format('SELECT ??');
-    assert.equal(sql, 'SELECT ??');
-  },
-
-  'sql is untouched if values are provided but there are no placeholders': function () {
-    var sql = SqlString.format('SELECT COUNT(*) FROM table', ['a', 'b']);
-    assert.equal(sql, 'SELECT COUNT(*) FROM table');
-  }
-});
diff --git a/test/unit/query/test-args-query-bad-callback.js b/test/unit/query/test-args-query-bad-callback.js
deleted file mode 100644
index 5f531fc..0000000
--- a/test/unit/query/test-args-query-bad-callback.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  assert.throws(function () {
-    connection.query('SELECT ?', [1], 'oops');
-  }, /TypeError: argument callback must be a function when provided/);
-
-  assert.throws(function () {
-    connection.query({ sql: 'SELECT ?' }, [1], 'oops');
-  }, /TypeError: argument callback must be a function when provided/);
-
-  connection.destroy();
-  server.destroy();
-});
diff --git a/test/unit/query/test-args-query-like-object-values.js b/test/unit/query/test-args-query-like-object-values.js
deleted file mode 100644
index 28a7368..0000000
--- a/test/unit/query/test-args-query-like-object-values.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-var sqlQuery = Object.create(null, {
-  sql: {
-    enumerable : false,
-    value      : 'SELECT ?',
-    writable   : false
-  },
-  values: {
-    enumerable : false,
-    value      : [42],
-    writable   : false
-  }
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query(sqlQuery, [99], function (err, rows) {
-    assert.ifError(err);
-    assert.strictEqual(rows.length, 1);
-    assert.strictEqual(rows[0]['99'], 99);
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/query/test-args-query-like-object.js b/test/unit/query/test-args-query-like-object.js
deleted file mode 100644
index 9b98025..0000000
--- a/test/unit/query/test-args-query-like-object.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-var sqlQuery = Object.create(null, {
-  sql: {
-    enumerable : false,
-    value      : 'SELECT ?',
-    writable   : false
-  },
-  values: {
-    enumerable : false,
-    value      : [42],
-    writable   : false
-  }
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query(sqlQuery, function (err, rows) {
-    assert.ifError(err);
-    assert.strictEqual(rows.length, 1);
-    assert.strictEqual(rows[0]['42'], 42);
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/query/test-error-event-fatal.js b/test/unit/query/test-error-event-fatal.js
deleted file mode 100644
index 5bc94ed..0000000
--- a/test/unit/query/test-error-event-fatal.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.bogusPort});
-
-var query = connection.query('SELECT 1');
-
-query.on('error', function (err) {
-  assert.ok(err, 'got error');
-  assert.equal(err.code, 'ECONNREFUSED');
-  assert.equal(err.fatal, true);
-});
diff --git a/test/unit/query/test-error-event.js b/test/unit/query/test-error-event.js
deleted file mode 100644
index be0d7da..0000000
--- a/test/unit/query/test-error-event.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var query = connection.query('INVALID SQL');
-
-  query.on('error', function (err) {
-    assert.ok(err, 'got error');
-    assert.equal(err.code, 'ER_PARSE_ERROR');
-    assert.equal(err.sql, 'INVALID SQL');
-    assert.ok(!err.fatal);
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/query/test-query-end-after-error.js b/test/unit/query/test-query-end-after-error.js
deleted file mode 100644
index 2f32c8f..0000000
--- a/test/unit/query/test-query-end-after-error.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-process.on('uncaughtException', function (err) {
-  if (err.code !== 'ER_PARSE_ERROR') throw err;
-});
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var query = connection.query('SELECT INVALID');
-
-  query.on('end', function () {
-    connection.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/query/test-query-events.js b/test/unit/query/test-query-events.js
deleted file mode 100644
index f95371a..0000000
--- a/test/unit/query/test-query-events.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var rows   = [];
-  var fields = [];
-
-  var query = connection.query('SELECT 1');
-
-  query.on('error', assert.ifError);
-  query.on('fields', function (_fields) {
-    fields = _fields;
-  });
-  query.on('result', function (_rows) {
-    rows.push(_rows);
-  });
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    assert.deepEqual(rows, [{1: 1}]);
-    assert.equal(fields.length, 1);
-    assert.equal(fields[0].name, '1');
-    server.destroy();
-  });
-});
diff --git a/test/unit/query/test-result-rows-enumerate.js b/test/unit/query/test-result-rows-enumerate.js
deleted file mode 100644
index d082722..0000000
--- a/test/unit/query/test-result-rows-enumerate.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  connection.query('SELECT CURRENT_USER()', function (err, rows) {
-    assert.ifError(err);
-    assert.equal(rows.length, 1);
-
-    var row = rows[0];
-    var keys = Object.keys(row).sort();
-
-    assert.equal(keys.length, 1);
-    assert.deepEqual(keys, ['CURRENT_USER()']);
-
-    var forin = [];
-    for (var column in row) {
-      forin.push(column);
-    }
-
-    assert.deepEqual(forin, keys);
-
-    connection.destroy();
-    server.destroy();
-  });
-});
diff --git a/test/unit/query/test-stream-before-queue.js b/test/unit/query/test-stream-before-queue.js
deleted file mode 100644
index d8ae875..0000000
--- a/test/unit/query/test-stream-before-queue.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var assert = require('assert');
-var common = require('../../common');
-
-var query  = common.createQuery('SELECT 1');
-var stream = query.stream();
-
-assert.doesNotThrow(function () {
-  // put the stream into flowing mode
-  stream.on('data', function () { });
-});
diff --git a/test/unit/query/test-stream-emits-close-after-end.js b/test/unit/query/test-stream-emits-close-after-end.js
deleted file mode 100644
index f2455e6..0000000
--- a/test/unit/query/test-stream-emits-close-after-end.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(3, function () {
-    server.destroy();
-  });
-
-  var closed = false;
-  var ended  = false;
-  var query  = connection.query('SELECT * FROM stream LIMIT 2');
-  var stream = query.stream();
-
-  stream.once('close', function () {
-    assert.ok(ended);
-    closed = true;
-    done();
-  });
-
-  stream.once('end', function () {
-    assert.ok(!closed);
-    ended = true;
-    done();
-  });
-
-  stream.on('data', function noop() {});
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    done();
-  });
-});
diff --git a/test/unit/query/test-stream-emits-close.js b/test/unit/query/test-stream-emits-close.js
deleted file mode 100644
index fa7815c..0000000
--- a/test/unit/query/test-stream-emits-close.js
+++ /dev/null
@@ -1,26 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    server.destroy();
-  });
-
-  var query  = connection.query('SELECT * FROM stream LIMIT 2');
-  var stream = query.stream();
-
-  stream.once('close', done);
-
-  stream.on('data', function noop() {});
-
-  connection.end(function (err) {
-    assert.ifError(err);
-    done();
-  });
-});
diff --git a/test/unit/query/test-streaming-destroy.js b/test/unit/query/test-streaming-destroy.js
deleted file mode 100644
index 37dd892..0000000
--- a/test/unit/query/test-streaming-destroy.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count = 0;
-  var query = connection.query('SELECT * FROM stream LIMIT 10');
-
-  query.on('result', function () {
-    count++;
-    assert.equal(count, 1);
-    connection.destroy();
-
-    process.nextTick(function () {
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/query/test-streaming-quick-pause-resume.js b/test/unit/query/test-streaming-quick-pause-resume.js
deleted file mode 100644
index b1286d5..0000000
--- a/test/unit/query/test-streaming-quick-pause-resume.js
+++ /dev/null
@@ -1,28 +0,0 @@
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var count = 0;
-  var query = connection.query('SELECT * FROM stream LIMIT 10');
-
-  query.on('result', function (row) {
-    count++;
-    connection.pause();
-    connection.resume();
-    assert.equal(row.id, count);
-    assert.equal(row.title, 'Row #' + count);
-  });
-
-  query.on('end', function () {
-    assert.equal(count, 10);
-    connection.end(function (err) {
-      assert.ifError(err);
-      server.destroy();
-    });
-  });
-});
diff --git a/test/unit/query/test-streaming-rows.js b/test/unit/query/test-streaming-rows.js
deleted file mode 100644
index 178ff9a..0000000
--- a/test/unit/query/test-streaming-rows.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var after      = require('after');
-var assert     = require('assert');
-var common     = require('../../common');
-var connection = common.createConnection({port: common.fakeServerPort});
-
-var server = common.createFakeServer();
-
-server.listen(common.fakeServerPort, function (err) {
-  assert.ifError(err);
-
-  var done = after(2, function () {
-    server.destroy();
-  });
-
-  var count  = 0;
-  var paused = false;
-  var query  = connection.query('SELECT * FROM stream LIMIT 5');
-
-  query.on('fields', function (fields) {
-    assert.ok(fields, 'got fields');
-    done();
-  });
-
-  query.on('result', function (row) {
-    count++;
-
-    assert.equal(paused, false);
-    assert.equal(row.id, count);
-
-    paused = true;
-    connection.pause();
-
-    setTimeout(function () {
-      paused = false;
-      connection.resume();
-    }, 50);
-  });
-
-  query.on('end', function () {
-    connection.destroy();
-    done();
-  });
-});
diff --git a/test/unit/test-ConnectionConfig.js b/test/unit/test-ConnectionConfig.js
deleted file mode 100644
index 67e5734..0000000
--- a/test/unit/test-ConnectionConfig.js
+++ /dev/null
@@ -1,290 +0,0 @@
-var common           = require('../common');
-var Crypto           = require('crypto');
-var test             = require('utest');
-var assert           = require('assert');
-var ConnectionConfig = common.ConnectionConfig;
-
-test('ConnectionConfig#Constructor', {
-  'takes user,pw,host,port,db from url string': function() {
-    var url    = 'mysql://myuser:mypass@myhost:3333/mydb';
-    var config = new ConnectionConfig(url);
-
-    assert.equal(config.host, 'myhost');
-    assert.equal(config.port, 3333);
-    assert.equal(config.user, 'myuser');
-    assert.equal(config.password, 'mypass');
-    assert.equal(config.database, 'mydb');
-  },
-
-  'work with password containing colon': function() {
-    var url    = 'mysql://myuser:my:pass@myhost:3333/mydb';
-    var config = new ConnectionConfig(url);
-
-    assert.equal(config.host, 'myhost');
-    assert.equal(config.port, 3333);
-    assert.equal(config.user, 'myuser');
-    assert.equal(config.password, 'my:pass');
-    assert.equal(config.database, 'mydb');
-  },
-
-  'allows additional options via url query': function() {
-    var url    = 'mysql://myhost/mydb?debug=true&charset=BIG5_CHINESE_CI&timezone=Z';
-    var config = new ConnectionConfig(url);
-
-    assert.equal(config.host, 'myhost');
-    assert.equal(config.port, 3306);
-    assert.equal(config.database, 'mydb');
-    assert.equal(config.debug, true);
-    assert.equal(config.charsetNumber, common.Charsets.BIG5_CHINESE_CI);
-    assert.equal(config.timezone, 'Z');
-  },
-
-  'accepts client flags': function() {
-    var config = new ConnectionConfig({ flags: '-FOUND_ROWS' });
-    assert.equal(config.clientFlags & common.ClientConstants.CLIENT_FOUND_ROWS, 0);
-  },
-
-  'accepts multiple client flags': function() {
-    var config = new ConnectionConfig({ flags: '-FOUND_ROWS,+IGNORE_SPACE' });
-    assert.equal(config.clientFlags & common.ClientConstants.CLIENT_FOUND_ROWS, 0);
-    assert.notEqual(config.clientFlags & common.ClientConstants.CLIENT_IGNORE_SPACE, 0);
-  },
-
-  'ignores unknown client flags': function() {
-    var config1 = new ConnectionConfig({});
-    var config2 = new ConnectionConfig({ flags: '+HAPPY_MYSQL' });
-    assert.equal(config1.clientFlags, config2.clientFlags);
-  },
-
-  'ignores empty client flags': function() {
-    var config = new ConnectionConfig({ flags: ',-FOUND_ROWS,,+IGNORE_SPACE' });
-    assert.equal(config.clientFlags & common.ClientConstants.CLIENT_FOUND_ROWS, 0);
-    assert.notEqual(config.clientFlags & common.ClientConstants.CLIENT_IGNORE_SPACE, 0);
-  },
-
-  'blacklists unsupported client flags': function() {
-    var config = new ConnectionConfig({ flags: '+CONNECT_ATTRS' });
-    assert.equal(config.clientFlags & common.ClientConstants.CLIENT_CONNECT_ATTRS, 0);
-  }
-});
-
-test('ConnectionConfig#Constructor.charset', {
-  'accepts charset name': function() {
-    var config = new ConnectionConfig({
-      charset: 'LATIN1_SWEDISH_CI'
-    });
-
-    assert.equal(config.charsetNumber, common.Charsets.LATIN1_SWEDISH_CI);
-  },
-
-  'accepts case-insensitive charset name': function() {
-    var config = new ConnectionConfig({
-      charset: 'big5_chinese_ci'
-    });
-
-    assert.equal(config.charsetNumber, common.Charsets.BIG5_CHINESE_CI);
-  },
-
-  'accepts short charset name': function() {
-    var config = new ConnectionConfig({
-      charset: 'UTF8MB4'
-    });
-
-    assert.equal(config.charsetNumber, common.Charsets.UTF8MB4_GENERAL_CI);
-  },
-
-  'throws on unknown charset': function() {
-    var config;
-    var error;
-
-    try {
-      config = new ConnectionConfig({
-        charset: 'INVALID_CHARSET'
-      });
-    } catch (err) {
-      error = err;
-    }
-
-    assert.ok(config === undefined);
-    assert.ok(error);
-    assert.equal(error.name, 'TypeError');
-    assert.equal(error.message, 'Unknown charset \'INVALID_CHARSET\'');
-  },
-
-  'all charsets should have short name': function() {
-    var charsets = Object.keys(common.Charsets);
-
-    for (var i = 0; i < charsets.length; i++) {
-      var charset = charsets[i];
-      assert.ok(common.Charsets[charset]);
-      assert.ok(common.Charsets[charset.split('_')[0]]);
-    }
-  }
-});
-
-test('ConnectionConfig#Constructor.connectTimeout', {
-  'defaults to 10 seconds': function() {
-    var config = new ConnectionConfig({});
-
-    assert.equal(config.connectTimeout, (10 * 1000));
-  },
-
-  'undefined uses default': function() {
-    var config = new ConnectionConfig({
-      connectTimeout: undefined
-    });
-
-    assert.equal(config.connectTimeout, (10 * 1000));
-  },
-
-  'can set to null': function() {
-    var config = new ConnectionConfig({
-      connectTimeout: null
-    });
-
-    assert.equal(config.connectTimeout, null);
-  },
-
-  'can set to 0': function() {
-    var config = new ConnectionConfig({
-      connectTimeout: 0
-    });
-
-    assert.equal(config.connectTimeout, 0);
-  },
-
-  'can set to custom value': function() {
-    var config = new ConnectionConfig({
-      connectTimeout: 10000
-    });
-
-    assert.equal(config.connectTimeout, 10000);
-  }
-});
-
-test('ConnectionConfig#Constructor.ssl', {
-  'defaults to false': function() {
-    var config = new ConnectionConfig({});
-
-    assert.equal(config.ssl, false);
-  },
-
-  'string "Amazon RDS" loads valid profile': function() {
-    var config = new ConnectionConfig({
-      ssl: 'Amazon RDS'
-    });
-
-    assert.ok(config.ssl);
-    assert.ok(Array.isArray(config.ssl.ca));
-
-    config.ssl.ca.forEach(function (ca) {
-      assert.equal(typeof ca, 'string', 'ca is a string');
-
-      if (Crypto.createPublicKey) {
-        var key = null;
-
-        assert.doesNotThrow(function () { key = Crypto.createPublicKey(ca); });
-        assert.equal(key.type, 'public');
-      }
-    });
-  },
-
-  'throws on unknown profile name': function() {
-    var config;
-    var error;
-
-    try {
-      config = new ConnectionConfig({
-        ssl: 'invalid profile'
-      });
-    } catch (err) {
-      error = err;
-    }
-
-    assert.ok(config === undefined);
-    assert.ok(error);
-    assert.equal(error.name, 'TypeError');
-    assert.equal(error.message, 'Unknown SSL profile \'invalid profile\'');
-  }
-});
-
-test('ConnectionConfig#Constructor.timezone', {
-  'defaults to "local"': function() {
-    var config = new ConnectionConfig({});
-
-    assert.equal(config.timezone, 'local');
-  },
-
-  'accepts url timezone with encoded +': function() {
-    var config = new ConnectionConfig('mysql://myhost/mydb?timezone=%2b0200');
-    assert.equal(config.timezone, '+0200');
-  },
-
-  'accepts url timezone with literal +': function() {
-    var config = new ConnectionConfig('mysql://myhost/mydb?timezone=+0200');
-    assert.equal(config.timezone, '+0200');
-  }
-});
-
-test('ConnectionConfig#mergeFlags', {
-  'adds flag to empty list': function() {
-    var initial  = '';
-    var flags    = 'LONG_PASSWORD';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_LONG_PASSWORD);
-  },
-
-  'adds flag to list': function() {
-    var initial  = ['LONG_PASSWORD', 'FOUND_ROWS'];
-    var flags    = 'LONG_FLAG';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_LONG_PASSWORD
-      | common.ClientConstants.CLIENT_FOUND_ROWS
-      | common.ClientConstants.CLIENT_LONG_FLAG);
-  },
-
-  'adds unknown flag to list': function() {
-    var initial  = ['LONG_PASSWORD', 'FOUND_ROWS'];
-    var flags    = 'UNDEFINED_CONSTANT';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_LONG_PASSWORD
-      | common.ClientConstants.CLIENT_FOUND_ROWS);
-  },
-
-  'removes flag from empty list': function() {
-    var initial  = '';
-    var flags    = '-LONG_PASSWORD';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, 0x0);
-  },
-
-  'removes existing flag from list': function() {
-    var initial  = ['LONG_PASSWORD', 'FOUND_ROWS'];
-    var flags    = '-LONG_PASSWORD';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_FOUND_ROWS);
-  },
-
-  'removes non-existing flag from list': function() {
-    var initial  = ['LONG_PASSWORD', 'FOUND_ROWS'];
-    var flags    = '-LONG_FLAG';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_LONG_PASSWORD
-      | common.ClientConstants.CLIENT_FOUND_ROWS);
-  },
-
-  'removes unknown flag to list': function() {
-    var initial  = ['LONG_PASSWORD', 'FOUND_ROWS'];
-    var flags    = '-UNDEFINED_CONSTANT';
-    var combined = ConnectionConfig.mergeFlags(initial, flags);
-
-    assert.strictEqual(combined, common.ClientConstants.CLIENT_LONG_PASSWORD
-      | common.ClientConstants.CLIENT_FOUND_ROWS);
-  }
-});
diff --git a/test/unit/test-Mysql.js b/test/unit/test-Mysql.js
deleted file mode 100644
index c12f156..0000000
--- a/test/unit/test-Mysql.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var assert = require('assert');
-var common = require('../common');
-var path   = require('path');
-var test   = require('utest');
-var Mysql  = require(path.resolve(common.lib, '../index'));
-
-test('Mysql.format', {
-  'format SQL with identifiers and values': function() {
-    assert.equal(
-      Mysql.format('SELECT * FROM ?? WHERE ?? = ?', ['table', 'property', 123]),
-      'SELECT * FROM `table` WHERE `property` = 123'
-    );
-  },
-
-  'format SQL with object value': function() {
-    assert.equal(
-      Mysql.format('INSERT INTO ?? SET ?', ['table', {property: 123}]),
-      'INSERT INTO `table` SET `property` = 123'
-    );
-  }
-});
-
-test('Mysql.raw', {
-  'generate object format will not escape': function() {
-    var now = Mysql.raw('NOW()');
-    assert.equal(
-      Mysql.format('SELECT * FROM ?? WHERE ?? >= ?', ['table', 'property', now]),
-      'SELECT * FROM `table` WHERE `property` >= NOW()'
-    );
-  }
-});
-
-test('Mysql.Types', {
-  'exported object of types': function() {
-    assert.equal(typeof Mysql.Types, 'object');
-    assert.ok(Mysql.Types);
-    assert.equal(Mysql.Types, common.Types);
-  },
-
-  'contains string to integer values': function() {
-    var types = Object.keys(Mysql.Types);
-    assert.ok(types.length > 0);
-    types.forEach(function (type) {
-      if (!/^[0-9]+$/.test(type)) {
-        assert.ok(/^[A-Z_]+/.test(type));
-        assert.equal(typeof Mysql.Types[type], 'number');
-      }
-    });
-  },
-
-  'contains integer values to string names': function() {
-    var types = Object.keys(Mysql.Types);
-    assert.ok(types.length > 0);
-    types.forEach(function (type) {
-      if (/^[0-9]+$/.test(type)) {
-        assert.equal(typeof Mysql.Types[type], 'string');
-      }
-    });
-  }
-});
diff --git a/test/unit/test-PoolConfig.js b/test/unit/test-PoolConfig.js
deleted file mode 100644
index e4f6f6c..0000000
--- a/test/unit/test-PoolConfig.js
+++ /dev/null
@@ -1,74 +0,0 @@
-var assert     = require('assert');
-var common     = require('../common');
-var test       = require('utest');
-var PoolConfig = common.PoolConfig;
-
-test('PoolConfig#Constructor', {
-  'works with combined object': function() {
-    var config = new PoolConfig({
-      connectionLimit : 2,
-      host            : 'remote',
-      port            : 3333
-    });
-
-    assert.ok(config.connectionConfig);
-    assert.equal(config.connectionConfig.host, 'remote');
-    assert.equal(config.connectionConfig.port, 3333);
-    assert.equal(config.connectionLimit, 2);
-  },
-
-  'works with connection string': function() {
-    var url    = 'mysql://myhost:3333/mydb?debug=true&charset=BIG5_CHINESE_CI';
-    var config = new PoolConfig(url);
-
-    assert.ok(config.connectionConfig);
-    assert.equal(config.connectionConfig.host, 'myhost');
-    assert.equal(config.connectionConfig.port, 3333);
-    assert.equal(config.connectionConfig.database, 'mydb');
-    assert.equal(config.connectionConfig.debug, true);
-    assert.equal(config.connectionConfig.charsetNumber, common.Charsets.BIG5_CHINESE_CI);
-  },
-
-  'connection string can configure pool': function() {
-    var url    = 'mysql://myhost:3333/mydb?connectionLimit=2';
-    var config = new PoolConfig(url);
-
-    assert.ok(config.connectionConfig);
-    assert.equal(config.connectionConfig.host, 'myhost');
-    assert.equal(config.connectionConfig.port, 3333);
-    assert.equal(config.connectionConfig.database, 'mydb');
-    assert.equal(config.connectionLimit, 2);
-  }
-});
-
-test('PoolConfig#Constructor.acquireTimeout', {
-  'defaults to 10 seconds': function() {
-    var config = new PoolConfig({});
-
-    assert.equal(config.acquireTimeout, (10 * 1000));
-  },
-
-  'undefined uses default': function() {
-    var config = new PoolConfig({
-      acquireTimeout: undefined
-    });
-
-    assert.equal(config.acquireTimeout, (10 * 1000));
-  },
-
-  'can set to 0': function() {
-    var config = new PoolConfig({
-      acquireTimeout: 0
-    });
-
-    assert.equal(config.acquireTimeout, 0);
-  },
-
-  'can set to custom value': function() {
-    var config = new PoolConfig({
-      acquireTimeout: 10000
-    });
-
-    assert.equal(config.acquireTimeout, 10000);
-  }
-});
diff --git a/tool/free-port.js b/tool/free-port.js
deleted file mode 100644
index a624b9b..0000000
--- a/tool/free-port.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var Net = require('net');
-
-var PORT_END    = 60000;
-var PORT_START  = 1000;
-var TCP_TIMEOUT = 1000;
-
-process.nextTick(run);
-
-function check(port, callback) {
-  var socket = Net.createConnection(port, 'localhost');
-  var timer  = setTimeout(function () {
-    socket.destroy();
-    callback(undefined);
-  }, TCP_TIMEOUT);
-
-  socket.on('connect', function () {
-    clearTimeout(timer);
-    socket.destroy();
-    callback(true);
-  });
-
-  socket.on('error', function (err) {
-    clearTimeout(timer);
-    if (err.syscall === 'connect' && err.code === 'ECONNREFUSED') {
-      callback(false);
-    } else {
-      callback(undefined);
-    }
-  });
-}
-
-function run() {
-  function next() {
-    var port = PORT_START + Math.floor(Math.random() * (PORT_END - PORT_START + 1));
-
-    check(port, function (used) {
-      if (used === false) {
-        console.log('%d', port);
-        process.exit(0);
-      } else {
-        setTimeout(next, 0);
-      }
-    });
-  }
-
-  next();
-}
diff --git a/tool/generate-error-constants.js b/tool/generate-error-constants.js
deleted file mode 100755
index cf4354c..0000000
--- a/tool/generate-error-constants.js
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/env node
-var fs     = require('fs');
-var path   = require('path');
-var script = path.basename(__filename);
-
-var srcDir = process.argv[2];
-if (!srcDir) {
-  var args = [];
-  args[0] = process.argv[0].indexOf(' ') !== -1
-    ? '"' + process.argv[0] + '"'
-    : process.argv[0];
-  args[1] = process.argv[1].indexOf(' ') !== -1
-    ? '"' + process.argv[1] + '"'
-    : process.argv[1];
-  args[2] = path.join('path', 'to', 'mysql', 'src');
-  console.error('Usage: ' + args.join(' '));
-  process.exit(1);
-}
-
-var codes      = [];
-var targetFile = path.join(__dirname, '..', 'lib', 'protocol', 'constants', 'errors.js');
-var previous   = fs.existsSync(targetFile) ? require(targetFile) : {};
-var stream     = fs.createWriteStream(targetFile);
-var version    = extractMySqlVersion(srcDir);
-
-appendGlobalErrorCodes(srcDir, codes);
-appendDatabseErrorCodes(srcDir, codes);
-appendSqlErrorCodes(srcDir, codes);
-keepUnusedCodes(previous, codes);
-
-stream.write('/**\n * MySQL error constants\n *\n * Extracted from version ' + version + '\n *\n * !! Generated by ' + script + ', do not modify by hand !!\n */\n\n');
-
-var alignment = codes.reduce(maxLength, 0);
-for (var i = 0; i < codes.length; i++) {
-  if (i in codes) {
-    stream.write('exports.' + codes[i] + (new Array(alignment - codes[i].length + 1)).join(' ') + ' = ' + i + ';\n');
-  }
-}
-
-stream.write('\n// Lookup-by-number table\n');
-
-var alignment = String(codes.length).length;
-for (var i = 0; i < codes.length; i++) {
-  if (i in codes) {
-    stream.write('exports[' + i + ']' + (new Array(alignment - String(i).length + 1)).join(' ') + ' = \'' + codes[i] + '\';\n');
-  }
-}
-
-console.log('Wrote constants to ' + targetFile);
-
-function appendGlobalErrorCodes(srcDir, codes) {
-  var headerFile = path.join(srcDir, 'include', 'mysys_err.h');
-  var code       = '';
-  var contents   = fs.readFileSync(headerFile, 'ascii');
-  var block      = false;
-  var match      = null;
-  var num        = 0;
-  var regexp     = /#define +(EE_[A-Z0-9_]+)\s+([0-9]+)/mg;
-
-  while ((match = regexp.exec(contents))) {
-    code = match[1];
-    num  = Number(match[2]);
-
-    if (!block) {
-      block = code === 'EE_ERROR_FIRST';
-      continue;
-    }
-
-    if (code === 'EE_ERROR_LAST') {
-      break;
-    }
-
-    codes[num] = code;
-  }
-
-  return codes;
-}
-
-function appendDatabseErrorCodes(srcDir, codes) {
-  var headerFile = path.join(srcDir, 'include', 'my_base.h');
-  var code       = '';
-  var contents   = fs.readFileSync(headerFile, 'ascii');
-  var block      = false;
-  var match      = null;
-  var num        = 0;
-  var regexp     = /#define +(HA_[A-Z0-9_]+)\s+([0-9]+)/mg;
-
-  while ((match = regexp.exec(contents))) {
-    code = match[1];
-    num  = Number(match[2]);
-
-    if (!block) {
-      block = code === 'HA_ERR_FIRST';
-      continue;
-    }
-
-    if (code === 'HA_ERR_LAST') {
-      break;
-    }
-
-    codes[num] = code;
-  }
-
-  return codes;
-}
-
-function appendSqlErrorCodes(srcDir, codes) {
-  var errorFile = path.join(srcDir, 'sql', 'share', 'errmsg-utf8.txt');
-  var contents  = fs.readFileSync(errorFile, 'utf-8');
-  var sections  = contents.split(/^start-error-number (\d+)$/m);
-
-  for (var i = 1; i < sections.length; i += 2) {
-    var offset = Number(sections[i]);
-    var names  = sections[i + 1].match(/^([A-Z0-9_]+)/mg).map(fixupCode);
-
-    for (var j = 0; j < names.length; j++) {
-      codes[offset + j] = names[j];
-    }
-  }
-
-  return codes;
-}
-
-function extractMySqlVersion(srcDir) {
-  var versionFile = path.join(srcDir, 'VERSION');
-  var contents    = fs.readFileSync(versionFile, 'utf-8');
-  var dictionary  = Object.create(null);
-
-  contents.split('\n').forEach(function (line) {
-    var pair = line.split('=');
-    var key  = pair[0];
-    var val  = pair.slice(1).join('=').trimRight();
-    dictionary[key] = val;
-  });
-
-  return dictionary.MYSQL_VERSION_MAJOR + '.' +
-    dictionary.MYSQL_VERSION_MINOR + '.' +
-    dictionary.MYSQL_VERSION_PATCH;
-}
-
-function fixupCode(code) {
-  return code
-    // remove obsolete markers
-    .replace('ER_OBSOLETE_', 'ER_')
-    // remove unused markers
-    .replace(/(?:_OLD)?_+UNUSED$/, '');
-}
-
-function keepUnusedCodes(previousCodes, currentCodes) {
-  for (var i = 0; i < currentCodes.length; i++) {
-    if (/^ER_UNUSED\d*$/.test(currentCodes[i]) && previousCodes[i]) {
-      currentCodes[i] = previousCodes[i];
-    }
-  }
-}
-
-function maxLength(max, value) {
-  return Math.max(max, value.length);
-}
diff --git a/tool/generate-type-constants.js b/tool/generate-type-constants.js
deleted file mode 100755
index 8275c87..0000000
--- a/tool/generate-type-constants.js
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env node
-var fs     = require('fs');
-var path   = require('path');
-var script = path.basename(__filename);
-
-var srcDir = process.argv[2];
-if (!srcDir) {
-  var args = [];
-  args[0] = process.argv[0].indexOf(' ') !== -1
-    ? '"' + process.argv[0] + '"'
-    : process.argv[0];
-  args[1] = process.argv[1].indexOf(' ') !== -1
-    ? '"' + process.argv[1] + '"'
-    : process.argv[1];
-  args[2] = path.join('path', 'to', 'mysql', 'src');
-  console.error('Usage: ' + args.join(' '));
-  process.exit(1);
-}
-
-var types      = extractTypes(srcDir);
-var targetFile = path.join(__dirname, '..', 'lib', 'protocol', 'constants', 'types.js');
-var stream     = fs.createWriteStream(targetFile);
-var version    = extractMySqlVersion(srcDir);
-
-stream.write('/**\n * MySQL type constants\n *\n * Extracted from version ' + version + '\n *\n * !! Generated by ' + script + ', do not modify by hand !!\n */\n\n');
-
-var alignment = types.reduce(maxLength, 0);
-for (var i = 0; i < types.length; i++) {
-  if (i in types) {
-    stream.write('exports.' + types[i] + (new Array(alignment - types[i].length + 1)).join(' ') + ' = ' + i + ';\n');
-  }
-}
-
-stream.write('\n// Lookup-by-number table\n');
-
-var alignment = String(types.length).length;
-for (var i = 0; i < types.length; i++) {
-  if (i in types) {
-    stream.write('exports[' + i + ']' + (new Array(alignment - String(i).length + 1)).join(' ') + ' = \'' + types[i] + '\';\n');
-  }
-}
-
-console.log('Wrote constants to ' + targetFile);
-
-function extractMySqlVersion(srcDir) {
-  var versionFile = path.join(srcDir, 'VERSION');
-  var contents    = fs.readFileSync(versionFile, 'utf-8');
-  var dictionary  = Object.create(null);
-
-  contents.split('\n').forEach(function (line) {
-    var pair = line.split('=');
-    var key  = pair[0];
-    var val  = pair.slice(1).join('=').trimRight();
-    dictionary[key] = val;
-  });
-
-  return dictionary.MYSQL_VERSION_MAJOR + '.' +
-    dictionary.MYSQL_VERSION_MINOR + '.' +
-    dictionary.MYSQL_VERSION_PATCH;
-}
-
-function extractTypes(srcDir) {
-  var headerFile = path.join(srcDir, 'include', 'mysql.h.pp');
-  var contents   = fs.readFileSync(headerFile, 'utf-8');
-  var enumRegexp = /typedef enum enum_field_types {([^}]*)}/m;
-  var match      = enumRegexp.exec(contents);
-  var regexp     = /([A-Z0-9_]+)(?: *= *([0-9]+))?/g;
-
-  if (!match) {
-    throw new Error('Cannot locate enum enum_field_types in "' + headerFile + '"');
-  }
-
-  var enumContents = match[1];
-  var index        = 0;
-  var types        = [];
-
-  while ((match = regexp.exec(enumContents))) {
-    var name = match[1];
-    var num  = Number(match[2]) || index++;
-
-    if (name.indexOf('MYSQL_TYPE_') === 0) {
-      types[num] = name.substring(11);
-    }
-  }
-
-  return types;
-}
-
-function maxLength(max, value) {
-  return Math.max(max, value.length);
-}
diff --git a/tool/install-nyc.js b/tool/install-nyc.js
deleted file mode 100644
index 1c98009..0000000
--- a/tool/install-nyc.js
+++ /dev/null
@@ -1,96 +0,0 @@
-var path  = require('path');
-var spawn = require('child_process').spawn;
-
-process.nextTick(run);
-
-function installNpmModule(name, version, callback) {
-  if (getPackageVersion(name) === version) {
-    callback();
-    return;
-  }
-
-  var spec  = name + '@' + version;
-  var args  = ['install', '--silent', '--no-save', spec];
-  var child = spawn('npm', args, {
-    cwd   : path.join(__dirname, '..'),
-    shell : true
-  });
-
-  child.stderr.resume();
-  child.stdout.resume();
-
-  child.on('exit', function (code) {
-    var err = null;
-
-    if (code !== 0) {
-      err = new Error('npm install ' + spec + ' failed with exit code ' + code);
-    }
-
-    callback(err);
-  });
-}
-
-function getNycVersion() {
-  var nodeVersion = process.version.replace(/^v/, '').split('.')
-    .map(function (s) { return Number(s); });
-
-  if (nodeVersion[0] === 0 && nodeVersion[1] < 10) {
-    return undefined;
-  } else if (nodeVersion[0] < 4) {
-    return '10.3.2';
-  } else if (nodeVersion[0] < 6) {
-    return '11.9.0';
-  } else {
-    return '13.2.0';
-  }
-}
-
-function getPackageVersion(name) {
-  try {
-    return require(name + '/package').version;
-  } catch (e) {
-    return undefined;
-  }
-}
-
-function run() {
-  var args    = process.argv.slice(2);
-  var cmd     = null;
-  var divider = args.indexOf('--');
-  var version = getNycVersion();
-
-  if (divider !== -1) {
-    cmd  = args.slice(divider + 1);
-    args = args.slice(0, divider);
-  }
-
-  if (!version && args.indexOf('--nyc-optional') === -1) {
-    console.error('nyc does not support current Node.js version');
-    process.exit(1);
-  } else if (version) {
-    installNpmModule('nyc', version, function (err) {
-      if (err) {
-        console.error(err.message);
-        process.exit(1);
-      } else if (cmd) {
-        runCmd('nyc', args.concat(cmd));
-      }
-    });
-  } else if (cmd) {
-    runCmd(cmd[0], cmd.slice(1));
-  }
-}
-
-function runCmd(cmd, args) {
-  var child = spawn(cmd, args, {
-    cwd   : path.join(__dirname, '..'),
-    shell : true
-  });
-
-  child.stderr.pipe(process.stderr, {end: false});
-  child.stdout.pipe(process.stdout, {end: false});
-
-  child.on('exit', function (code) {
-    process.exit(code);
-  });
-}
diff --git a/tool/lint-readme.js b/tool/lint-readme.js
deleted file mode 100644
index b6ef74c..0000000
--- a/tool/lint-readme.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var fs   = require('fs');
-var path = require('path');
-var util = require('util');
-
-var MARKDOWN_SECTION_REGEXP = /^(#+) (.+)$/;
-var NEWLINE_REGEXP          = /\r?\n/;
-var README_PATH             = path.join(__dirname, '..', 'Readme.md');
-var README_CONTENTS         = fs.readFileSync(README_PATH, 'utf-8');
-var TOC_SECTION_NAME        = 'Table of Contents';
-
-var currentSectionLevel = null;
-var currentSectionName  = null;
-var currentToc          = [];
-var expectedToc         = [];
-var tocOffset           = 0;
-
-README_CONTENTS.split(NEWLINE_REGEXP).forEach(function (line, index) {
-  var match = MARKDOWN_SECTION_REGEXP.exec(line);
-
-  if (match) {
-    currentSectionLevel = match[1].length;
-    currentSectionName  = match[2];
-
-    if (currentSectionName === TOC_SECTION_NAME) {
-      tocOffset = index;
-    }
-
-    if (currentSectionLevel > 1 && currentSectionName !== TOC_SECTION_NAME) {
-      expectedToc.push(util.format('%s- [%s](%s)',
-        repeat('  ', (currentSectionLevel - 2)), currentSectionName, toAnchor(currentSectionName)));
-    }
-  } else if (currentSectionName === TOC_SECTION_NAME) {
-    currentToc.push(line);
-  }
-});
-
-var index = 0;
-
-if (currentToc[index++].length !== 0) {
-  expect((tocOffset + index), 'blank line', currentToc[index - 1]);
-}
-
-expectedToc.forEach(function (expectedLine) {
-  var currentLine = currentToc[index++] || '';
-
-  if (expectedLine !== currentLine) {
-    var currentIndex = currentToc.indexOf(expectedLine);
-
-    expect((tocOffset + index), ('"' + expectedLine + '"'), currentLine);
-
-    if (currentIndex !== -1) {
-      index = currentIndex + 1;
-    }
-  }
-});
-
-function expect (lineidx, message, line) {
-  console.log('Expected %s on line %d', message, (lineidx + 1));
-  console.log('  Got: %s', line);
-  process.exitCode = 1;
-}
-
-function  repeat (str, num) {
-  var s = '';
-
-  for (var i = 0; i < num; i++) {
-    s += str;
-  }
-
-  return s;
-}
-
-function toAnchor (section) {
-  return '#' + section.toLowerCase().replace(/ /g, '-');
-}
diff --git a/tool/mysql-version.js b/tool/mysql-version.js
deleted file mode 100644
index 06f14fe..0000000
--- a/tool/mysql-version.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var common = require('../test/common');
-
-process.nextTick(run);
-
-function run() {
-  var conn = common.createConnection();
-
-  conn.connect(function () {
-    conn.destroy();
-
-    try {
-      console.log(conn._protocol._handshakeInitializationPacket.serverVersion);
-      process.exit(0);
-    } catch (e) {
-      console.error('unable to get mysql version');
-      process.exit(1);
-    }
-  });
-}
diff --git a/tool/version-changes.js b/tool/version-changes.js
deleted file mode 100755
index b46df25..0000000
--- a/tool/version-changes.js
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env node
-var fs   = require('fs');
-var path = require('path');
-
-var changesFilePath     = path.join(__dirname, '..', 'Changes.md');
-var changesFileContents = fs.readFileSync(changesFilePath, 'utf-8');
-var changesHeadRegexp   = /^## HEAD$/m;
-var date                = getLocaleDate();
-var version             = process.env.npm_package_version;
-
-if (!changesHeadRegexp.test(changesFileContents)) {
-  console.error('Changes.md missing version marker.');
-  process.exit(1);
-}
-
-fs.writeFileSync(changesFilePath,
-  changesFileContents.replace(changesHeadRegexp, '## v' + version + ' (' + date + ')'));
-
-function getLocaleDate() {
-  var now = new Date();
-
-  return zeroPad(now.getFullYear(), 4) + '-' +
-    zeroPad(now.getMonth() + 1, 2) + '-' +
-    zeroPad(now.getDate(), 2);
-}
-
-function zeroPad(number, length) {
-  number = number.toString();
-
-  while (number.length < length) {
-    number = '0' + number;
-  }
-
-  return number;
-}
diff --git a/tool/wait-mysql.js b/tool/wait-mysql.js
deleted file mode 100644
index df11174..0000000
--- a/tool/wait-mysql.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var Net = require('net');
-
-var CHECK_INTERVAL_MS = 200;
-var CHECK_TIMEOUT     = 120000;
-var TCP_TIMEOUT       = 1000;
-
-process.nextTick(run);
-
-function check(host, port, callback) {
-  var socket = Net.createConnection(port, host);
-  var timer  = setTimeout(function () {
-    socket.destroy();
-    callback(false);
-  }, TCP_TIMEOUT);
-
-  socket.once('data', function () {
-    clearTimeout(timer);
-    socket.destroy();
-    callback(true);
-  });
-
-  socket.on('error', function () {
-    clearTimeout(timer);
-    callback(false);
-  });
-}
-
-function run() {
-  var host = process.argv[3] || 'localhost';
-  var port = Number(process.argv[2]);
-
-  function next() {
-    check(host, port, function (connected) {
-      if (connected) {
-        console.log('connected to %s:%d', host, port);
-        process.exit(0);
-      } else {
-        setTimeout(next, CHECK_INTERVAL_MS);
-      }
-    });
-  }
-
-  setTimeout(function () {
-    console.error('timeout waiting for %s:%d', host, port);
-    process.exit(1);
-  }, CHECK_TIMEOUT);
-
-  next();
-}