NAME
Test::Without::Shm - simulate shmget() etc not available
SYNOPSIS
# pretend shm not implemented on the system
perl -MTest::Without::Shm myprog.pl ...
# pretend not enough memory for shm
perl -MTest::Without::Shm=-nomem myprog.pl ...
DESCRIPTION
This module overrides the Perl core functions
shmget()
shmread()
shmwrite()
shmctl()
to pretend that their System-V style shared memory is either not implemented or there's not enough memory.
This fakery can be used during testing to check how module code etc might behave on a system without shm or when there's not enough memory. A module might throw an error, use an I/O fallback, etc.
The shm functions are overridden using the CORE::GLOBAL
mechanism (see "OVERRIDING CORE FUNCTIONS" in CORE) so Test::Without::Shm
must be loaded before compiling any code which might use the shm functions.
COMMAND LINE
The default import behaviour is to pretend shm is not implemented on the system. -M
can be used on the command line when running a program,
perl -MTest::Without::Shm myprog.pl ...
The -nomem
option pretends that shm exists but there's not enough memory,
perl -MTest::Without::Shm=-nomem myprog.pl ...
For the usual ExtUtils::MakeMaker
test harness the -M
can be put in the HARNESS_PERL_SWITCHES
environment variable in the usual way,
HARNESS_PERL_SWITCHES="-MTest::Without::Shm" make test
IMPORTS
The same effect as the above -M
can be had in a script,
use Test::Without::Shm; # shm not implemented
or for -nomem
use Test::Without::Shm '-nomem';
If you want to load the Test::Without::Shm
module but not activate it then give a ()
in the usual way to skip its import()
action,
# setups, but no "without" yet
use Test::Without::Shm ();
Don't forget that this must be done before any code using the shm...()
functions, which probably means somewhere early in the mainline script.
The import options are
-notimp
-
Make shm "not implemented", as if the system doesn't have the underlying functions. This makes the Perl functions croak with "shmget not implemented", or "shm I/O not implemented", etc.
-nomem
-
Make
shmget()
fail withENOMEM
as if the system says there's not enough memory to make a shm segment. This is arranged even when the system doesn't have shm (ie. when "not implemented" would be the normal state).
FUNCTIONS
$mode = Test::Without::Shm->mode ()
Test::Without::Shm->mode ($mode)
-
Get or set the shm fakery mode.
$mode
is a string"notimp" "nomem" "normal"
Normal mode means the
shm...()
functions are Perl's normal behaviour, whatever that might be. In the current implementation this is done by leaving theCORE::GLOBAL
setups installed but dispatching to the actualCORE::shm...()
routines.
SEE ALSO
"shmget" in perlfunc, CORE, shmget(2), IPC::SysV
Perl sources doio.c
Perl_do_ipcget()
, Perl_do_shmio()
and Perl_do_ipcctl()
HOME PAGE
http://user42.tuxfamily.org/test-variousbits/index.html
COPYRIGHT
Copyright 2011, 2012, 2013, 2015, 2017 Kevin Ryde
Test-VariousBits is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Test-VariousBits is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Test-VariousBits. If not, see http://www.gnu.org/licenses/.