У меня есть куча rspec-теста, который использует внешние базы данных (я знаю, это не очень хорошая идея, но есть много причин, это лучшее решение в этом случае). Я настроил другой vlan с тестовой средой для запуска тестов в изолированной среде. Теперь я хочу определить, что все тесты rspec используют другой DNS-сервер для разрешения имен хостов (для работы с средой dev). Есть ли что-то, что я могу использовать?rspec с другим DNS-сервером
1
A
ответ
1
RubyDNS может работать для вас. Этот пример почти дословно из их страницы GH:
#!/usr/bin/env ruby
require 'rubydns'
INTERFACES = [
[:udp, "0.0.0.0", 5300],
[:tcp, "0.0.0.0", 5300]
]
Name = Resolv::DNS::Name
IN = Resolv::DNS::Resource::IN
# Use upstream DNS for name resolution.
UPSTREAM = RubyDNS::Resolver.new([[:udp, "8.8.8.8", 53], [:tcp, "8.8.8.8", 53]])
# start the RubyDNS server
RubyDNS::run_server(:listen => INTERFACES) do
match(/database\.testing\.com/, IN::A) do |transaction|
transaction.respond!("10.0.0.80")
end
# Default DNS handler
otherwise do |transaction|
transaction.passthrough!(UPSTREAM)
end
end
затем запрос:
➜ ruby_dns_example dig @localhost -p 5300 database.testing.com
; <<>> DiG 9.8.3-P1 <<>> @localhost -p 5300 database.testing.com
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34286
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;database.testing.com. IN A
;; ANSWER SECTION:
database.testing.com. 86400 IN A 10.0.0.80
;; Query time: 2 msec
;; SERVER: 127.0.0.1#5300(127.0.0.1)
;; WHEN: Sat Jan 31 13:14:14 2015
;; MSG SIZE rcvd: 54
Есть много примеров здесь: Настройки распознаватель
DNS обычно настроены на OS, поэтому я не думаю, что вы можете что-то сделать. Я знаю, что это не полезно, но лучший и, вероятно, единственный способ - исправить ваши спецификации, чтобы они не вызывали внешние системы. Используйте Mocks или что-то в этом роде. Такие инструменты, как VCR (https://github.com/vcr/vcr), могут помочь вам с внешними вызовами. – mhutter
Не уверен, что это помогает, но если вы использовали IP-адреса, вы могли бы использовать что-то вроде http://xip.io/ – rainkinz