Updates to the random_error sample plugin from David Nicol

Signed-off-by: Robert <rspier@pobox.com>
This commit is contained in:
Robert 2009-03-14 00:31:18 -07:00 committed by Ask Bjørn Hansen
parent 8e5bd5aa69
commit 6365e3a66e

View File

@ -30,16 +30,31 @@ sub register {
sub NEXT() { DECLINED } sub NEXT() { DECLINED }
sub random_fail { sub random_fail {
my $self = shift; my $fpct = $_[0]->qp->connection->notes('random_fail_%');
my $fpct = $self->qp->connection->notes('random_fail_%');
rand(100) > ($fpct / 6) and return NEXT; =head calculating the probability of failure
There are six tests a message must pass to reach the queueing stage, and we wish to
provide random failure for each one, with the combined probability being out
configuration argument. So we want to solve this equation:
(1-x) ** 6 = ( 1 - input_number )
or
x = 1 - ( (1 - input_number ) ** (1/6) )
=cut
my $successp = 1 - ($fpct / 100);
$_[0]->log(LOGINFO, "to fail, rand(1) must be more than ". ($successp ** (1 / 6)) );
rand(1) < ($successp ** (1 / 6)) and return NEXT;
rand(5) < 2 and return (DENYSOFT_DISCONNECT, "random failure"); rand(5) < 2 and return (DENYSOFT_DISCONNECT, "random failure");
return (DENYSOFT, "random failure"); return (DENYSOFT, "random failure");
} }
sub hook_connect { sub hook_connect {
$self->qp->connection->notes('random_fail_%', $self->{__PACKAGE__.'_how'}); $_[0]->qp->connection->notes('random_fail_%', $_[0]->{__PACKAGE__.'_how'});
goto &random_fail goto &random_fail
} }