From 7f34586780531a21ca7528099972762471ee892f Mon Sep 17 00:00:00 2001 From: James Lee Date: Thu, 29 Nov 2012 14:40:25 -0600 Subject: [PATCH] Add specs for several Opt* classes --- .../core/options/opt_address_range_spec.rb | 36 +++++++++++++++++++ spec/lib/msf/core/options/opt_bool_spec.rb | 19 ++++++++++ spec/lib/msf/core/options/opt_int_spec.rb | 19 ++++++++++ spec/lib/msf/core/options/opt_port_spec.rb | 15 ++++++++ spec/support/shared/examples/options.rb | 25 +++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 spec/lib/msf/core/options/opt_address_range_spec.rb create mode 100644 spec/lib/msf/core/options/opt_bool_spec.rb create mode 100644 spec/lib/msf/core/options/opt_int_spec.rb create mode 100644 spec/lib/msf/core/options/opt_port_spec.rb create mode 100644 spec/support/shared/examples/options.rb diff --git a/spec/lib/msf/core/options/opt_address_range_spec.rb b/spec/lib/msf/core/options/opt_address_range_spec.rb new file mode 100644 index 0000000000..a6a67b04c1 --- /dev/null +++ b/spec/lib/msf/core/options/opt_address_range_spec.rb @@ -0,0 +1,36 @@ + +require 'spec_helper' +require 'msf/core/option_container' + +describe Msf::OptAddressRange do + # Normalized values are just the original value for OptAddressRange + valid_values = [ + "192.0.2.0/24", + "192.0.2.0-255", + "192.0.2.0,1-255", + "192.0.2.*", + "192.0.2.0-192.0.2.255", + ].map{|a| [a, a]} + invalid_values = [ + # Too many dots + "192.0.2.0.0", + "192.0.2.0.0,1", + "192.0.2.0.0,1-2", + # CIDR apparently doesn't validate before sending to addr_atoi + #"192.0.2.0.0/24", + # Not enough dots + "192.0.2", + "192.0.2,1", + "192.0.2,1-2", + # CIDR apparently doesn't validate before sending to addr_atoi + #"192.0.2/24", # Not enough dots, cidr + # Can't mix ranges and CIDR + "192.0.2.0,1/24", + "192.0.2.0-1/24", + "192.0.2.0,1-2/24", + ] + + it_behaves_like "an option", valid_values, invalid_values +end + + diff --git a/spec/lib/msf/core/options/opt_bool_spec.rb b/spec/lib/msf/core/options/opt_bool_spec.rb new file mode 100644 index 0000000000..48d7dd1d71 --- /dev/null +++ b/spec/lib/msf/core/options/opt_bool_spec.rb @@ -0,0 +1,19 @@ + +require 'spec_helper' +require 'msf/core/option_container' + +describe Msf::OptBool do + valid_values = + [ + ["true", true ], + ["yes", true ], + ["1", true ], + ["false", false], + ["no", false], + ["0", false], + ] + invalid_values = + [ "yer mom", "123", "012" ] + it_behaves_like "an option", valid_values, invalid_values +end + diff --git a/spec/lib/msf/core/options/opt_int_spec.rb b/spec/lib/msf/core/options/opt_int_spec.rb new file mode 100644 index 0000000000..d8d5b70d6b --- /dev/null +++ b/spec/lib/msf/core/options/opt_int_spec.rb @@ -0,0 +1,19 @@ + +require 'spec_helper' +require 'msf/core/option_container' + +describe Msf::OptInt do + valid_values = [ + "1", "10", "0", + #"-1", # Negatives don't work + ].map{|v| [ v, v.to_i ] } + valid_values.push([ "0x10", 16 ]) + invalid_values = [ + #"yer mom", # to_i makes this 0 + #"0.1", # to_i makes this 0 + ] + + it_behaves_like "an option", valid_values, invalid_values +end + + diff --git a/spec/lib/msf/core/options/opt_port_spec.rb b/spec/lib/msf/core/options/opt_port_spec.rb new file mode 100644 index 0000000000..3fb64f554b --- /dev/null +++ b/spec/lib/msf/core/options/opt_port_spec.rb @@ -0,0 +1,15 @@ + +require 'spec_helper' +require 'msf/core/option_container' + +describe Msf::OptPort do + valid_values = [ "0", "1", "80", "65535" ].map{|v| + # This is bogus, but OptPort doesn't implement #normalize, so it + # falls back to just returning the original value + [ v, v ] + } + invalid_values = [ "yer mom", "0.1", "-1" "65536" ] + + it_behaves_like "an option", valid_values, invalid_values +end + diff --git a/spec/support/shared/examples/options.rb b/spec/support/shared/examples/options.rb new file mode 100644 index 0000000000..316546b2e8 --- /dev/null +++ b/spec/support/shared/examples/options.rb @@ -0,0 +1,25 @@ + +shared_examples_for "an option" do |valid_values, invalid_values| + subject do + described_class.new("name") + end + + context "with valid values" do + valid_values.each do |valid_value, normalized_value| + it "should be valid and normalize appropriately: #{valid_value}" do + subject.valid?(valid_value).should be_true + subject.normalize(valid_value).should == normalized_value + end + end + end + + context "with invalid values" do + invalid_values.each do |invalid_value| + it "should not be valid: #{invalid_value}" do + subject.valid?(invalid_value).should be_false + end + end + end + +end +