2014-11-04 5 views
2

Я создаю библиотеку Express.js, которая использует официальный драйвер Node.js для операций Mongodb.Моделирование сбоя доступа к Mongodb

Я в настоящее время в процессе написания модульных тестов, и я хочу, чтобы имитировать отказы, чтобы получить доступ к базе данных, с тем чтобы обеспечить:

  • Библиотека признает случаи отказа (обрабатывает ошибку)
  • делает правильные обратные вызовы ошибок и срабатывают соответствующие события.

Я хочу, чтобы тесты выполнялись кросс-платформенными, предпочтительно без необходимости закрывать или запускать базу данных со специальными параметрами.

Для команд sleep команды sleep, похоже, выполняют практически то, что я хочу, но время ожидания в секундах довольно долгое время, плюс оно помечено как для внутреннего использования, и вам нужно запустить базу данных с помощью специальный параметр для его работы. Команда forceerror выглядит как еще одна хорошая, но опять же, она указана только для внутреннего использования, и описание является неопределенным, если не сказать больше.

Мне интересно, есть ли какой-либо рекомендуемый (желательно не слишком хакерский) способ сделать это.

ответ

1

Здесь он требует привилегий суперпользователя для процесса узла, выполняющего этот сценарий, чтобы посылать сигналы процессу MongoDB без того породил, но это лучшее, что я нашел до сих пор, чтобы имитировать невосприимчивости:

var MongoDB = require('mongodb'); 

MongoDB.MongoClient.connect("mongodb://localhost:27017/SomeDB", {'server': {'socketOptions': {'connectTimeoutMS': 50, 'socketTimeoutMS': 50}}}, function(Err, DB) { 
    if(Err) 
    { 
     console.log(Err); 
    } 
    else 
    { 
     DB.command({'serverStatus': 1}, function(Err, Result) { 
      if(Err) 
      { 
       console.log(Err) 
      } 
      else 
      { 
       process.kill(Result.pid, 'SIGSTOP'); 
       //Put testing logic to test unresponsiveness 
       process.kill(Result.pid, 'SIGCONT'); 
       DB.close(); 
      } 
     }); 
    } 
}); 

Редактировать :

Если тестирование логических сбоев на Linux, вы можете возобновить процесс MongoDB вручную на корпусе, выполнив:

kill -CONT PID 

W здесь PID является идентификатором процесса процесса MongoDB.

Смежные вопросы