addede test for dnssec validator

This commit is contained in:
olegphenomenon 2022-01-12 17:09:53 +02:00
parent f6b352a087
commit aba8c1fb17
2 changed files with 64 additions and 31 deletions

View file

@ -63,6 +63,7 @@ class ValidateDnssecJob < ApplicationJob
logger.info "-----------" logger.info "-----------"
response_container = parse_response(answer) response_container = parse_response(answer)
compare_dnssec_data(response_container: response_container, domain: domain) compare_dnssec_data(response_container: response_container, domain: domain)
rescue Exception => e rescue Exception => e
logger.error "#{e.message} - domain name: #{domain.name} - hostname: #{hostname}" logger.error "#{e.message} - domain name: #{domain.name} - hostname: #{hostname}"
@ -76,6 +77,7 @@ class ValidateDnssecJob < ApplicationJob
flag = make_magic(response_container: response_container, dnskey: key) flag = make_magic(response_container: response_container, dnskey: key)
text = "#{key.flags} - #{key.protocol} - #{key.alg} - #{key.public_key}" text = "#{key.flags} - #{key.protocol} - #{key.alg} - #{key.public_key}"
if flag if flag
key.validation_datetime = Time.zone.now key.validation_datetime = Time.zone.now
key.save key.save
@ -98,7 +100,9 @@ class ValidateDnssecJob < ApplicationJob
def parse_response(answer) def parse_response(answer)
response_container = [] response_container = []
answer.each_answer do |a| answer.each_answer do |a|
a_string = a.to_s a_string = a.to_s
a_string = a_string.gsub /\t/, ' ' a_string = a_string.gsub /\t/, ' '
a_string = a_string.split(' ') a_string = a_string.split(' ')

View file

@ -1,42 +1,71 @@
$VERBOSE=nil
require 'test_helper' require 'test_helper'
class ZoneAnswer
def initialize(valid_response: true)
@answer = []
algorithm = OpenStruct.new(code: 13)
answer = OpenStruct.new
answer.data = "some0 some1 some2 257 some4 some5 some6 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+KkxLbxILfDLUT0rAK9iUzy1L53eKGQ== some"
answer.flags = 257
answer.protocol = 3
answer.protocol = 7 unless valid_response
answer.algorithm = algorithm
@answer << answer
end
def each_answer
@answer.each {|rec|
yield rec
}
end
end
class ValidateDnssecJobTest < ActiveJob::TestCase class ValidateDnssecJobTest < ActiveJob::TestCase
setup do setup do
@domain = domains(:shop) @domain = domains(:shop)
@dnskey = dnskeys(:one) @dnskey = dnskeys(:one)
end end
def test_job_should_return_successfully_validated_dnskeys def test_job_should_set_validation_datetime_if_validation_is_valid
# @domain.dnskeys << @dnskey @domain.nameservers.each do |n|
# @domain.save n.update(validation_datetime: Time.zone.now - 1.minute)
# @domain.reload end
# @domain.dnskeys << @dnskey
# mock_zone_data = [ @domain.save
# {
# flags: @dnskey.flags, @domain.reload
# protocol: @dnskey.protocol,
# alg: @dnskey.alg, mock_zone_data = ZoneAnswer.new
# public_key: @dnskey.public_key
# }] Spy.on_instance_method(ValidateDnssecJob, :prepare_validator).and_return(Dnsruby::Resolver.new)
# Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_zone_data)
# resolver = Spy.mock(Dnsruby::Recursor)
# Spy.on(resolver, :query).and_return true ValidateDnssecJob.perform_now(domain_name: @domain.name)
# Spy.on_instance_method(ValidateDnssecJob, :parse_response).and_return(mock_zone_data)
# # Spy.on_instance_method(ValidateDnssecJob, :prepare_validator).and_return(true) @domain.reload
# assert_not_nil @domain.dnskeys.first.validation_datetime
#
# ValidateDnssecJob.perform_now(domain_name: @domain.name)
#
# @domain.reload
# p @domain.dnskeys
end end
# def test_job_discarded_after_error def test_job_should_not_set_validation_datetime_if_validation_is_invalid
# assert_no_enqueued_jobs @domain.nameservers.each do |n|
# assert_performed_jobs 1 do n.update(validation_datetime: Time.zone.now - 1.minute)
# TestDiscardedJob.perform_later end
# end @domain.dnskeys << @dnskey
# assert_no_enqueued_jobs @domain.save
# end
@domain.reload
mock_zone_data = ZoneAnswer.new(valid_response: false)
Spy.on_instance_method(ValidateDnssecJob, :prepare_validator).and_return(Dnsruby::Resolver.new)
Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_zone_data)
ValidateDnssecJob.perform_now(domain_name: @domain.name)
@domain.reload
assert_nil @domain.dnskeys.first.validation_datetime
end
end end