diff options
author | Steve Kemp <steve@steve.org.uk> | 2013-06-24 07:06:09 +0100 |
---|---|---|
committer | Steve Kemp <steve@steve.org.uk> | 2013-06-24 07:06:09 +0100 |
commit | 48b454593a342e16a1e64849ea69b4f57f8afb5d (patch) | |
tree | bd641fb75e68abd6603accb47de68ce49550d1fd /t | |
parent | ddb1be3d65022bb0bf21327bddca62f6a38c3e07 (diff) |
Added Custodian::Util::TimeSpan
This class is used to determine whether an "hour" is within
a given hour-span. e.g. To cope with:
foo must run ping except between 04-06 otherwise 'alert'.
This updates issue #4551.
Diffstat (limited to 't')
-rwxr-xr-x | t/test-custodian-util-timespan.rb | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/t/test-custodian-util-timespan.rb b/t/test-custodian-util-timespan.rb new file mode 100755 index 0000000..200b8e1 --- /dev/null +++ b/t/test-custodian-util-timespan.rb @@ -0,0 +1,143 @@ +#!/usr/bin/ruby1.8 -I./lib/ -I../lib/ + + +require 'custodian/util/timespan' +require 'test/unit' + + + +# +# Unit test for our time-span code. +# +class TestTimeSpanUtil < Test::Unit::TestCase + + # + # Create the test suite environment: NOP. + # + def setup + end + + # + # Destroy the test suite environment: NOP. + # + def teardown + end + + # + # Ensure we received errors if the start/end hours are under/over 24 + # + def test_excessive_hours + + # + # Valid hours are 0-23, inclusive. Test outside that range. + # + for i in 24..100 + assert_raise ArgumentError do + result = Custodian::Util::TimeSpan.inside?( i, 2 ) + end + + assert_raise ArgumentError do + result = Custodian::Util::TimeSpan.inside?( 1, i ) + end + end + + # + # Now negative values. + # + for i in 1..50 + assert_raise ArgumentError do + result = Custodian::Util::TimeSpan.inside?( 1, ( -1 * i ) ) + end + assert_raise ArgumentError do + result = Custodian::Util::TimeSpan.inside?( ( -1 * i ), 1 ) + end + end + + end + + + # + # Test simple cases where the period is positive. + # + def test_simple_cases + # 8am-5pm + assert(Custodian::Util::TimeSpan.inside?( "8am", "5am", 12 )) + assert(Custodian::Util::TimeSpan.inside?( 8, 17, 12 )) + + end + + # + # Test cases which involve the wrap-around over midnight. + # + def test_midnight_cases + + # 9pm-2am + assert(Custodian::Util::TimeSpan.inside?( "9pm", "2am", 22 )) + assert(Custodian::Util::TimeSpan.inside?( "9pm", "2am", "10pm" )) + assert(Custodian::Util::TimeSpan.inside?( 21, 2, 22 )) + assert(Custodian::Util::TimeSpan.inside?( 21, 2, "10pm" )) + + # 10pm-3am + assert(Custodian::Util::TimeSpan.inside?( "10pm", "3am", 22 )) + assert(Custodian::Util::TimeSpan.inside?( 22, 3, 22 )) + assert(Custodian::Util::TimeSpan.inside?( 22, 3, 22 )) + assert(Custodian::Util::TimeSpan.inside?( 22, 3, "10pm" )) + + # 11pm-5am + assert(Custodian::Util::TimeSpan.inside?( "11pm", "5am", 23 )) + assert(Custodian::Util::TimeSpan.inside?( 23, 5, 23 )) + assert(Custodian::Util::TimeSpan.inside?( "11pm", "5am", "11pm" )) + + # midnight-3am + assert( Custodian::Util::TimeSpan.inside?( "0", "3am", 1 )) + assert( Custodian::Util::TimeSpan.inside?( "0", "3am", "1am" )) + end + + + # + # The time-spans listed are inclusive. + # + # Test the boundaries. + # + def test_inclusive + + open = "4pm" + close = "6pm" + + # The hours + the middle should be inside + assert( Custodian::Util::TimeSpan.inside?( open, close, 16 ) ) + assert( Custodian::Util::TimeSpan.inside?( open, close, "4pm" ) ) + + assert( Custodian::Util::TimeSpan.inside?( open, close, 17 ) ) + assert( Custodian::Util::TimeSpan.inside?( open, close, "5pm" ) ) + + assert( Custodian::Util::TimeSpan.inside?( open, close, 18 ) ) + assert( Custodian::Util::TimeSpan.inside?( open, close, "6pm" ) ) + + + # + # The preceeding + successive hours shouldn't be. + # + assert( ! Custodian::Util::TimeSpan.inside?( open, close, 15 ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, 19 ) ) + + # + # That is true for the string-versions too + # + assert( ! Custodian::Util::TimeSpan.inside?( open, close, "3pm" ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, "7pm" ) ) + + + # + # Random hours should be outside too. + # + assert( ! Custodian::Util::TimeSpan.inside?( open, close, 3 ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, "3am" ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, 7 ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, "7am" ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, 9 ) ) + assert( ! Custodian::Util::TimeSpan.inside?( open, close, "9am" ) ) + + end + +end |