diff --git a/app/jobs/nameserver_record_validation_job.rb b/app/jobs/nameserver_record_validation_job.rb index aa1761995..da32196c3 100644 --- a/app/jobs/nameserver_record_validation_job.rb +++ b/app/jobs/nameserver_record_validation_job.rb @@ -43,6 +43,8 @@ class NameserverRecordValidationJob < ApplicationJob result = NameserverValidator.run(domain_name: domain.name, hostname: nameserver.hostname) if result[:result] + add_nameserver_to_succesfully(nameserver) + true else parse_result(result, nameserver) diff --git a/test/jobs/nameserver_record_validation_job_test.rb b/test/jobs/nameserver_record_validation_job_test.rb index 7362cc6c1..a8d625ca1 100644 --- a/test/jobs/nameserver_record_validation_job_test.rb +++ b/test/jobs/nameserver_record_validation_job_test.rb @@ -5,6 +5,94 @@ class NameserverRecordValidationJobTest < ActiveSupport::TestCase setup do @nameserver = nameservers(:shop_ns1) - Spy.on_instance_method(Domains::NameserverValidator, :run).and_return({result: true, reason: ''}) + @domain = domains(:shop) + @domain.update(created_at: Time.zone.now - 10.hours) + @domain.reload + end + + def test_nameserver_should_validate_succesfully_and_set_validation_datetime + mock_dns_response = OpenStruct.new + answer = OpenStruct.new + answer.serial = '12343' + mock_dns_response.answer = [ answer ] + + Spy.on_instance_method(NameserverValidator, :setup_resolver).and_return(Dnsruby::Resolver.new) + Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_dns_response) + + assert_nil @nameserver.validation_datetime + assert_nil @nameserver.validation_counter + assert_nil @nameserver.failed_validation_reason + + NameserverRecordValidationJob.perform_now(domain_name: @domain.name) + @nameserver.reload + + assert_not_nil @nameserver.validation_datetime + assert_nil @nameserver.validation_counter + assert_nil @nameserver.failed_validation_reason + end + + def test_should_return_failed_validation_with_answer_reason + mock_dns_response = OpenStruct.new + mock_dns_response.answer = [ ] + + Spy.on_instance_method(NameserverValidator, :setup_resolver).and_return(Dnsruby::Resolver.new) + Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_dns_response) + + assert_nil @nameserver.validation_datetime + assert_nil @nameserver.validation_counter + assert_nil @nameserver.failed_validation_reason + + NameserverRecordValidationJob.perform_now(domain_name: @domain.name) + @nameserver.reload + + assert_nil @nameserver.validation_datetime + assert @nameserver.validation_counter, 1 + assert @nameserver.failed_validation_reason.include? "No any answer comes from **#{@nameserver.hostname}**" + end + + def test_should_return_failed_validation_with_serial_reason + mock_dns_response = OpenStruct.new + answer = OpenStruct.new + answer.some_field = '12343' + mock_dns_response.answer = [ answer ] + + Spy.on_instance_method(NameserverValidator, :setup_resolver).and_return(Dnsruby::Resolver.new) + Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_dns_response) + + assert_nil @nameserver.validation_datetime + assert_nil @nameserver.validation_counter + assert_nil @nameserver.failed_validation_reason + + NameserverRecordValidationJob.perform_now(domain_name: @domain.name) + @nameserver.reload + + assert_nil @nameserver.validation_datetime + assert @nameserver.validation_counter, 1 + assert @nameserver.failed_validation_reason.include? "Serial number for nameserver hostname **#{@nameserver.hostname}** doesn't present. SOA validation failed." + end + + def test_after_third_invalid_times_nameserver_should_be_invalid + mock_dns_response = OpenStruct.new + answer = OpenStruct.new + answer.some_field = '12343' + mock_dns_response.answer = [ answer ] + + Spy.on_instance_method(NameserverValidator, :setup_resolver).and_return(Dnsruby::Resolver.new) + Spy.on_instance_method(Dnsruby::Resolver, :query).and_return(mock_dns_response) + + assert_nil @nameserver.validation_datetime + assert_nil @nameserver.validation_counter + assert_nil @nameserver.failed_validation_reason + + 3.times do + NameserverRecordValidationJob.perform_now(domain_name: @domain.name) + end + + @nameserver.reload + assert_nil @nameserver.validation_datetime + assert @nameserver.validation_counter, 1 + assert @nameserver.failed_validation_reason.include? "Serial number for nameserver hostname **#{@nameserver.hostname}** doesn't present. SOA validation failed." + + assert @nameserver.nameserver_failed_validation? end end