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 with ENOMEM 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 the CORE::GLOBAL setups installed but dispatching to the actual CORE::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/.