Test2::IPC::Driver - Base class for Test2 IPC drivers. |
Test2::IPC::Driver - Base class for Test2 IPC drivers.
package Test2::IPC::Driver::MyDriver;
use base 'Test2::IPC::Driver';
...
abort($msg)
'IPC Fatal Error: '
prefixed to it, then it will
forcefully exit 255. IPC errors may occur in threads or processes other than
the main one, this method provides the best chance of the harness noticing the
error.
abort_trace($msg)
$ipc->abort($msg)
except that it uses
Carp::longmess
to add a stack trace to the message.
Test2::IPC::Driver has an import()
method. All drivers inherit this import
method. This import method registers the driver.
In most cases you just need to load the desired IPC driver to make it work. You should load this driver as early as possible. A warning will be issued if you load it too late for it to be effective.
use Test2::IPC::Driver::MyDriver; ...
package Test2::IPC::Driver::MyDriver; use strict; use warnings;
use base 'Test2::IPC::Driver';
sub is_viable { return 0 if $^O eq 'win32'; # Will not work on windows. return 1; }
sub add_hub { my $self = shift; my ($hid) = @_;
... # Make it possible to contact the hub }
sub drop_hub { my $self = shift; my ($hid) = @_;
... # Nothing should try to reach the hub anymore. }
sub send { my $self = shift; my ($hid, $e, $global) = @_;
... # Send the event to the proper hub.
# This may notify other procs/threads that there is a pending event. Test2::API::test2_ipc_set_pending($uniq_val); }
sub cull { my $self = shift; my ($hid) = @_;
my @events = ...; # Here is where you get the events for the hub
return @events; }
sub waiting { my $self = shift;
... # Notify all listening procs and threads that the main ... # process/thread is waiting for them to finish. }
1;
add_hub($hid)
sub add_hub { my $self = shift; my ($hid) = @_;
... # Make it possible to contact the hub }
drop_hub($hid)
sub drop_hub { my $self = shift; my ($hid) = @_;
... # Nothing should try to reach the hub anymore. }
sub send { my $self = shift; my ($hid, $e) = @_;
... # Send the event to the proper hub.
# This may notify other procs/threads that there is a pending event. Test2::API::test2_ipc_set_pending($uniq_val); }
If $global
is true then the driver should send the event to all hubs in all
processes and threads.
cull($hid)
sub cull { my $self = shift; my ($hid) = @_;
my @events = ...; # Here is where you get the events for the hub
return @events; }
waiting()
sub waiting { my $self = shift;
... # Notify all listening procs and threads that the main ... # process/thread is waiting for them to finish. }
driver_abort($msg)
Test2::IPC::Driver->abort()
. This is your
chance to cleanup when an abort happens. You cannot prevent the abort, but you
can gracefully except it.
The source code repository for Test2 can be found at http://github.com/Test-More/test-more/.
Copyright 2019 Chad Granum <exodist@cpan.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/
Test2::IPC::Driver - Base class for Test2 IPC drivers. |