64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module DomainHelpers
 | 
						|
  def configure_mx(domain:, exchange:, ip_v4_addr: '2.3.4.5', ip_v6_addr: 'fd00::2')
 | 
						|
    resolver = instance_double(Resolv::DNS, :timeouts= => nil)
 | 
						|
 | 
						|
    allow(resolver).to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::MX)
 | 
						|
      .and_return([double_mx(exchange)])
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::A)
 | 
						|
      .and_return([])
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::AAAA)
 | 
						|
      .and_return([])
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(exchange, Resolv::DNS::Resource::IN::A)
 | 
						|
      .and_return([double_resource_v4(ip_v4_addr)])
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(exchange, Resolv::DNS::Resource::IN::AAAA)
 | 
						|
      .and_return([double_resource_v6(ip_v6_addr)])
 | 
						|
    allow(Resolv::DNS)
 | 
						|
      .to receive(:open)
 | 
						|
      .and_yield(resolver)
 | 
						|
  end
 | 
						|
 | 
						|
  def configure_dns(domain:, results:)
 | 
						|
    resolver = instance_double(Resolv::DNS, :timeouts= => nil)
 | 
						|
 | 
						|
    allow(resolver).to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::MX)
 | 
						|
      .and_return(results)
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::A)
 | 
						|
      .and_return(results)
 | 
						|
    allow(resolver)
 | 
						|
      .to receive(:getresources)
 | 
						|
      .with(domain, Resolv::DNS::Resource::IN::AAAA)
 | 
						|
      .and_return(results)
 | 
						|
    allow(Resolv::DNS)
 | 
						|
      .to receive(:open)
 | 
						|
      .and_yield(resolver)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def double_mx(exchange)
 | 
						|
    instance_double(Resolv::DNS::Resource::MX, exchange: exchange)
 | 
						|
  end
 | 
						|
 | 
						|
  def double_resource_v4(addr)
 | 
						|
    instance_double(Resolv::DNS::Resource::IN::A, address: addr)
 | 
						|
  end
 | 
						|
 | 
						|
  def double_resource_v6(addr)
 | 
						|
    instance_double(Resolv::DNS::Resource::IN::AAAA, address: addr)
 | 
						|
  end
 | 
						|
end
 |