Test2::Util - Tools used by Test2 and friends.
|
Test2::Util - Tools used by Test2 and friends.
Collection of tools used by the Test2 manpage and friends.
All exports are optional. You must specify subs to import.
- ($success, $error) = try { ... }
-
Eval the codeblock, return success or failure, and the error message. This code
protects $@ and $!, they will be restored by the end of the run. This code also
temporarily blocks $SIG{DIE} handlers.
- protect { ... }
-
Similar to try, except that it does not catch exceptions. The idea here is to
protect $@ and $! from changes. $@ and $! will be restored to whatever they
were before the run so long as it is successful. If the run fails $! will still
be restored, but $@ will contain the exception being thrown.
- CAN_FORK
-
True if this system is capable of true or pseudo-fork.
- CAN_REALLY_FORK
-
True if the system can really fork. This will be false for systems where fork
is emulated.
- CAN_THREAD
-
True if this system is capable of using threads.
- USE_THREADS
-
Returns true if threads are enabled, false if they are not.
- get_tid
-
This will return the id of the current thread when threads are enabled,
otherwise it returns 0.
- my $file =
pkg_to_file($package)
-
Convert a package name to a filename.
- $string =
ipc_separator()
-
Get the IPC separator. Currently this is always the string
'~'
.
- $string =
gen_uid()
-
Generate a unique id (NOT A UUID). This will typically be the process id, the
thread id, the time, and an incrementing integer all joined with the
ipc_separator()
.
-
These ID's are unique enough for most purposes. For identical ids to be
generated you must have 2 processes with the same PID generate IDs at the same
time with the same current state of the incrementing integer. This is a
perfectly reasonable thing to expect to happen across multiple machines, but is
quite unlikely to happen on one machine.
-
This can fail to be unique if a process generates an id, calls exec, and does
it again after the exec and it all happens in less than a second. It can also
happen if the systems process id's cycle in less than a second allowing 2
different programs that use this generator to run with the same PID in less
than a second. Both these cases are sufficiently unlikely. If you need
universally unique ids, or ids that are unique in these conditions, look at
the Data::UUID manpage.
- ($ok, $err) = do_rename($old_name, $new_name)
-
Rename a file, this wraps
rename()
in a way that makes it more reliable
cross-platform when trying to rename files you recently altered.
- ($ok, $err) =
do_unlink($filename)
-
Unlink a file, this wraps
unlink()
in a way that makes it more reliable
cross-platform when trying to unlink files you recently altered.
- ($ok, $err) = try_sig_mask { ... }
-
Complete an action with several signals masked, they will be unmasked at the
end allowing any signals that were intercepted to get handled.
-
This is primarily used when you need to make several actions atomic (against
some signals anyway).
-
Signals that are intercepted:
- SIGINT
- SIGALRM
- SIGHUP
- SIGTERM
- SIGUSR1
- SIGUSR2
- 10.0
Perl 5.10.0 has a bug when compiled with newer gcc versions. This bug causes a
segfault whenever a new thread is launched. Test2 will attempt to detect
this, and note that the system is not capable of forking when it is detected.
- Devel::Cover
-
Devel::Cover does not support threads. CAN_THREAD will return false if
Devel::Cover is loaded before the check is first run.
The source code repository for Test2 can be found at
http://github.com/Test-More/test-more/.
- Chad Granum <exodist@cpan.org>
- Chad Granum <exodist@cpan.org>
- Kent Fredric <kentnl@cpan.org>
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::Util - Tools used by Test2 and friends.
|