summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorSteve Kemp <steve@steve.org.uk>2012-11-23 10:11:48 +0000
committerSteve Kemp <steve@steve.org.uk>2012-11-23 10:11:48 +0000
commit669e0fa3c0d1570ca4d212bd27ead2fa3b424eec (patch)
treeeced6ec5071646d9223dddffffeee9f8b6dea88d /t
parentbfe7d82ce0f9a864c53c53697992553f444c614d (diff)
Removed the old test cases and added new ones.:wq
Diffstat (limited to 't')
-rwxr-xr-xt/test-custodian-parser.rb141
-rwxr-xr-xt/test-parser.rb531
2 files changed, 141 insertions, 531 deletions
diff --git a/t/test-custodian-parser.rb b/t/test-custodian-parser.rb
new file mode 100755
index 0000000..8fe794e
--- /dev/null
+++ b/t/test-custodian-parser.rb
@@ -0,0 +1,141 @@
+#!/usr/bin/ruby1.8 -I./lib/ -I../lib/
+
+
+require 'test/unit'
+require 'custodian/parser'
+
+
+
+
+#
+# Unit test for our parser.
+#
+class TestCustodianParser < Test::Unit::TestCase
+
+ #
+ # Create the test suite environment: NOP.
+ #
+ def setup
+ end
+
+ #
+ # Destroy the test suite environment: NOP.
+ #
+ def teardown
+ end
+
+
+
+
+
+
+ #
+ # Test we can create a new parser object - specifically
+ # that it throws exceptions if it is not given a filename
+ # that exists.
+ #
+ def test_init
+
+ #
+ # Constructor
+ #
+ assert_nothing_raised do
+ Custodian::Parser.new()
+ end
+ end
+
+
+
+ #
+ # Test that we can define macros.
+ #
+ def test_macros_lines
+
+ parser = Custodian::Parser.new()
+
+ #
+ # Input text
+ #
+ text =<<EOF
+FOO is kvm1.vm.bytemark.co.uk.
+TEST is kvm2.vm.bytemark.co.uk.
+EOF
+
+ #
+ # Test the parser with this text
+ #
+ parser.parse_lines( text )
+
+
+ #
+ # We should now have two macros.
+ #
+ macros = parser.macros
+ assert( ! macros.empty? )
+ assert( macros.size() == 2 )
+ end
+
+
+
+ #
+ # Test that we can define macros.
+ #
+ def test_macros_array
+
+ parser = Custodian::Parser.new()
+
+ #
+ # Input text
+ #
+ text = Array.new()
+ text.push( "FOO is kvm1.vm.bytemark.co.uk." );
+ text.push( "FOO2 is kvm2.vm.bytemark.co.uk." );
+
+ #
+ # Test the parser with this text
+ #
+ parser.parse_lines( text )
+
+
+ #
+ # We should now have two macros.
+ #
+ macros = parser.macros
+ assert( ! macros.empty? )
+ assert( macros.size() == 2 )
+ end
+
+
+
+ #
+ # Duplicate macros are a bug
+ #
+ def test_duplicate_macros
+
+ parser = Custodian::Parser.new()
+
+ #
+ # Input text
+ #
+ text = Array.new()
+ text.push( "FOO is kvm1.vm.bytemark.co.uk." );
+ text.push( "FOO is kvm2.vm.bytemark.co.uk." );
+
+ #
+ # Test the parser with this text
+ #
+ assert_raise ArgumentError do
+ parser.parse_lines( text )
+ end
+
+
+ #
+ # We should now have one macros.
+ #
+ macros = parser.macros
+ assert( ! macros.empty? )
+ assert( macros.size() == 1 )
+ end
+
+
+end
diff --git a/t/test-parser.rb b/t/test-parser.rb
deleted file mode 100755
index b98534d..0000000
--- a/t/test-parser.rb
+++ /dev/null
@@ -1,531 +0,0 @@
-#!/usr/bin/ruby1.8 -I./lib/ -I../lib/
-
-
-require 'test/unit'
-require 'custodian/parser'
-
-
-
-
-#
-# Unit test for our parser.
-#
-class TestParser < Test::Unit::TestCase
-
- #
- # Create the test suite environment: NOP.
- #
- def setup
- end
-
- #
- # Destroy the test suite environment: NOP.
- #
- def teardown
- end
-
-
-
-
-
-
- #
- # Test we can create a new parser object - specifically
- # that it throws exceptions if it is not given a filename
- # that exists.
- #
- def test_init
-
- #
- # Missing filename -> Exception
- #
- assert_raise ArgumentError do
- Custodian::Parser.new()
- end
-
- #
- # Filename points to file that doesn't exist -> Exception
- #
- assert_raise ArgumentError do
- Custodian::Parser.new("/file/doesn't/exist")
- end
-
- #
- # File that exists -> No Exception.
- #
- assert_nothing_raised do
- Custodian::Parser.new("/dev/null" )
- end
- end
-
-
-
-
-
-
- #
- # Test that we can define macros.
- #
- def test_macros
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # With nothing loaded we should have zero macros - so the
- # count of our macros hash should be zero
- #
- macros = parser.macros
- assert( macros.empty? )
- assert( macros.size() == 0 )
-
-
- #
- # Define a macro:
- #
- # FOO => "kvm1.vm.bytemark.co.uk", "kvm2.vm.bytemark.co.uk".
- #
- # Before defining it double-check it doesn't exist
- #
- assert( !(parser.is_macro?( "FOO" )) )
-
- #
- # Add it.
- #
- ret = parser.define_macro( "FOO is kvm1.vm.bytemark.co.uk and kvm2.vm.bytemark.co.uk." )
-
- #
- # The return value should be an array containing the values we added.
- #
- # assert( ret.class.to_s == "Array" )
- # assert( ret.size == 2 )
- # assert( ret.include?( "kvm1.vm.bytemark.co.uk" ) )
- # assert( ret.include?( "kvm2.vm.bytemark.co.uk" ) )
-
-
- #
- # OK we should now have a single macro defined.
- #
- macros = parser.macros
- assert( macros.size() == 1 )
-
-
- #
- # The macro name "FOO" should exist
- #
- assert( parser.is_macro?( "FOO" ) )
-
- #
- # The contents of the FOO macro should have the value we expect
- #
- val = parser.get_macro_targets( "FOO" )
- assert( val.size() == 2 )
- assert( val.include?( "kvm1.vm.bytemark.co.uk" ) )
- assert( val.include?( "kvm2.vm.bytemark.co.uk" ) )
-
-
- #
- # Add a macro, using the parser directly.
- #
- # Before defining it double-check it doesn't exist
- #
- assert( !(parser.is_macro?( "BAR" )) )
-
- #
- # Add it.
- #
- ret = parser.parse_line( "BAR is example.vm.bytemark.co.uk and www.bytemark.co.uk." )
-
- #
- # The return value should be an array containing the values
- # we added.
- #
- # assert( ret.class.to_s == "Array" )
- # assert( ret.size == 2 )
- # assert( ret.include?( "example.vm.bytemark.co.uk" ) )
- # assert( ret.include?( "www.bytemark.co.uk" ) )
-
-
- #
- # OK we should now have two macros defined.
- #
- macros = parser.macros
- assert( macros.size() == 2 )
-
- #
- # The macro name "BAR" should exist
- #
- assert( parser.is_macro?( "BAR" ) )
-
- #
- # The contents of the BAR macro should have the value we expect
- #
- val = parser.get_macro_targets( "BAR" )
- assert( val.size() == 2 )
- assert( val.include?( "example.vm.bytemark.co.uk" ) )
- assert( val.include?( "www.bytemark.co.uk" ) )
- end
-
-
-
-
-
- #
- # Redefinining a macro should cause an error
- #
- def test_duplicate_macro
-
-
- #
- # Create the parser.
- #
- parser = Custodian::Parser.new("/dev/null" )
-
-
- #
- # With nothing loaded we should have zero macros - so the
- # count of our macros hash should be zero
- #
- macros = parser.macros
- assert( macros.empty? )
- assert( macros.size() == 0 )
-
-
- #
- # Define a macro twice. The first will work, the second will fail
- #
- assert_nothing_raised do
- parser.define_macro( "FOO is kvm1.vm.bytemark.co.uk and kvm2.vm.bytemark.co.uk." )
- end
-
- assert_raise ArgumentError do
- parser.define_macro( "FOO is kvm1.vm.bytemark.co.uk and kvm2.vm.bytemark.co.uk." )
- end
- end
-
-
-
-
- #
- # Test that we can define macros with only a single host.
- #
- def test_short_macros
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # With nothing loaded we should have zero macros - so the
- # count of our macros hash should be zero
- #
- macros = parser.macros
- assert( macros.empty? )
- assert( macros.size() == 0 )
-
-
- #
- # Define a macro:
- #
- # FOO => "kvm1.vm.bytemark.co.uk".
- #
- # Before defining it double-check it doesn't exist
- #
- assert( !(parser.is_macro?( "FOO" )) )
-
- #
- # Add it.
- #
- ret = parser.define_macro( "FOO is kvm1.vm.bytemark.co.uk." )
-
- #
- # The return value should be an array containing the values we added.
- #
- # assert( ret.class.to_s == "Array" )
- # assert( ret.size == 1 )
- # assert( ret.include?( "kvm1.vm.bytemark.co.uk" ) )
-
-
- #
- # OK we should now have a single macro defined.
- #
- macros = parser.macros
- assert( macros.size() == 1 )
-
- #
- # Add a macro, using the parser directly.
- #
- # Before defining it double-check it doesn't exist
- #
- assert( !(parser.is_macro?( "BAR_HOSTS" )) )
-
- #
- # Add it.
- #
- ret = parser.parse_line( "BAR_HOSTS are example.vm.bytemark.co.uk." )
-
- #
- # The return value should be an array containing the single value
- # we added.
- #
- # assert( ret.class.to_s == "Array" )
- # assert( ret.size == 1 )
- # assert( ret.include?( "example.vm.bytemark.co.uk" ) )
-
- #
- # OK we should now have two macros defined.
- #
- macros = parser.macros
- assert( macros.size() == 2 )
-
- #
- # The macro name "BAR_HOSTS" should exist
- #
- assert( parser.is_macro?( "BAR_HOSTS" ) )
-
- #
- # The contents of the BAR macro should have the single value we expect.
- #
- val = parser.get_macro_targets( "BAR_HOSTS" )
- assert( val.size() == 1 )
- assert( val.include?( "example.vm.bytemark.co.uk" ) )
- end
-
-
-
-
-
-
- #
- # We found a bug in our live code because macros didn't get expanded
- # unless they matched the regular expression "[A-Z_]" - here we test
- # that this bug is fixed.
- #
- # (The issue being that several of our macros have numeric digits in
- # their names.)
- #
- def test_misc_macro
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # With nothing loaded we should have zero macros - so the
- # count of our macros hash should be zero
- #
- macros = parser.macros
- assert( macros.empty? )
- assert( macros.size() == 0 )
-
-
- #
- # Define a new macro, and ensure it is now present
- #
- parser.parse_line( "FRONTLINESTAGING29 is 89.16.186.138 and 89.16.186.139 and 89.16.186.148." )
- macros = parser.macros
- assert( macros.size() == 1 )
-
-
- #
- # Test that we got a suitable value when lookup up the contents
- # of that newly defined macro.
- #
- values = parser.get_macro_targets( "FRONTLINESTAGING29" )
- assert(values.class.to_s == "Array" )
-
-
- #
- # Parse another line
- #
- parser.parse_line( "SWML_HOSTS is 212.110.191.9.")
-
-
- #
- # Ensure our macro-list is now bigger.
- #
- macros = parser.macros
- assert( macros.size() == 2 )
-
- #
- # And ensure the macro expansion is correct.
- #
- values = parser.get_macro_targets( "SWML_HOSTS" )
- assert(values.class.to_s == "Array" )
- end
-
-
-
-
-
- #
- # Test that we can define tests which expand macros successfully.
- #
- def test_adding_tests
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # Adding a test should return an array - an array of hashes.
- #
- ret = parser.parse_line( "example.vm.bytemark must run ssh otherwise 'I hate you'." )
- assert_equal( ret.class.to_s, "Array" )
- assert_equal( ret.size(), 1 )
-
- #
- # Define a macro - such that a single parsed line will become multiple
- # tests.
- #
- parser.parse_line( "MACRO is kvm1.vm.bytemark.co.uk and kvm1.vm.bytemark.co.uk and kvm3.vm.bytemark.co.uk." )
- assert( parser.is_macro?( "MACRO") )
-
- #
- # Now add a ping-test against that macro
- #
- ret = parser.parse_line( "MACRO must run ping otherwise 'ping failure'." )
-
- #
- # The resulting array should contain three entries.
- #
- assert_equal( ret.class.to_s, "Array" )
- assert_equal( ret.size(), 3 )
-
- #
- # Now add more alerts, and ensure we find something sane:
- #
- # 1. The addition should be arrays of hashes.
- #
- # 2. The addition should have the correct test-type
- #
- %w( dns ftp http https jabber ldap ping rsync ssh smtp ).each do |name|
-
- ret = parser.parse_line( "MACRO must run #{name} otherwise '#{name} failure'." )
-
- #
- # The resulting array should contain three JSON strings.
- #
- #assert_equal( ret.class.to_s, "Array" )
- #assert_equal( ret.size(),3 )
- end
- end
-
-
-
-
-
- #
- # Most services define a default port. Ensure that is correct.
- #
- def test_default_ports
-
- expected = {
- "dns" => 53,
- "ftp" => 21,
- "ldap" => 389,
- "jabber" => 5222,
- "http" => 80,
- "rsync" => 873,
- "smtp" => 25,
- "ssh" => 22,
- }
-
-
- end
-
-
- #
- # Comment-handling
- #
- def test_adding_comments
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # Adding comments should result in a nil return value.
- #
- assert( parser.parse_line( "# This is a comment" ).nil? )
- assert( parser.parse_line( "\n" ).nil? )
- assert( parser.parse_line( "" ).nil? )
- assert( parser.parse_line( nil ).nil? )
- end
-
-
-
-
-
- #
- # Test that an exception is raised on a malformed line.
- #
- def test_bogus
-
- parser = Custodian::Parser.new("/dev/null" )
-
-
- assert_nothing_raised do
- parser.parse_line( "# This is a test" )
- parser.parse_line( "foo must run ssh." )
- end
-
- assert_raise ArgumentError do
- parser.parse_line( "steve is bored." )
- end
-
- assert_raise ArgumentError do
- parser.parse_line( "steve.com must ." )
- end
-
- end
-
-
-
- #
- # Test we can add tests which don't contain a trailing period.
- #
- def test_short_test
-
- parser = Custodian::Parser.new("/dev/null" )
-
- #
- # Adding a simple test must work - no trailing whitespace required
- # after the test-type.
- #
- ret = parser.parse_line( "foo.vm.bytemark.co.uk must run ssh." )
- assert( ret )
- assert( ret.class.to_s == "Array" )
- assert( ret.size == 1 )
-
- #
- # Adding a simple test must work - no trailing period required
- # after the test-type.
- #
- ret = parser.parse_line( "foo.vm.bytemark.co.uk must run ssh" )
- assert( ret )
- assert( ret.class.to_s == "Array" )
- assert( ret.size == 1 )
- end
-
-
-
-
- #
- # Test that each test has the hostname in it.
- #
- def test_alert_expansion
- end
-
-
- #
- # Test the potential security-hole for ping-tests
- #
- def test_ping_security_hole
-
-
- parser = Custodian::Parser.new("/dev/null" )
-
-# assert_raise ArgumentError do
-# parser.parse_line( "$(/tmp/exploit) must ping ." )
-# end
-
- assert_nothing_raised do
- parser.parse_line( "test.example.vm.bytemark.co.uk must ping ." )
- end
-
- end
-
-
-end