diff options
author | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-22 16:55:01 +0100 |
---|---|---|
committer | Patrick J Cherry <patrick@bytemark.co.uk> | 2011-07-22 16:55:01 +0100 |
commit | fd23821950f0562a8995735105cd31fdc6d55933 (patch) | |
tree | 967df2f5647803a6c46f4d52003b2231c1de72cb /test | |
parent | d3a3cfef9650b08f62db62bd7e86b673f9d77d0b (diff) |
* Rejigged configuration
* Added --test and --verbose flags for the server config
* Started proper test suite
* Config parsing now gives more sensible errors + backtrace
* Rejigged people and source lists
Diffstat (limited to 'test')
-rw-r--r-- | test/tc_mauve_alert.rb | 47 | ||||
-rw-r--r-- | test/tc_mauve_alert_group.rb | 47 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builder.rb | 72 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builders_alert_group.rb | 13 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builders_logger.rb | 59 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builders_notification_method.rb | 13 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builders_person.rb | 13 | ||||
-rw-r--r-- | test/tc_mauve_configuration_builders_server.rb | 143 | ||||
-rw-r--r-- | test/tc_mauve_people_list.rb | 0 | ||||
-rw-r--r-- | test/tc_mauve_source_list.rb | 78 | ||||
-rw-r--r-- | test/th_mauve_resolv.rb | 30 | ||||
-rw-r--r-- | test/ts_mauve.rb | 20 |
12 files changed, 535 insertions, 0 deletions
diff --git a/test/tc_mauve_alert.rb b/test/tc_mauve_alert.rb new file mode 100644 index 0000000..ef80424 --- /dev/null +++ b/test/tc_mauve_alert.rb @@ -0,0 +1,47 @@ +$:.unshift "../lib" + +require 'test/unit' +require 'mauve/alert' +require 'mauve/configuration' +require 'mauve/configuration_builder' +require 'th_mauve_resolv' +require 'pp' + +class TcMauveAlert < Test::Unit::TestCase + + def test_source_list + + config=<<EOF +source_list "test", %w(test-1.example.com) + +source_list "has_ipv4", "0.0.0.0/0" + +source_list "has_ipv6", "2000::/3" +EOF + + Mauve::Configuration.current = Mauve::ConfigurationBuilder.parse(config) + + a = Mauve::Alert.new + a.subject = "www.example.com" + + assert( a.in_source_list?("test") ) + assert_equal( %w(test has_ipv4).sort, a.source_lists.sort ) + + a.subject = "www2.example.com" + assert( a.in_source_list?("has_ipv6") ) + assert_equal( %w(has_ipv6 has_ipv4).sort, a.source_lists.sort ) + end + + + def test_summary + + a = Mauve::Alert.new + a.summary = "Free swap memory (MB) (memory_swap) is too low" + + assert_match(/memory_swap/, a.summary) + + end + + +end + diff --git a/test/tc_mauve_alert_group.rb b/test/tc_mauve_alert_group.rb new file mode 100644 index 0000000..12f25ef --- /dev/null +++ b/test/tc_mauve_alert_group.rb @@ -0,0 +1,47 @@ +$:.unshift "../lib" + +require 'test/unit' +require 'mauve/alert_group' +require 'th_mauve_resolv' +require 'pp' + +class TcMauveAlert < Test::Unit::TestCase + + def test_matches_alert + + alert = Mauve::Alert.new + + alert_group = Mauve::AlertGroup.new("test") + + alert_group.includes = Proc.new { true } + assert( alert_group.matches_alert?(alert) ) + + alert_group.includes = Proc.new { false } + assert( !alert_group.matches_alert?(alert) ) + + alert_group.includes = Proc.new { summary =~ /Free swap/ } + alert.summary = "Free swap memory (mem_swap) too low" + assert( alert_group.matches_alert?(alert) ) + alert.summary = "Free memory (mem_swap) too low" + assert( ! alert_group.matches_alert?(alert) ) + + alert_group.includes = Proc.new{ source == 'supportbot' } + alert.source = "supportbot" + assert( alert_group.matches_alert?(alert) ) + alert.source = "support!" + assert( ! alert_group.matches_alert?(alert) ) + + alert_group.includes = Proc.new{ /raid/i.match(summary) } + alert.summary = "RAID failure" + assert( alert_group.matches_alert?(alert) ) + alert.summary = "Disc failure" + assert( ! alert_group.matches_alert?(alert) ) + end + + + +end + + + + diff --git a/test/tc_mauve_configuration_builder.rb b/test/tc_mauve_configuration_builder.rb new file mode 100644 index 0000000..03b86ca --- /dev/null +++ b/test/tc_mauve_configuration_builder.rb @@ -0,0 +1,72 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'pp' +require 'mauve/configuration_builder' + +class TcMauveConfigurationBuildersPeopleAndSourceLists < Test::Unit::TestCase + + def setup + Log4r::Logger.new("Mauve").outputters = Log4r::Outputter.stdout + end + + def test_people_list + config =<<EOF +people_list "team sky", %w( + geraint + edvald + bradley + rigoberto + ben +) + +people_list "garmin-cervelo", %w( + thor + ryder + tyler + julian +) + +EOF + x = nil + assert_nothing_raised { x = Mauve::ConfigurationBuilder.parse(config) } + assert_equal(2, x.people_lists.keys.length) + assert_equal(["team sky","garmin-cervelo"].sort,x.people_lists.keys.sort) + assert_equal(%w(geraint edvald bradley rigoberto ben), x.people_lists["team sky"].list) + + end + + def test_duplicate_people_list + + config=<<EOF + +people_list "htc-highroad", + ["mark c", "mark r", "Lars"] + +people_list "htc-highroad", + %w(Bernie Danny Lars) + +EOF + x = nil + assert_nothing_raised { x = Mauve::ConfigurationBuilder.parse(config) } + assert_equal(1, x.people_lists.keys.length) + assert_equal(["mark c","mark r","Lars","Bernie","Danny"].sort, x.people_lists["htc-highroad"].list.sort) + end + + def test_source_list + config =<<EOF +source_list "sources", %w( + test-1.example.com + imaginary.host.example.com + 192.168.100.1/24 + *.imaginary.example.com +) +EOF + + x = nil + assert_nothing_raised { x = Mauve::ConfigurationBuilder.parse(config) } + + x.source_lists["sources"].resolve + end + +end diff --git a/test/tc_mauve_configuration_builders_alert_group.rb b/test/tc_mauve_configuration_builders_alert_group.rb new file mode 100644 index 0000000..a4104bb --- /dev/null +++ b/test/tc_mauve_configuration_builders_alert_group.rb @@ -0,0 +1,13 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'pp' +require 'mauve/configuration_builders/alert_group' + +class TcMauveConfigurationBuildersNotificationMethod < Test::Unit::TestCase + + def test_load + + end + +end diff --git a/test/tc_mauve_configuration_builders_logger.rb b/test/tc_mauve_configuration_builders_logger.rb new file mode 100644 index 0000000..8a4bc4e --- /dev/null +++ b/test/tc_mauve_configuration_builders_logger.rb @@ -0,0 +1,59 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'pp' +require 'mauve/configuration_builders/logger' + +class TcMauveConfigurationBuildersLogger < Test::Unit::TestCase + + def test_load + + config=<<EOF +logger { + default_format "%d [ %l ] [ %12.12c ] %m" + default_level WARN + + outputter "stdout" + + outputter ("file") { + trunc false + filename "test.conf" + level DEBUG + } + +} +EOF + + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + + # + # Check that we've got the correct things set + # + logger = nil + assert_nothing_raised { logger = Log4r::Logger.get("Mauve") } + assert_equal(2, logger.outputters.length) + + outputter = logger.outputters[0] + + assert_kind_of(Log4r::StdoutOutputter, outputter) + assert_equal("%d [ %l ] [ %12.12c ] %m", outputter.formatter.pattern ) + assert_equal(Log4r::WARN, outputter.level ) + + outputter = logger.outputters[1] + assert_kind_of(Log4r::FileOutputter, outputter) + assert_equal("%d [ %l ] [ %12.12c ] %m", outputter.formatter.pattern ) + assert_equal(Log4r::DEBUG, outputter.level ) + assert_equal(false, outputter.trunc ) + assert_equal("test.conf", outputter.filename ) + end + + def test_levels + # + # Make sure our levels match those of log4r. + # + %w(DEBUG WARN FATAL ERROR INFO).each do |l| + assert_equal(Log4r.const_get(l), Mauve::LoggerConstants.const_get(l)) + end + end + +end diff --git a/test/tc_mauve_configuration_builders_notification_method.rb b/test/tc_mauve_configuration_builders_notification_method.rb new file mode 100644 index 0000000..1ea1e08 --- /dev/null +++ b/test/tc_mauve_configuration_builders_notification_method.rb @@ -0,0 +1,13 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'pp' +require 'mauve/configuration_builders/notification_method' + +class TcMauveConfigurationBuildersNotificationMethod < Test::Unit::TestCase + + def test_load + + end + +end diff --git a/test/tc_mauve_configuration_builders_person.rb b/test/tc_mauve_configuration_builders_person.rb new file mode 100644 index 0000000..cb0b100 --- /dev/null +++ b/test/tc_mauve_configuration_builders_person.rb @@ -0,0 +1,13 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'pp' +require 'mauve/configuration_builders/person' + +class TcMauveConfigurationBuildersNotificationMethod < Test::Unit::TestCase + + def test_load + + end + +end diff --git a/test/tc_mauve_configuration_builders_server.rb b/test/tc_mauve_configuration_builders_server.rb new file mode 100644 index 0000000..4330610 --- /dev/null +++ b/test/tc_mauve_configuration_builders_server.rb @@ -0,0 +1,143 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'mauve/configuration_builders/server' + +class TcMauveConfigurationBuildersServer < Test::Unit::TestCase + + def test_server_params + hostname = "test.example.com" + database = "sqlite://./test.db" + initial_sleep = 314 + + config=<<EOF +server { + hostname "#{hostname}" + database "#{database}" + initial_sleep #{initial_sleep} +} +EOF + + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + + # + # Check that we've got the correct things set + # + s = Mauve::Server.instance + assert_equal(hostname, s.hostname) + assert_equal(database, s.database) + assert_equal(initial_sleep, s.initial_sleep) + end + + def test_heartbeat_params + destination = "test-backup.example.com" + summary = "Mauve blurgh!" + detail = "<p>A very interesting test.</p>" + raise_after = 1000 + send_every = 60 + + config=<<EOF +server { + heartbeat { + destination "#{destination}" + summary "#{summary}" + detail "#{detail}" + raise_after #{raise_after} + send_every #{send_every} + } +} +EOF + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + + h = Mauve::Heartbeat.instance + assert_equal(detail, h.detail) + assert_equal(summary, h.summary) + assert_equal(destination, h.destination) + assert_equal(raise_after, h.raise_at) + assert_equal(send_every, h.sleep_interval) + end + + def test_web_interface_params + ip = "::" + port = 12341 + document_root = "./" + base_url = "http://www.example.com" + session_secret = "asd2342" + sleep_interval = 32 + + config=<<EOF +server { + web_interface { + ip "#{ip}" + port #{port} + document_root "#{document_root}" + base_url "#{base_url}" + session_secret "#{session_secret}" + } +} +EOF + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + + assert_equal(ip, Mauve::HTTPServer.instance.ip) + assert_equal(port, Mauve::HTTPServer.instance.port) + assert_equal(document_root, Mauve::HTTPServer.instance.document_root) + assert_equal(base_url, Mauve::HTTPServer.instance.base_url) + assert_equal(session_secret, Mauve::HTTPServer.instance.session_secret) + end + + def test_listener_params + ip = "::" + port = 12341 + sleep_interval = 5678 + config=<<EOF +server { + listener { + ip "#{ip}" + port #{port} + sleep_interval #{sleep_interval} + } +} +EOF + + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + u = Mauve::UDPServer.instance + assert_equal(sleep_interval, u.sleep_interval) + assert_equal(IPAddr.new(ip), u.ip) + assert_equal(port, u.port) + end + + def test_notifier_params + sleep_interval = 23 + config=<<EOF +server { + notifier { + sleep_interval #{sleep_interval} + } +} +EOF + + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + n = Mauve::Notifier.instance + assert_equal(sleep_interval, n.sleep_interval) + end + + def test_processor_params + transmission_cache_expire_time = 3120 + sleep_interval = 1235 + + config=<<EOF +server { + processor { + transmission_cache_expire_time #{transmission_cache_expire_time} + sleep_interval #{sleep_interval} + } +} +EOF + + assert_nothing_raised { Mauve::ConfigurationBuilder.parse(config) } + pr = Mauve::Processor.instance + assert_equal(transmission_cache_expire_time, pr.transmission_cache_expire_time) + assert_equal(sleep_interval, pr.sleep_interval) + end + +end diff --git a/test/tc_mauve_people_list.rb b/test/tc_mauve_people_list.rb new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/tc_mauve_people_list.rb diff --git a/test/tc_mauve_source_list.rb b/test/tc_mauve_source_list.rb new file mode 100644 index 0000000..d07791f --- /dev/null +++ b/test/tc_mauve_source_list.rb @@ -0,0 +1,78 @@ +$:.unshift "../lib/" + +require 'test/unit' +require 'mauve/source_list' +require 'th_mauve_resolv' +require 'pp' + +class TcMauveSourceList < Test::Unit::TestCase + + def test_hostname_match + sl = Mauve::SourceList.new("test") + assert_equal("test", sl.label) + + list = %w(a.example.com b.example.com c.example.com) + assert_nothing_raised{ sl += list } + + assert_equal(list, sl.list) + + assert( sl.includes?("a.example.com") ) + assert( !sl.includes?("d.example.com") ) + end + + def test_regex_match + sl = Mauve::SourceList.new("test") + + assert_nothing_raised{ sl += %w([a-c].example.com *.[d-f].example.com g.example.com) } + + %w(a.example.com www.f.example.com www.a.example.com g.example.com www.other.a.example.com).each do |h| + assert( sl.includes?(h), "#{h} did not match") + end + + %w(d.example.com a.example.com.other d.example.com).each do |h| + assert( !sl.includes?(h), "#{h} matched when it shouldn't have") + end + end + + def test_ip_match + sl = Mauve::SourceList.new("test") + + assert_nothing_raised{ sl += %w(test-1.example.com 1.2.3.5 2001:1:2:3::5 1.2.4.0/24 2001:1:2:4::/64) } + + %w(1.2.3.4 2001:1:2:3::4 1.2.3.5 2001:1:2:3::5 test-2.example.com 1.2.4.23 2001:1:2:4::23 ).each do |h| + assert( sl.includes?(h), "#{h} did not match") + end + + %w(1.2.3.6 2001:1:2:3::6 test-3.example.com 1.2.5.23 2001:1:2:5::23 ).each do |h| + assert( !sl.includes?(h), "#{h} matched when it shouldn't have") + end + + end + + def test_uri_match + sl = Mauve::SourceList.new("test") + + assert_nothing_raised { sl += "test-1.example.com" } + + %w(https://www.example.com ftp://test-1.example.com http://1.2.3.4 https://[2001:1:2:3::4]).each do |uri| + assert( sl.includes?(uri), "#{uri} did not match") + end + + %w(http://www.google.com ftp://www2.example.com).each do |uri| + assert( !sl.includes?(uri), "#{uri} matched when it shouldn't have" ) + end + end + + def test_ip_crossmatch + sl = Mauve::SourceList.new("test") + assert_nothing_raised { sl += "test-1.example.com" } + assert( sl.includes?("www.example.com"), "www.example.com not found in #{sl.list}" ) + + sl = Mauve::SourceList.new("test") + assert_nothing_raised { sl += "2001::/3" } + assert( sl.includes?("www2.example.com"), "www2.example.com not found in #{sl.list}" ) + end + +end + + diff --git a/test/th_mauve_resolv.rb b/test/th_mauve_resolv.rb new file mode 100644 index 0000000..98b597b --- /dev/null +++ b/test/th_mauve_resolv.rb @@ -0,0 +1,30 @@ + +$:.unshift "../lib" + +require 'mauve/mauve_resolv' + +# +# This allows us to specify IPs for test hostnames, and also to fall back on +# regular DNS if that fails. +# + +module Mauve + class MauveResolv + class << self + alias_method :get_ips_for_without_testing, :get_ips_for + + def get_ips_for_with_testing(host) + lookup = { + "test-1.example.com" => %w(1.2.3.4 2001:1:2:3::4), + "test-2.example.com" => %w(1.2.3.5 2001:1:2:3::5), + "www.example.com" => %w(1.2.3.4), + "www2.example.com" => %w(1.2.3.5 2001:2::2) + } + lookup[host] || get_ips_for_without_testing(host) + end + + alias_method :get_ips_for, :get_ips_for_with_testing + end + end +end + diff --git a/test/ts_mauve.rb b/test/ts_mauve.rb new file mode 100644 index 0000000..27284a6 --- /dev/null +++ b/test/ts_mauve.rb @@ -0,0 +1,20 @@ + +$:.unshift "../lib" + +require 'test/unit' + +%w( +tc_mauve_configuration_builder.rb +tc_mauve_configuration_builders_alert_group.rb +tc_mauve_configuration_builders_logger.rb +tc_mauve_configuration_builders_notification_method.rb +tc_mauve_configuration_builders_person.rb +tc_mauve_configuration_builders_server.rb +tc_mauve_source_list.rb +tc_mauve_people_list.rb +tc_mauve_alert.rb +tc_mauve_alert_group.rb +).each do |s| + require s +end + |