#!perl

use IO::Handle;
use Getopt::Long;

use lib 't';
use lib 't/lib';

my %opt = ( exitval => 0 );

eval {

    local $SIG{__WARN__} = sub { die $_[0] };

    GetOptions(
        \%opt,
        qw[
          config=s
          cmdserver=s
          mode=s
          exitval=i
          R=s
          ]
    );
};

die if $@;

shift @ARGV if $ARGV[0] eq 'serve';

sub fail { die("failed\n") }

sub eof { exit 0 }

sub bad_hello_chan {

    require BadServer;
    BadServer::Hello::Chan->new->serve;

}

sub bad_hello_len {

    require BadServer;
    BadServer::Hello::Len->new->serve;

}

sub bad_hello_no_capabilities {

    require BadServer;
    BadServer::NoCapabilities->new->serve;
}

sub bad_hello_no_runcommand {

    require BadServer;
    BadServer::NoRunCommand->new->serve;

}

sub bad_hello_no_encoding {

    require BadServer;
    BadServer::NoEncoding->new->serve;

}


sub badlen { print pack( 'A[1] l> A[2]', 'o', 3, 'aa' ); exit; }


sub wait {

    <STDIN>;
}

sub basic {

    require Server::Basic;
    Server::Basic->new->serve;

}

sub full {

    require Server::Full;
    Server::Full->new->serve;

}


$_->() foreach @ARGV;

exit $opt{exitval};
