From bb387d4be72399605112ff4ef553bda264d86a25 Mon Sep 17 00:00:00 2001 From: Simone Carletti Date: Thu, 12 Aug 2010 16:00:56 +0200 Subject: [PATCH] Extended test cases for whois.iana.org --- lib/whois/answer/parser/whois.iana.org.rb | 29 ++- lib/whois/answer/parser/whois.nic.it.rb | 2 +- .../answer/parser/whois.iana.org_test.rb | 238 +++++++++++------- 3 files changed, 162 insertions(+), 107 deletions(-) diff --git a/lib/whois/answer/parser/whois.iana.org.rb b/lib/whois/answer/parser/whois.iana.org.rb index 9b56bd28e..b8c264e57 100644 --- a/lib/whois/answer/parser/whois.iana.org.rb +++ b/lib/whois/answer/parser/whois.iana.org.rb @@ -27,12 +27,11 @@ class Parser # # Parser for the whois.iana.org server. # - # class WhoisIanaOrg < Base include Ast - + property_supported :status do - if available? + @status ||= if available? :available else :registered @@ -40,13 +39,14 @@ class WhoisIanaOrg < Base end property_supported :available? do - @available ||= !!(content_for_scanner =~ /This query returned 0 objects.|organisation: Not assigned/) + @available ||= !!(content_for_scanner =~ /This query returned 0 objects|organisation: Not assigned/) end property_supported :registered? do - !available? + @registered ||= !available? end - + + property_supported :registrant_contact do @registrant_contact ||= contact("organisation", Whois::Answer::Contact::TYPE_REGISTRANT) end @@ -58,7 +58,8 @@ class WhoisIanaOrg < Base property_supported :technical_contact do @technical_contact ||= contact("technical", Whois::Answer::Contact::TYPE_TECHNICAL) end - + + property_supported :created_on do @created_on ||= node("dates") { |raw| Time.parse(raw["created"]) if raw.has_key? "created" } end @@ -66,13 +67,15 @@ class WhoisIanaOrg < Base property_supported :updated_on do @updated_on ||= node("dates") { |raw| Time.parse(raw["changed"]) if raw.has_key? "changed" } end - + property_not_supported :expires_on + property_supported :nameservers do @nameservers ||= nameserver("nameservers") || [] end + protected def parse @@ -95,24 +98,24 @@ def contact(element, type) :fax => raw["fax-no"], :email => raw["e-mail"] ) - + return nil if contact.organization == "Not assigned" - + contact end end def nameserver(element) nameservers = [] - + node(element) do |raw| nameservers_lines = (raw["nserver"] || "").split("\n") - nameservers_lines.each { |nameserver| + nameservers_lines.each { |nameserver| ns = nameserver.split(" ") nameservers << Answer::Nameserver.new( :name => ns[0], :ipv4 => ns[1], - :ipv6 => ns[2] + :ipv6 => ns[2] ) } end diff --git a/lib/whois/answer/parser/whois.nic.it.rb b/lib/whois/answer/parser/whois.nic.it.rb index 2cdb56473..6f1058aba 100644 --- a/lib/whois/answer/parser/whois.nic.it.rb +++ b/lib/whois/answer/parser/whois.nic.it.rb @@ -51,7 +51,7 @@ class WhoisNicIt < Base end property_supported :available? do - @available ||= node("Status") == "AVAILABLE" + @available ||= node("Status") == "AVAILABLE" end property_supported :registered? do diff --git a/test/whois/answer/parser/whois.iana.org_test.rb b/test/whois/answer/parser/whois.iana.org_test.rb index 2efaecd18..6ebc98409 100644 --- a/test/whois/answer/parser/whois.iana.org_test.rb +++ b/test/whois/answer/parser/whois.iana.org_test.rb @@ -8,120 +8,142 @@ def setup @host = "whois.iana.org" - @nameservers = - [Whois::Answer::Nameserver.new( - :name => "MAX.NRA.NATO.INT", - :ipv4 => "192.101.252.69", - :ipv6 => nil - ), - Whois::Answer::Nameserver.new( - :name => "MAXIMA.NRA.NATO.INT", - :ipv4 => "193.110.130.68", - :ipv6 => nil - ), - Whois::Answer::Nameserver.new( - :name => "NS.NAMSA.NATO.INT", - :ipv4 => "208.161.248.15", - :ipv6 => nil - ), - Whois::Answer::Nameserver.new( - :name => "NS.NC3A.NATO.INT", - :ipv4 => "195.169.116.6", - :ipv6 => nil - ) - ] - - @registrant = Whois::Answer::Contact.new( - :type => Whois::Answer::Contact::TYPE_REGISTRANT, - :name => nil, - :organization => "North Atlantic Treaty Organization", - :address => "Blvd Leopold III", - :city => "1110 Brussels", - :zip => "Brussels", - :country => "Belgium", - :phone => nil, - :fax => nil, - :email => nil - ) - - @admin = Whois::Answer::Contact.new( - :type => Whois::Answer::Contact::TYPE_ADMIN, - :name => "Aidan Murdock", - :organization => nil, - :address => "SHAPE", - :city => "NCSA/SDD/SAL", - :zip => "Casteau Hainaut 7010", - :country => "Belgium", - :phone => "+32 65 44 7244", - :fax => "+32 65 44 7221", - :email => "aidan.murdock@ncsa.nato.int" - ) - - @technical = Whois::Answer::Contact.new( - :type => Whois::Answer::Contact::TYPE_TECHNICAL, - :name => "Jack Smits", - :organization => nil, - :address => "SHAPE", - :city => "NCSA/SMD", - :zip => "Casteau Hainaut 7010", - :country => "Belgium", - :phone => "+32 65 44 7534", - :fax => "+32 65 44 7556", - :email => "jack.smits@ncsa.nato.int" - ) - + + @registrant = Whois::Answer::Contact.new( + :type => Whois::Answer::Contact::TYPE_REGISTRANT, + :name => nil, + :organization => "North Atlantic Treaty Organization", + :address => "Blvd Leopold III", + :city => "1110 Brussels", + :zip => "Brussels", + :country => "Belgium", + :phone => nil, + :fax => nil, + :email => nil + ) + + @admin = Whois::Answer::Contact.new( + :type => Whois::Answer::Contact::TYPE_ADMIN, + :name => "Aidan Murdock", + :organization => nil, + :address => "SHAPE", + :city => "NCSA/SDD/SAL", + :zip => "Casteau Hainaut 7010", + :country => "Belgium", + :phone => "+32 65 44 7244", + :fax => "+32 65 44 7221", + :email => "aidan.murdock@ncsa.nato.int" + ) + + @technical = Whois::Answer::Contact.new( + :type => Whois::Answer::Contact::TYPE_TECHNICAL, + :name => "Jack Smits", + :organization => nil, + :address => "SHAPE", + :city => "NCSA/SMD", + :zip => "Casteau Hainaut 7010", + :country => "Belgium", + :phone => "+32 65 44 7534", + :fax => "+32 65 44 7556", + :email => "jack.smits@ncsa.nato.int" + ) + end def test_status - assert_equal :registered, - @klass.new(load_part('/registered.txt')).status - assert_equal :available, - @klass.new(load_part('/available.txt')).status - assert_equal :available, - @klass.new(load_part('/not_assigned.txt')).status + parser = @klass.new(load_part('/registered.txt')) + expected = :registered + assert_equal expected, parser.status + assert_equal expected, parser.instance_eval { @status } + + parser = @klass.new(load_part('/available.txt')) + expected = :available + assert_equal expected, parser.status + assert_equal expected, parser.instance_eval { @status } + + parser = @klass.new(load_part('/not_assigned.txt')) + expected = :available + assert_equal expected, parser.status + assert_equal expected, parser.instance_eval { @status } end def test_available? - assert !@klass.new(load_part('/registered.txt')).available? - assert @klass.new(load_part('/available.txt')).available? - assert @klass.new(load_part('/not_assigned.txt')).available? + parser = @klass.new(load_part('/registered.txt')) + expected = false + assert_equal expected, parser.available? + assert_equal expected, parser.instance_eval { @available } + + parser = @klass.new(load_part('/available.txt')) + expected = true + assert_equal expected, parser.available? + assert_equal expected, parser.instance_eval { @available } + + parser = @klass.new(load_part('/not_assigned.txt')) + expected = true + assert_equal expected, parser.available? + assert_equal expected, parser.instance_eval { @available } end def test_registered? - assert @klass.new(load_part('/registered.txt')).registered? - assert !@klass.new(load_part('/available.txt')).registered? - assert !@klass.new(load_part('/not_assigned.txt')).registered? + parser = @klass.new(load_part('/registered.txt')) + expected = true + assert_equal expected, parser.registered? + assert_equal expected, parser.instance_eval { @registered } + + parser = @klass.new(load_part('/available.txt')) + expected = false + assert_equal expected, parser.registered? + assert_equal expected, parser.instance_eval { @registered } + + parser = @klass.new(load_part('/not_assigned.txt')) + expected = false + assert_equal expected, parser.registered? + assert_equal expected, parser.instance_eval { @registered } end def test_created_on - assert_equal Time.parse("1997-08-26"), - @klass.new(load_part('/registered.txt')).created_on - assert_equal nil, - @klass.new(load_part('/available.txt')).created_on - assert_equal nil, - @klass.new(load_part('/not_assigned.txt')).created_on + parser = @klass.new(load_part('/registered.txt')) + expected = Time.parse("1997-08-26") + assert_equal expected, parser.created_on + assert_equal expected, parser.instance_eval { @created_on } + + parser = @klass.new(load_part('/available.txt')) + expected = nil + assert_equal expected, parser.created_on + assert_equal expected, parser.instance_eval { @created_on } + + parser = @klass.new(load_part('/not_assigned.txt')) + expected = nil + assert_equal expected, parser.created_on + assert_equal expected, parser.instance_eval { @created_on } end def test_updated_on - assert_equal Time.parse("2009-11-10"), - @klass.new(load_part('/registered.txt')).updated_on - - assert_equal Time.parse("1999-09-27"), - @klass.new(load_part('/not_assigned.txt')).updated_on - - assert_equal nil, - @klass.new(load_part('/available.txt')).updated_on + parser = @klass.new(load_part('/registered.txt')) + expected = Time.parse("2009-11-10") + assert_equal expected, parser.updated_on + assert_equal expected, parser.instance_eval { @updated_on } + + parser = @klass.new(load_part('/available.txt')) + expected = nil + assert_equal expected, parser.updated_on + assert_equal expected, parser.instance_eval { @updated_on } + + parser = @klass.new(load_part('/not_assigned.txt')) + expected = Time.parse("1999-09-27") + assert_equal expected, parser.updated_on + assert_equal expected, parser.instance_eval { @updated_on } end def test_expires_on assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/registered.txt')).expires_on } assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/available.txt')).expires_on } assert_raise(Whois::PropertyNotSupported) { @klass.new(load_part('/not_assigned.txt')).expires_on } - end + def test_contacts parser = @klass.new(load_part('/registered.txt')) assert_equal @registrant, parser.registrant_contact @@ -140,11 +162,11 @@ def test_contacts end + def test_nameservers - parser = @klass.new(load_part('/registered.txt')) - expected = @nameservers - assert_equal expected, parser.nameservers - assert_equal expected, parser.instance_eval { @nameservers } + # parser = @klass.new(load_part('/registered.txt')) + # expected = %w( ... ) + # see test_nameservers_with_registered parser = @klass.new(load_part('/available.txt')) expected = %w() @@ -157,4 +179,34 @@ def test_nameservers assert_equal expected, parser.instance_eval { @nameservers } end + def test_nameservers_with_registered + nameservers = [ + Whois::Answer::Nameserver.new( + :name => "MAX.NRA.NATO.INT", + :ipv4 => "192.101.252.69", + :ipv6 => nil + ), + Whois::Answer::Nameserver.new( + :name => "MAXIMA.NRA.NATO.INT", + :ipv4 => "193.110.130.68", + :ipv6 => nil + ), + Whois::Answer::Nameserver.new( + :name => "NS.NAMSA.NATO.INT", + :ipv4 => "208.161.248.15", + :ipv6 => nil + ), + Whois::Answer::Nameserver.new( + :name => "NS.NC3A.NATO.INT", + :ipv4 => "195.169.116.6", + :ipv6 => nil + ) + ] + + parser = @klass.new(load_part('/registered.txt')) + expected = nameservers + assert_equal expected, parser.nameservers + assert_equal expected, parser.instance_eval { @nameservers } + end + end \ No newline at end of file