v0.9.3
[poe-component-client-mpd.git] / t / 20-conn-failed.t
blob07ccc8ac47cd7664ef6a7e0d0b522c6658f94e0f
1 #!perl
3 # This file is part of POE::Component::Client::MPD.
4 # Copyright (c) 2007-2008 Jerome Quelin, all rights reserved.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the same terms as Perl itself.
11 use 5.010;
12 use strict;
13 use warnings;
15 use POE qw{ Component::Client::MPD::Connection };
16 use Readonly;
17 use Test::More tests => 4;
19 Readonly my $ALIAS => 'tester';
22 my $max_retries = 3;
23 my $id = POE::Session->create(
24     inline_states => {
25         _start                      => \&_onpriv_start,
26         mpd_connect_error_retriable => \&_onprot_mpd_connect_error_retriable,
27         mpd_connect_error_fatal     => \&_onprot_mpd_connect_error_fatal,
28     }
30 my $conn = POE::Component::Client::MPD::Connection->spawn( {
31     host        => 'localhost',
32     port        => 16600,
33     id          => $id,
34     retry_wait  => 0,
35     max_retries => $max_retries,
36 } );
37 POE::Kernel->run;
38 exit;
40 #--
42 sub _onpriv_start {
43     my ($k, $h) = @_[KERNEL, HEAP];
44     $k->alias_set($ALIAS); # increment refcount
45     $h->{count} = 0;
48 sub _onprot_mpd_connect_error_retriable {
49     my ($k, $h, $errstr) = @_[KERNEL, HEAP, ARG0];
50     like($errstr, qr/^connect: \(\d+\) /, 'retriable error trapped');
51     $h->{count}++;
54 sub _onprot_mpd_connect_error_fatal {
55     my ($k, $h, $errstr) = @_[KERNEL, HEAP, ARG0];
57     # checks
58     is($h->{count}, $max_retries-1, 'retriable errors are tried again $max_retries times');
59     like($errstr, qr/^Too many failed attempts!/, 'too many errors lead to fatal error');
61     # cleanup
62     $k->post($conn, 'disconnect');
63     $k->alias_remove($ALIAS); # decrement refcount