From 848512cec70480caf3b6650c2bafa7fa42325552 Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Mon, 24 Jun 2013 07:06:09 +0100 Subject: 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. --- t/test-custodian-util-timespan.rb | 143 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100755 t/test-custodian-util-timespan.rb (limited to 't') 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 -- cgit v1.2.1