Я пишу небольшое приложение на ruby, которое использует etcd через гем etcd-ruby для координации действий в сети. кластер.
Одна проблема, которая у меня есть, заключается в том, как написать спецификации для него.
Мой первый подход состоял в том, чтобы попытаться имитировать вызовы etcd на уровне клиента, однако это неоптимально, поскольку ответы, возвращаемые клиентом, довольно сложны с метаданными. Я думал о том, чтобы написать оболочку над клиентом etcd, чтобы удалить метаданные и упростить подход с имитацией, но проблема в том, что алгоритм время от времени зависит от этих метаданных, поэтому абстракция становится очень дырявой и просто болезненным слоем косвенности.
Другой подход заключается в использовании видеомагнитофона для записи фактических запросов. Преимущество этого заключается в том, что спецификации могут работать без etcd, но возникает путаница при инициализации состояния и управлении кассетами.
Это подводит меня к моему вопросу. etcd достаточно быстр в качестве соло-узла, поэтому проще всего использовать его непосредственно в тестах и вообще не пытаться его заглушить. Единственная проблема здесь в том, что я не вижу простого способа очистить пространство ключей между тестами. Рекурсивное удаление корневого ключа не допускается. Кроме того, это не сбрасывает индексы. Я проверил спецификации etcd-ruby
драгоценного камня, и, похоже, проблему удалось обойти, используя ключи, основанные на uuid, так что ключи просто никогда не сталкиваются. Я полагаю, что это жизнеспособный подход, но есть ли что-то лучше?