TEST2::IPC::DRIVER(3pm)
π Test2::IPC::Driver(3pm) π
Ok bestie, this is the Test2::IPC::Driver(3pm) page from the Perl Programmers Reference Guide β the base class for Test2 IPC drivers. Itβs giving blueprint energy for making IPC drivers behave. π«Ά
πΈ NAME πΈ
Test2::IPC::Driver β base class for Test2 IPC drivers. No cap, thatβs the whole name. π
β¨ SYNOPSIS β¨
package Test2::IPC::Driver::MyDriver;
use base 'Test2::IPC::Driver';
...
π METHODS π
π $self->abort($msg) π
If an IPC encounters a fatal error it should use this. It will print the message to STDERR with '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. π
π $self->abort_trace($msg) π
This is the same as "$ipc->abort($msg)" except that it uses "Carp::longmess" to add a stack trace to the message. Thatβs the whole glow-up. β¨
π LOADING DRIVERS π
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;
...
π¦ WRITING DRIVERS π¦
Hereβs the full starter-pack code, bestie:
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;
π§ METHODS SUBCLASSES MUST IMPLEMENT π§
$ipc->is_viable
This should return true if the driver works in the current environment. This should return false if it does not. This is a CLASS method. β
$ipc->add_hub($hid)
This is used to alert the driver that a new hub is expecting events. The driver should keep track of the process and thread ids, the hub should only be dropped by the proc+thread that started it. π
sub add_hub {
my $self = shift;
my ($hid) = @_;
... # Make it possible to contact the hub
}
$ipc->drop_hub($hid)
This is used to alert the driver that a hub is no longer accepting events. The driver should keep track of the process and thread ids, the hub should only be dropped by the proc+thread that started it (This is the drivers responsibility to enforce). π¨
sub drop_hub {
my $self = shift;
my ($hid) = @_;
... # Nothing should try to reach the hub anymore.
}
$ipc->send($hid, $event); and $ipc->send($hid, $event, $global);
$ipc->send($hid, $event);
$ipc->send($hid, $event, $global);
Used to send events from the current process/thread to the specified hub in its process+thread. π¬
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. π
@events = $ipc->cull($hid)
Used to collect events that have been sent to the specified hub. π§Ί
sub cull {
my $self = shift;
my ($hid) = @_;
my @events = ...; # Here is where you get the events for the hub
return @events;
}
$ipc->waiting()
This is called in the parent process when it is complete and waiting for all child processes and threads to complete. π°οΈ
sub waiting {
my $self = shift;
... # Notify all listening procs and threads that the main
... # process/thread is waiting for them to finish.
}
π METHODS SUBCLASSES MAY IMPLEMENT OR OVERRIDE π
$ipc->driver_abort($msg)
This is a hook called by "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. π«Ά
π SOURCE π
The source code repository for Test2 can be found at <https://github.com/Test-More/test-more/>. π₯
π MAINTAINERS π
Chad Granum <exodist@cpan.org>
β AUTHORS β
Chad Granum <exodist@cpan.org>
π COPYRIGHT π
Copyright 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 <https://dev.perl.org/licenses/>.
And thatβs the whole vibe: this page ships with perl v5.42.3, dated 2026-11-03, and itβs Test2::IPC::Driver(3pm) β go forth and slay your IPC drivers, bestie π
β¨π
π¦ where this page comes from
- alpine 3.24: perl-doc 5.42.3-r0 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms