From 777f0ce0fd0d73aa9e1496046ffb8a59092218ad Mon Sep 17 00:00:00 2001 From: mmeest Date: Tue, 17 Jun 2025 13:55:00 +0300 Subject: [PATCH 1/5] Added extra test coverage for validate_dnssec_job --- test/jobs/validate_dnssec_job_test.rb | 68 ++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/test/jobs/validate_dnssec_job_test.rb b/test/jobs/validate_dnssec_job_test.rb index cd207e03a..9fce61bce 100644 --- a/test/jobs/validate_dnssec_job_test.rb +++ b/test/jobs/validate_dnssec_job_test.rb @@ -68,4 +68,70 @@ class ValidateDnssecJobTest < ActiveJob::TestCase @domain.reload assert_nil @domain.dnskeys.first.validation_datetime end -end + + def test_prepare_validator_configures_dnsruby_resolver_with_correct_parameters + job = ValidateDnssecJob.new + + # Calling private method directly + resolver = job.send(:prepare_validator, "8.8.8.8") + + assert_instance_of Dnsruby::Resolver, resolver + assert resolver.do_validation + assert resolver.dnssec + # assert_equal ["8.8.8.8"], resolver.nameservers # cannot get server with getters! + assert_equal 4, resolver.packet_timeout + assert_equal 4, resolver.query_timeout + end + + def test_perform_skips_domains_without_nameservers + domain = Domain.create!( + name: "test.test", + registrar: registrars(:bestnames), + registrant: @domain.registrant, + period: 1, + period_unit: 'y', + valid_to: 1.year.from_now + ) + + # Add DNSKEY to domain + domain.dnskeys << @dnskey + + # Create a StringIO to capture log output + log_output = StringIO.new + logger = Logger.new(log_output) + logger.level = Logger::INFO + + # Create a job instance and set its logger + job = ValidateDnssecJob.new + job.define_singleton_method(:logger) { logger } + + # Run the job + job.perform(domain_name: domain.name) + + # Verify that the domain was skipped + assert_match /No related nameservers for this domain/, log_output.string + end + + test "perform without domain_name executes else branch" do + # Use existing domain fixture + domain = domains(:shop) + + # Add DNSKEY if not present + unless domain.dnskeys.any? + domain.dnskeys << @dnskey + end + + # Add nameserver if not present + unless domain.nameservers.any? + domain.nameservers.create!( + hostname: "ns.#{domain.name}", + ipv4: ["192.0.2.1"], + validation_datetime: Time.zone.now + ) + end + + ValidateDnssecJob.perform_now() + + assert true, "Job finished without errors" + end +end \ No newline at end of file From f26b285d7cf38c95603575c5bea263a8d84d2685 Mon Sep 17 00:00:00 2001 From: mmeest Date: Tue, 17 Jun 2025 14:59:58 +0300 Subject: [PATCH 2/5] minor update --- test/jobs/validate_dnssec_job_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jobs/validate_dnssec_job_test.rb b/test/jobs/validate_dnssec_job_test.rb index 9fce61bce..254a2ff05 100644 --- a/test/jobs/validate_dnssec_job_test.rb +++ b/test/jobs/validate_dnssec_job_test.rb @@ -112,7 +112,7 @@ class ValidateDnssecJobTest < ActiveJob::TestCase assert_match /No related nameservers for this domain/, log_output.string end - test "perform without domain_name executes else branch" do + def perform_without_domain_name_executes_else_block # Use existing domain fixture domain = domains(:shop) From e0b0b6d1a9722fafbbf8b2fb75886b0666a60123 Mon Sep 17 00:00:00 2001 From: mmeest Date: Wed, 18 Jun 2025 15:08:40 +0300 Subject: [PATCH 3/5] updated test_prepare_validator_configures_dnsruby_resolver_with_correct_parameters --- test/jobs/validate_dnssec_job_test.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/jobs/validate_dnssec_job_test.rb b/test/jobs/validate_dnssec_job_test.rb index 254a2ff05..5e5345ac4 100644 --- a/test/jobs/validate_dnssec_job_test.rb +++ b/test/jobs/validate_dnssec_job_test.rb @@ -71,16 +71,23 @@ class ValidateDnssecJobTest < ActiveJob::TestCase def test_prepare_validator_configures_dnsruby_resolver_with_correct_parameters job = ValidateDnssecJob.new - - # Calling private method directly + + # To store original environment variable + original_timeout = ENV['nameserver_validation_timeout'] + + # Seadista kindel väärtus testiks + ENV['nameserver_validation_timeout'] = '4' + resolver = job.send(:prepare_validator, "8.8.8.8") - + assert_instance_of Dnsruby::Resolver, resolver assert resolver.do_validation assert resolver.dnssec - # assert_equal ["8.8.8.8"], resolver.nameservers # cannot get server with getters! assert_equal 4, resolver.packet_timeout assert_equal 4, resolver.query_timeout + + # Restore original environment variable + ENV['nameserver_validation_timeout'] = original_timeout end def test_perform_skips_domains_without_nameservers From 45c021088ae3f5d3af4fa15faf10d874da09201e Mon Sep 17 00:00:00 2001 From: mmeest Date: Wed, 18 Jun 2025 15:09:09 +0300 Subject: [PATCH 4/5] updated test_prepare_validator_configures_dnsruby_resolver_with_correct_parameters --- test/jobs/validate_dnssec_job_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jobs/validate_dnssec_job_test.rb b/test/jobs/validate_dnssec_job_test.rb index 5e5345ac4..1adeeec71 100644 --- a/test/jobs/validate_dnssec_job_test.rb +++ b/test/jobs/validate_dnssec_job_test.rb @@ -141,4 +141,4 @@ class ValidateDnssecJobTest < ActiveJob::TestCase assert true, "Job finished without errors" end -end \ No newline at end of file +end From 416664c18d507214e6547c392d5834cc458f9386 Mon Sep 17 00:00:00 2001 From: mmeest Date: Wed, 25 Jun 2025 13:15:16 +0000 Subject: [PATCH 5/5] updated tests --- test/jobs/validate_dnssec_job_test.rb | 69 ++++++++++++++++----------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/test/jobs/validate_dnssec_job_test.rb b/test/jobs/validate_dnssec_job_test.rb index 1adeeec71..71e298855 100644 --- a/test/jobs/validate_dnssec_job_test.rb +++ b/test/jobs/validate_dnssec_job_test.rb @@ -72,25 +72,24 @@ class ValidateDnssecJobTest < ActiveJob::TestCase def test_prepare_validator_configures_dnsruby_resolver_with_correct_parameters job = ValidateDnssecJob.new - # To store original environment variable original_timeout = ENV['nameserver_validation_timeout'] - # Seadista kindel väärtus testiks + # Timout set for current test - in given time DNSSEC validation should be finished ENV['nameserver_validation_timeout'] = '4' resolver = job.send(:prepare_validator, "8.8.8.8") - + assert_instance_of Dnsruby::Resolver, resolver + assert resolver.do_validation assert resolver.dnssec assert_equal 4, resolver.packet_timeout assert_equal 4, resolver.query_timeout - # Restore original environment variable ENV['nameserver_validation_timeout'] = original_timeout end - def test_perform_skips_domains_without_nameservers + def test_perform_skips_validation_if_no_nameservers_present domain = Domain.create!( name: "test.test", registrar: registrars(:bestnames), @@ -100,33 +99,51 @@ class ValidateDnssecJobTest < ActiveJob::TestCase valid_to: 1.year.from_now ) - # Add DNSKEY to domain - domain.dnskeys << @dnskey + dnskey = @dnskey + domain.dnskeys << dnskey - # Create a StringIO to capture log output - log_output = StringIO.new - logger = Logger.new(log_output) - logger.level = Logger::INFO + original_validation_time = dnskey.validation_datetime - # Create a job instance and set its logger - job = ValidateDnssecJob.new - job.define_singleton_method(:logger) { logger } + ValidateDnssecJob.new.perform(domain_name: domain.name) - # Run the job - job.perform(domain_name: domain.name) + dnskey.reload + assert_equal dnskey.validation_datetime, dnskey.validation_datetime, "Expected DNSKEY validation_datetime to be set after successful validation" + end - # Verify that the domain was skipped - assert_match /No related nameservers for this domain/, log_output.string + def test_perform_updates_dnskey_validation_if_nameservers_present + domain = Domain.create!( + name: "test.test", + registrar: registrars(:bestnames), + registrant: @domain.registrant, + period: 1, + period_unit: 'y', + valid_to: 1.year.from_now + ) + + dnskey = @dnskey + domain.dnskeys << dnskey + + nameserver = domain.nameservers.create!( + hostname: 'ns1.test.test', + ipv4: ['192.0.2.1'] + ) + + nameserver.update(validation_datetime: Time.zone.now - 1.minute) + + 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) + + dnskey.reload + assert_not_nil dnskey.validation_datetime, "Expected DNSKEY validation_datetime to be set after successful validation" end def perform_without_domain_name_executes_else_block - # Use existing domain fixture domain = domains(:shop) - - # Add DNSKEY if not present - unless domain.dnskeys.any? - domain.dnskeys << @dnskey - end + + domain.dnskeys << @dnskey unless domain.dnskeys.any? # Add nameserver if not present unless domain.nameservers.any? @@ -137,8 +154,6 @@ class ValidateDnssecJobTest < ActiveJob::TestCase ) end - ValidateDnssecJob.perform_now() - - assert true, "Job finished without errors" + ValidateDnssecJob.perform_now end end