From d8d5e1bec989094abecd502c8540841bb9cf19f0 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 26 Feb 2016 10:08:14 -0500 Subject: [PATCH] include timer handling in test lib Change-Id: Ib67a5ea3e6fc1cfa9a34e0a30ee13f7116b2fd73 --- utils/Rtpengine.pm | 19 ++++++++++++++----- utils/test-basic.pl | 15 +++++++++++++++ utils/test3.pl | 27 --------------------------- 3 files changed, 29 insertions(+), 32 deletions(-) create mode 100644 utils/test-basic.pl delete mode 100644 utils/test3.pl diff --git a/utils/Rtpengine.pm b/utils/Rtpengine.pm index 4ab72a39d..e4092b3c4 100644 --- a/utils/Rtpengine.pm +++ b/utils/Rtpengine.pm @@ -66,7 +66,7 @@ sub answer { package Rtpengine::Test; sub new { - my ($class, $callback) = @_; + my ($class) = @_; my $self = {}; bless $self, $class; @@ -95,12 +95,11 @@ sub new { $self->{mux}->set_callback_object($self); $self->{media_port} = 2000; + $self->{timers} = []; $self->{rtpe} = Rtpengine->new('localhost', 2223); $self->{callid} = rand(); - $self->{callback} = $callback; - return $self; }; @@ -115,6 +114,12 @@ sub run { $self->{mux}->loop(); } +sub timer_once { + my ($self, $delay, $sub) = @_; + push(@{$self->{timers}}, { sub => $sub, when => time() + $delay }); + @{$self->{timers}} = sort {$a->{when} <=> $b->{when}} @{$self->{timers}}; +} + sub mux_input { my ($self, $mux, $fh, $input) = @_; @@ -124,9 +129,13 @@ sub mux_input { sub mux_timeout { my ($self, $mux, $fh) = @_; - $self->{callback}->(time()); - $mux->set_timeout($fh, 0.01); + + my $now = time(); + while (@{$self->{timers}} && $self->{timers}->[0]->{when} <= $now) { + my $t = shift(@{$self->{timers}}); + $t->{sub}->(); + } } diff --git a/utils/test-basic.pl b/utils/test-basic.pl new file mode 100644 index 000000000..fc0e7006d --- /dev/null +++ b/utils/test-basic.pl @@ -0,0 +1,15 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Rtpengine; + +my $r = Rtpengine::Test->new(); +my $a = $r->client(); +my $b = $r->client(); + +$r->timer_once(3, sub { $b->answer($a) }); + +$a->offer($b); + +$r->run(); diff --git a/utils/test3.pl b/utils/test3.pl deleted file mode 100644 index 05130a939..000000000 --- a/utils/test3.pl +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use Rtpengine; -use Time::HiRes qw(time); - -my ($r, $a, $b); - -my $offer = time(); -my $answer = $offer + 3; - -my $answer_done = 0; -my $cb = sub { - my ($now) = @_; - if ($now >= $answer && !$answer_done) { - $b->answer($a); - $answer_done = 1; - } -}; - -$r = Rtpengine::Test->new($cb); -$a = $r->client(); -$b = $r->client(); - -$a->offer($b); -$r->run();