Skip to content

Commit

Permalink
Extended test cases for whois.iana.org
Browse files Browse the repository at this point in the history
  • Loading branch information
weppos committed Aug 12, 2010
1 parent a65b959 commit bb387d4
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 107 deletions.
29 changes: 16 additions & 13 deletions lib/whois/answer/parser/whois.iana.org.rb
Expand Up @@ -27,26 +27,26 @@ 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
end
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
Expand All @@ -58,21 +58,24 @@ 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

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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/whois/answer/parser/whois.nic.it.rb
Expand Up @@ -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
Expand Down
238 changes: 145 additions & 93 deletions test/whois/answer/parser/whois.iana.org_test.rb
Expand Up @@ -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
Expand All @@ -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()
Expand All @@ -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

0 comments on commit bb387d4

Please sign in to comment.