summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/custodian/parser.rb4
-rwxr-xr-xt/test-parser.rb36
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/custodian/parser.rb b/lib/custodian/parser.rb
index 7ed7a51..268dd3b 100755
--- a/lib/custodian/parser.rb
+++ b/lib/custodian/parser.rb
@@ -190,6 +190,10 @@ class MonitorConfig
end
+ if ( is_macro?( name ) )
+ raise ArgumentError, "The macro #{name} is already defined"
+ end
+
@MACROS[name] = val
end
diff --git a/t/test-parser.rb b/t/test-parser.rb
index c3e782f..f405433 100755
--- a/t/test-parser.rb
+++ b/t/test-parser.rb
@@ -57,7 +57,6 @@ class TestParser < Test::Unit::TestCase
assert_nothing_raised do
MonitorConfig.new("/dev/null" )
end
-
end
@@ -171,6 +170,41 @@ class TestParser < Test::Unit::TestCase
+ #
+ # Redefinining a macro should cause an error
+ #
+ def test_duplicate_macro
+
+
+ #
+ # Create the parser.
+ #
+ parser = MonitorConfig.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.