var assert = require('assert');
var domain = require('domain');
var d1 = domain.create();
var d2 = domain.create();
var d3 = domain.create();
var d4 = domain.create();
var err1, err2, err3, err4;

d1.run(function() {
  var common     = require('../../common');
  var connection = common.createConnection();
  var assert     = require('assert');
 
  d2.run(function() {
    connection.query('SELECT 1', function(err, _rows, _fields) {
      if (err) throw err;
      throw new Error('inside domain 2');
    });
  });

  d3.run(function() {
    connection.execute('SELECT 1', function(err, _rows, _fields) {
      if (err) throw err;
      throw new Error('inside domain 3');
    });
  });

  d4.run(function() {
   connection.ping(function() {
     throw new Error('inside domain 4');
   });
  });

  connection.end();
  setTimeout(function() {
    throw new Error('inside domain 1');
  }, 100);

  d2.on('error', function(err) {
    err2 = err;
  });
  d3.on('error', function(err) {
    err3 = err;
  });
  d4.on('error', function(err) {
    err4 = err;
  });

});

d1.on('error', function(err) {
  err1 = err;
});

process.on('exit', function() {
  assert.equal(''+err1, 'Error: inside domain 1')
  assert.equal(''+err2, 'Error: inside domain 2')
  assert.equal(''+err3, 'Error: inside domain 3') 
  assert.equal(''+err4, 'Error: inside domain 4') 
});
