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 "-----------"
response_container = parse_response(answer)
compare_dnssec_data(response_container: response_container, domain: domain)
rescue Exception => e
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)
text = "#{key.flags} - #{key.protocol} - #{key.alg} - #{key.public_key}"
if flag
key.validation_datetime = Time.zone.now
key.save
@ -98,7 +100,9 @@ class ValidateDnssecJob < ApplicationJob
def parse_response(answer)
response_container = []
answer.each_answer do |a|
a_string = a.to_s
a_string = a_string.gsub /\t/, ' '
a_string = a_string.split(' ')

View file

@ -1,42 +1,71 @@
$VERBOSE=nil
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
setup do
@domain = domains(:shop)
@dnskey = dnskeys(:one)
end
def test_job_should_return_successfully_validated_dnskeys
# @domain.dnskeys << @dnskey
# @domain.save
# @domain.reload
#
# mock_zone_data = [
# {
# flags: @dnskey.flags,
# protocol: @dnskey.protocol,
# alg: @dnskey.alg,
# public_key: @dnskey.public_key
# }]
#
# resolver = Spy.mock(Dnsruby::Recursor)
# Spy.on(resolver, :query).and_return true
# Spy.on_instance_method(ValidateDnssecJob, :parse_response).and_return(mock_zone_data)
# # Spy.on_instance_method(ValidateDnssecJob, :prepare_validator).and_return(true)
#
#
# ValidateDnssecJob.perform_now(domain_name: @domain.name)
#
# @domain.reload
# p @domain.dnskeys
def test_job_should_set_validation_datetime_if_validation_is_valid
@domain.nameservers.each do |n|
n.update(validation_datetime: Time.zone.now - 1.minute)
end
@domain.dnskeys << @dnskey
@domain.save
@domain.reload
mock_zone_data = ZoneAnswer.new
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_not_nil @domain.dnskeys.first.validation_datetime
end
# def test_job_discarded_after_error
# assert_no_enqueued_jobs
# assert_performed_jobs 1 do
# TestDiscardedJob.perform_later
# end
# assert_no_enqueued_jobs
# end
def test_job_should_not_set_validation_datetime_if_validation_is_invalid
@domain.nameservers.each do |n|
n.update(validation_datetime: Time.zone.now - 1.minute)
end
@domain.dnskeys << @dnskey
@domain.save
@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