PageRenderTime 68ms CodeModel.GetById 39ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/gems/ip-0.2.2/test/test_ip.rb

https://github.com/AndreiMedvedsky/Katoomba
Ruby | 298 lines | 229 code | 67 blank | 2 comment | 11 complexity | 04a4deb2ce73026183ef96680bd3c09e MD5 | raw file
  1. begin
  2. require 'rubygems'
  3. gem 'test-unit'
  4. rescue LoadError => e
  5. end
  6. require 'test/unit'
  7. load 'lib/ip.rb'
  8. class CIDRTest < Test::Unit::TestCase
  9. def name
  10. return "IP::CIDR tests"
  11. end
  12. def test_init_generic
  13. assert_raise(IP::AddressException) { IP::CIDR.new(Hash.new) }
  14. assert_raise(IP::AddressException) { IP::CIDR.new("foomatic_wootmaster/32") }
  15. end
  16. def test_init_ipv6
  17. assert_raise(IP::AddressException) { IP::CIDR.new("F00F:DEAD:BEEF::") }
  18. assert_raise(IP::AddressException) { IP::CIDR.new("F00F:DEAD:BEEF::/") }
  19. assert_raise(IP::AddressException) { IP::CIDR.new("F00F:DEAD:BEEF::/asdf/32") }
  20. assert_raise(IP::AddressException) { IP::CIDR.new("F00F:DEAD:BEEF::/foomatic_wootmaster") }
  21. assert_raise(IP::AddressException) { IP::CIDR.new("F00F:DEAD:BEEF::/255.255.255.255") }
  22. cidr = nil
  23. assert_nothing_raised() { cidr = IP::CIDR.new("F00F:DEAD:BEEF::0001/128") }
  24. # this sort of indirectly tests the ipv6 address manipulation.
  25. assert_equal("F00F:DEAD:BEEF::1", cidr.ip.short_address, "ipv6 object constructed clean")
  26. assert_equal(128, cidr.mask, "mask is set properly")
  27. assert_equal("F00F:DEAD:BEEF::0001/128", cidr.cidr, "original CIDR preserved")
  28. end
  29. def test_init_ipv4
  30. assert_raise(IP::AddressException) { IP::CIDR.new("10.0.0.1") }
  31. assert_raise(IP::AddressException) { IP::CIDR.new("10.0.0.1/") }
  32. assert_raise(IP::AddressException) { IP::CIDR.new("10.0.0.1/asdf/32") }
  33. assert_raise(IP::AddressException) { IP::CIDR.new("10.0.0.1/foomatic_wootmaster") }
  34. assert_raise(IP::AddressException) { IP::CIDR.new("10.0.0.1/255") }
  35. cidr = nil
  36. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.1/32") }
  37. assert_equal("10.0.0.1", cidr.ip.ip_address, "ipv4 data integrity test #1")
  38. assert_equal(32, cidr.mask, "ipv4 data integrity test #2")
  39. assert_equal("10.0.0.1/32", cidr.cidr, "ipv4 data integrity test #3")
  40. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.1/255.255.255.255") }
  41. assert_equal("10.0.0.1", cidr.ip.ip_address, "ipv4 data integrity test #4")
  42. assert_equal(32, cidr.mask, "ipv4 data integrity test #5")
  43. assert_equal("10.0.0.1/255.255.255.255", cidr.cidr, "ipv4 data integrity test #6")
  44. end
  45. def test_netmasks
  46. cidr = nil
  47. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.1/32") }
  48. assert_equal(32, cidr.short_netmask, "ipv4 netmask test #1")
  49. assert_equal("255.255.255.255", cidr.long_netmask.ip_address, "ipv4 netmask test #2")
  50. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.1/255.255.255.248") }
  51. assert_equal(29, cidr.short_netmask, "ipv4 netmask test #3")
  52. assert_equal("255.255.255.248", cidr.long_netmask.ip_address, "ipv4 netmask test #4")
  53. assert_nothing_raised() { cidr = IP::CIDR.new("F00F:DEAD::/16") }
  54. assert_equal(16, cidr.short_netmask, "ipv6 has proper short netmask")
  55. assert_raise(IP::AddressException) { cidr.long_netmask }
  56. end
  57. def test_first_last
  58. cidr = nil
  59. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.2/24") }
  60. assert_equal("10.0.0.0", cidr.first_ip.ip_address, "ipv4 first/last test #1")
  61. assert_equal("10.0.0.255", cidr.last_ip.ip_address, "ipv4 first/last test #2")
  62. end
  63. def test_range
  64. cidr = nil
  65. assert_nothing_raised() { cidr = IP::CIDR.new("10.0.0.2/24") }
  66. assert_equal(1, cidr.range.find_all { |x| x.ip_address == "10.0.0.1" }.length, "ipv4 range test #1")
  67. assert_equal(0, cidr.range.find_all { |x| x.ip_address == "10.0.1.0" }.length, "ipv4 range test #2")
  68. assert_nothing_raised() { cidr = IP::CIDR.new("::0001/120") }
  69. assert_equal(1, cidr.range.find_all { |x| x.ip_address == "0:0:0:0:0:0:0:00FF" }.length, "ipv6 range test (included)")
  70. assert_equal(0, cidr.range.find_all { |x| x.ip_address ==" 0:0:0:0:0:0:0:0F00" }.length, "ipv6 range test (not included)")
  71. end
  72. def test_overlaps
  73. cidr, cidr2 = [nil, nil]
  74. assert_nothing_raised() do
  75. cidr = IP::CIDR.new("10.0.0.2/24")
  76. cidr2 = IP::CIDR.new("10.0.0.1/29")
  77. end
  78. assert(cidr.overlaps?(cidr2), "ipv4 overlaps test #1")
  79. assert_nothing_raised() { cidr2 = IP::CIDR.new("10.0.0.1/16") }
  80. assert(cidr2.overlaps?(cidr), "ipv4 overlaps test #2")
  81. assert(cidr.overlaps?(cidr2), "ipv4 overlaps test #3")
  82. assert_nothing_raised() do
  83. cidr = IP::CIDR.new("F00F:DEAD::/16")
  84. cidr2 = IP::CIDR.new("F00F:BEEF::/16")
  85. end
  86. assert(cidr.overlaps?(cidr2), "ipv6 #overlaps? reports correctly #1")
  87. assert(cidr2.overlaps?(cidr), "ipv6 #overlaps? reports correctly #2")
  88. end
  89. def test_includes
  90. cidr, ip = [nil, nil]
  91. assert_nothing_raised() do
  92. cidr = IP::CIDR.new("10.0.0.2/24")
  93. ip = IP::Address::IPv4.new("10.0.0.1")
  94. end
  95. assert(cidr.includes?(ip), "ipv4 #includes? reports correctly (included)")
  96. assert_nothing_raised() { ip = IP::Address::IPv4.new("10.0.1.0") }
  97. assert(!cidr.includes?(ip), "ipv4 #includes? reports correctly (not included)")
  98. assert_nothing_raised() do
  99. cidr = IP::CIDR.new("FF00::/16")
  100. ip = IP::Address::IPv6.new("FF00::DEAD")
  101. end
  102. assert(cidr.includes?(ip), "ipv6 #includes? reports correctly (included)")
  103. assert_nothing_raised() { ip = IP::Address::IPv6.new("F000::DEAD") }
  104. assert(!cidr.includes?(ip), "ipv6 #includes? reports correctly (not included)")
  105. end
  106. end
  107. class RangeTest < Test::Unit::TestCase
  108. def name
  109. return "IP::Range tests"
  110. end
  111. def test_range_generic
  112. assert_raise(IP::AddressException) { IP::Range[Hash.new, ""] }
  113. assert_raise(IP::AddressException) { IP::Range["", Hash.new] }
  114. assert_raise(IP::AddressException) { IP::Range[IP::Address::IPv6.new("F00F::"), IP::Address::IPv4.new("10.0.0.1")] }
  115. assert_raise(IP::AddressException) { IP::Range[IP::Address::IPv4.new("10.0.0.1"), IP::Address::IPv6.new("F00F::")] }
  116. end
  117. def test_range_ipv6
  118. assert_nothing_raised() do
  119. IP::Range["::0001", "::00F0"]
  120. IP::Range[IP::Address::IPv6.new("::0001"), IP::Address::IPv6.new("::00F0")]
  121. end
  122. range = nil
  123. assert_nothing_raised() { range = IP::Range["::0001", "::0010"] }
  124. assert_equal(1, range.find_all { |x| x.short_address == "::1" }.length, "ipv6 range check #1")
  125. assert_equal(1, range.find_all { |x| x.short_address == "::0010" }.length, "ipv6 range check #2")
  126. assert_equal(1, range.find_all { |x| x.short_address == "::000A" }.length, "ipv6 range check #3")
  127. assert_equal(0, range.find_all { |x| x.short_address == "::0011" }.length, "ipv6 range check #4")
  128. end
  129. def test_range_ipv4
  130. assert_nothing_raised() do
  131. IP::Range["10.0.0.1", "10.0.0.2"]
  132. IP::Range[IP::Address::IPv4.new("10.0.0.1"), IP::Address::IPv4.new("10.0.0.2")]
  133. end
  134. range = nil
  135. assert_nothing_raised() { range = IP::Range["10.0.0.1", "10.0.0.10"] }
  136. assert_equal(1, range.find_all { |x| x.ip_address == "10.0.0.1" }.length, "ipv4 range check #1")
  137. assert_equal(1, range.find_all { |x| x.ip_address == "10.0.0.10" }.length, "ipv4 range check #2")
  138. assert_equal(1, range.find_all { |x| x.ip_address == "10.0.0.7" }.length, "ipv4 range check #3")
  139. assert_equal(0, range.find_all { |x| x.ip_address == "10.0.0.11" }.length, "ipv4 range check #4")
  140. end
  141. end
  142. class IPv6AddressTest < Test::Unit::TestCase
  143. def name
  144. return "IP::Address::IPv6 tests"
  145. end
  146. def test_init
  147. assert_nothing_raised() do
  148. IP::Address::IPv6.new("0000:0000:0000:0000:0000:0000:0000:0001")
  149. IP::Address::IPv6.new("::0001")
  150. IP::Address::IPv6.new("FF00::")
  151. IP::Address::IPv6.new("FF00::0001")
  152. IP::Address::IPv6.new("FF00:BEEF::0001")
  153. IP::Address::IPv6.new("FF00::BEEF:0001")
  154. IP::Address::IPv6.new("::1.2.3.4")
  155. IP::Address::IPv6.new("FFFF::1.2.3.4")
  156. IP::Address::IPv6.new("FFFF:0000:0000:0000:0000:0000:1.2.3.4")
  157. end
  158. # now, the tests that should fail
  159. assert_raise(IP::AddressException) { IP::Address::IPv6.new("FF00:BEEF:") }
  160. assert_raise(IP::AddressException) { IP::Address::IPv6.new("FF00::BEEF::") }
  161. assert_raise(IP::AddressException) { IP::Address::IPv6.new("FF00::BEEF::DEAD") }
  162. assert_raise(IP::AddressException) { IP::Address::IPv6.new("HF00::0001") }
  163. assert_raise(IP::AddressException) { IP::Address::IPv6.new("1.2.3.4::0001") }
  164. end
  165. def test_accessors
  166. ip = nil
  167. assert_nothing_raised() { ip = IP::Address::IPv6.new("F00F::DEAD:BEEF") }
  168. assert_equal(ip[0], ip.octet(0), "ip[0] eq ip.octet(0)")
  169. assert_equal(61455, ip[0], "ip[0] is correct")
  170. assert_equal("F00F", ip.octet_as_hex(0), "octet converts to hex properly")
  171. assert_equal("F00F::DEAD:BEEF", ip.ip_address, '#ip_address preserves original address')
  172. end
  173. def test_address
  174. ip = nil
  175. assert_nothing_raised() { ip = IP::Address::IPv6.new("F00F::DEAD:BEEF") }
  176. assert_equal("F00F::DEAD:BEEF", ip.short_address, 'wildcard left - #short_address returns a compressed version')
  177. assert_equal("F00F:0:0:0:0:0:DEAD:BEEF", ip.long_address, 'wildcard left - #long_address returns the right thing')
  178. assert_nothing_raised() { ip = IP::Address::IPv6.new("F00F:DEAD::BEEF") }
  179. assert_equal("F00F:DEAD::BEEF", ip.short_address, 'wildcard right - #short_address returns a compressed version')
  180. assert_equal("F00F:DEAD:0:0:0:0:0:BEEF", ip.long_address, 'wildcard right - #long_address returns the right thing')
  181. assert_nothing_raised() { ip = IP::Address::IPv6.new("F00F:DEAD:0:0:0:0:0:BEEF") }
  182. assert_equal("F00F:DEAD::BEEF", ip.short_address, 'no wildcard - #short_address returns a compressed version')
  183. assert_equal("F00F:DEAD:0:0:0:0:0:BEEF", ip.long_address, 'no wildcard - #long_address returns the right thing')
  184. assert_nothing_raised() { ip = IP::Address::IPv6.new("F00F::DEAD:BEEF:0:0") }
  185. assert_equal("F00F:0:0:0:DEAD:BEEF::", ip.short_address, '#short_address returns a compressed version with wildcard @ right')
  186. end
  187. end
  188. class IPv4AddressTest < Test::Unit::TestCase
  189. def name
  190. return "IP::Address::IPv4 tests"
  191. end
  192. def test_init
  193. assert_raise(IP::AddressException) { IP::Address::IPv4.new(Hash.new) }
  194. assert_raise(IP::AddressException) { IP::Address::IPv4.new("asdf") }
  195. assert_raise(IP::AddressException) { IP::Address::IPv4.new("0.0.0") }
  196. assert_raise(IP::AddressException) { IP::Address::IPv4.new("256.255.255.255") }
  197. assert_raise(IP::AddressException) { IP::Address::IPv4.new("255.255.255.255aaaa") }
  198. assert_raise(IP::AddressException) { IP::Address::IPv4.new("255.255.255.") }
  199. end
  200. def test_accessor
  201. ip = nil
  202. assert_nothing_raised() { ip = IP::Address::IPv4.new("10.1.2.3") }
  203. assert_equal("10.1.2.3", ip.ip_address, "accessor test #1")
  204. assert_equal(10, ip.octets[0], "accessor test #2")
  205. assert_equal(3, ip.octets[3], "accessor test #3")
  206. assert_equal(nil, ip.octets[4], "accessor test #4")
  207. assert_equal(ip.octet(1), ip[1], "accessor test #5")
  208. assert_equal(1, ip[1], "accessor test #5")
  209. assert_raise(IP::BoundaryException) { ip[4] }
  210. end
  211. end
  212. class UtilTest < Test::Unit::TestCase
  213. def name
  214. return "IP::Address::Util tests"
  215. end
  216. def test_pack_unpack
  217. address = "10.0.0.1"
  218. assert_equal("10.0.0.1", IP::Address::Util.unpack(IP::Address::Util.pack(IP::Address::IPv4.new(address))).ip_address, "pack/unpack test")
  219. end
  220. def test_short_netmask
  221. ip = nil
  222. assert_nothing_raised() { ip = IP::Address::IPv4.new("255.255.255.255") }
  223. assert_equal(32, IP::Address::Util.short_netmask(ip), "Short Netmask Test #1")
  224. assert_nothing_raised() { ip = IP::Address::IPv4.new("255.255.255.248") }
  225. assert_equal(29, IP::Address::Util.short_netmask(ip), "Short Netmask Test #2")
  226. end
  227. def test_long_netmask
  228. assert_equal("255.255.255.255", IP::Address::Util.long_netmask_ipv4(32).ip_address, "Long Netmask Test #1")
  229. assert_equal("255.255.255.248", IP::Address::Util.long_netmask_ipv4(29).ip_address, "Long Netmask Test #2")
  230. end
  231. end