/test/tests/03_range_walker_test.rb
Ruby | 131 lines | 111 code | 4 blank | 16 comment | 27 complexity | 9fc2b8079285e667b9b912a8bb0543f4 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, BSD-3-Clause
- $:.push("../../lib")
- require 'rex'
- require 'rex/socket'
- require 'rex/socket/range_walker'
- describe Rex::Socket::RangeWalker do
- it "should have a num_ips attribute" do
- walker = Rex::Socket::RangeWalker.new("")
- walker.should respond_to("num_ips")
- walker.should respond_to("length")
- walker.num_ips.should == walker.length
- end
- it "should handle single ipv6 addresses" do
- walker = Rex::Socket::RangeWalker.new("::1")
- walker.should be_valid
- walker.length.should == 1
- end
- it "should handle ranges" do
- walker = Rex::Socket::RangeWalker.new("10.1.1.1-2")
- walker.should be_valid
- walker.length.should == 2
- walker.next_ip.should == "10.1.1.1"
- walker = Rex::Socket::RangeWalker.new("10.1-2.1.1-2")
- walker.should be_valid
- walker.length.should == 4
- walker = Rex::Socket::RangeWalker.new("10.1-2.3-4.5-6")
- walker.should be_valid
- walker.length.should == 8
- walker.should include("10.1.3.5")
- # Slow test on a 3.06 GHz proc
- # ruby 1.9, ~ 11 seconds
- # ruby 1.8.7, ~ 24 seconds
- # ruby 1.8.6, ~ 23 seconds
- #walker = Rex::Socket::RangeWalker.new("10.0-255.0-255.0-255")
- #walker.should be_valid
- #walker.length.should == 256 * 256 * 256
- end
- it "should default the lower bound of a range to 0" do
- walker = Rex::Socket::RangeWalker.new("10.1.3.-17")
- walker.should be_valid
- walker.length.should == 18
- walker = Rex::Socket::RangeWalker.new("10.1.3.-255")
- walker.should be_valid
- walker.length.should == 256
- end
- it "should default the upper bound of a range to 255" do
- walker = Rex::Socket::RangeWalker.new("10.1.3.254-")
- walker.should be_valid
- walker.length.should == 2
- end
- it "should handle lists" do
- #walker = Rex::Socket::RangeWalker.new("10.1.1.1,2")
- #walker.should be_valid
- #walker.length.should == 2
- walker = Rex::Socket::RangeWalker.new("10.1.1.1")
- walker.should be_valid
- walker.length.should == 1
- walker = Rex::Socket::RangeWalker.new("10.1.1.1,3")
- walker.should be_valid
- walker.length.should == 2
- walker.should_not include("10.1.1.2")
- end
- it "should handle ranges and lists together" do
- walker = Rex::Socket::RangeWalker.new("10.1.1.1-2,3")
- walker.should be_valid
- walker.length.should == 3
- walker = Rex::Socket::RangeWalker.new("10.1-2.1.1,2")
- walker.should be_valid
- walker.length.should == 4
- walker = Rex::Socket::RangeWalker.new("10.1,2.3,4.5,6")
- walker.length.should == 8
- end
- it "should handle cidr" do
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/31")
- walker.should be_valid
- walker.length.should == 2
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/30")
- walker.should be_valid
- walker.length.should == 4
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/29")
- walker.should be_valid
- walker.length.should == 8
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/28")
- walker.should be_valid
- walker.length.should == 16
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/27")
- walker.should be_valid
- walker.length.should == 32
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/26")
- walker.should be_valid
- walker.length.should == 64
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/25")
- walker.should be_valid
- walker.length.should == 128
- pending("Decide whether cidr_crack should include 0")
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/24")
- walker.should be_valid
- walker.length.should == 256
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/23")
- walker.should be_valid
- walker.length.should == 512
- end
- it "should handle ipv6 cidr" do
- walker = Rex::Socket::RangeWalker.new("::1/127")
- walker.should be_valid
- walker.length.should == 2
- walker = Rex::Socket::RangeWalker.new("::1/122")
- walker.should be_valid
- walker.length.should == 2 ** 6
- walker = Rex::Socket::RangeWalker.new("::1/116")
- walker.should be_valid
- walker.length.should == 2 ** 12
- end
- #it "should handle ipv6 ranges" do
- # pending("Need to define how this should be handled")
- # walker = Rex::Socket::RangeWalker.new("::1-::1:1")
- # walker.should be_valid
- # walker.length.should == 2 ** 16
- #end
- it "should yield all ips" do
- walker = Rex::Socket::RangeWalker.new("10.1.1.1,2,3")
- got = []
- walker.each { |ip|
- got.push ip
- }
- got.should == ["10.1.1.1", "10.1.1.2", "10.1.1.3"]
- end
- end