#use Test::More qw( no_plan ); use Test::More tests => 11; use Schedule::RateLimiter; ok(1, 'Did the Schedule::RateLimiter module load?'); # If we made it this far, we're ok. ######################### # Blocking mode unspecified (default: blocking) my $throttle = Schedule::RateLimiter->new( seconds => 999999, iterations => 1 ); ok( $throttle->event( block => 0 ), 'Did the first event return success?' ); ok( ! $throttle->event( block => 0 ), 'Did the second event fail?' ); eval { local $SIG{ALRM}= sub{ die 'alarm1' }; alarm( 2 ); $throttle->event(); alarm( 0 ) }; ok( $@ =~ /alarm1/i, "Did an implicit blocking event hang?" ); eval { local $SIG{ALRM}= sub{ die 'alarm2' }; alarm( 2 ); $throttle->event( block => 1); alarm( 0 ) }; ok( $@ =~ /alarm2/i, "Did an explicit blocking event hang?" ); # Blocking mode specified to block. $throttle = Schedule::RateLimiter->new( seconds => 999999, iterations => 1, block => 1 ); ok( $throttle->event( block => 0 ), 'Did the first event return success?' ); ok( ! $throttle->event( block => 0 ), 'Did the second event fail?' ); eval { local $SIG{ALRM}= sub{ die 'alarm1' }; alarm( 2 ); $throttle->event(); alarm( 0 ) }; ok( $@ =~ /alarm1/i, "Did an implicit blocking event hang when blocking is explicitly on?" ); # Blocking mode specified to non-block. $throttle = Schedule::RateLimiter->new( seconds => 999999, iterations => 1, block => 0 ); ok( $throttle->event( block => 0 ), 'Did the first event return success?' ); ok( ! $throttle->event( block => 0 ), 'Did the second event fail?' ); eval { local $SIG{ALRM}= sub{ die 'alarm3' }; alarm( 10 ); $throttle->event(); alarm( 0 ) }; ok( $@ !~ /alarm3/i, "Did an implicit non-blocking event hang?" );