/spec/lib/rex/socket/range_walker_spec.rb
Ruby | 104 lines | 91 code | 10 blank | 3 comment | 20 complexity | caf219d5d0f21d738691eea7ba3b7e74 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0, LGPL-2.1, GPL-2.0, MIT
- 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")
- 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 take * to mean 0-255" do
- walker = Rex::Socket::RangeWalker.new("10.1.3.*")
- walker.should be_valid
- walker.length.should == 256
- walker.next_ip.should == "10.1.3.0"
- walker.should include("10.1.3.255")
- walker = Rex::Socket::RangeWalker.new("10.1.*.3")
- walker.should be_valid
- walker.length.should == 256
- walker.next_ip.should == "10.1.0.3"
- walker.should include("10.1.255.3")
- 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 produce the same ranges with * and 0-255" do
- a = Rex::Socket::RangeWalker.new("10.1.3.*")
- b = Rex::Socket::RangeWalker.new("10.1.3.0-255")
- a.ranges.should eq(b.ranges)
- 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
- 31.downto 16 do |bits|
- walker = Rex::Socket::RangeWalker.new("10.1.1.1/#{bits}")
- walker.should be_valid
- walker.length.should == (2**(32-bits))
- end
- 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