summaryrefslogtreecommitdiff
path: root/cpan/IPC-SysV/t/msg.t
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/IPC-SysV/t/msg.t')
-rw-r--r--cpan/IPC-SysV/t/msg.t110
1 files changed, 110 insertions, 0 deletions
diff --git a/cpan/IPC-SysV/t/msg.t b/cpan/IPC-SysV/t/msg.t
new file mode 100644
index 0000000000..32dd9ffa75
--- /dev/null
+++ b/cpan/IPC-SysV/t/msg.t
@@ -0,0 +1,110 @@
+################################################################################
+#
+# $Revision: 11 $
+# $Author: mhx $
+# $Date: 2008/11/28 18:08:11 +0100 $
+#
+################################################################################
+#
+# Version 2.x, Copyright (C) 2007, Marcus Holland-Moritz <mhx@cpan.org>.
+# Version 1.x, Copyright (C) 1999, Graham Barr <gbarr@pobox.com>.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+################################################################################
+
+BEGIN {
+ if ($ENV{'PERL_CORE'}) {
+ chdir 't' if -d 't';
+ @INC = '../lib' if -d '../lib' && -d '../ext';
+ }
+
+ require Test::More; import Test::More;
+ require Config; import Config;
+
+ if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) {
+ plan(skip_all => 'IPC::SysV was not built');
+ }
+}
+
+if ($Config{'d_sem'} ne 'define') {
+ plan(skip_all => '$Config{d_sem} undefined');
+} elsif ($Config{'d_msg'} ne 'define') {
+ plan(skip_all => '$Config{d_msg} undefined');
+}
+
+use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_NOWAIT IPC_STAT S_IRWXU S_IRWXG S_IRWXO);
+use strict;
+
+use IPC::Msg;
+#Creating a message queue
+
+my $msq = sub {
+ my $code = shift;
+ if (exists $SIG{SYS}) {
+ local $SIG{SYS} = sub { plan(skip_all => "SIGSYS caught") };
+ return $code->();
+ }
+ return $code->();
+}->(sub { new IPC::Msg(IPC_PRIVATE, S_IRWXU | S_IRWXG | S_IRWXO) });
+
+unless (defined $msq) {
+ my $info = "IPC::Msg->new failed: $!";
+ if ($! == &IPC::SysV::ENOSPC || $! == &IPC::SysV::ENOSYS ||
+ $! == &IPC::SysV::ENOMEM || $! == &IPC::SysV::EACCES) {
+ plan(skip_all => $info);
+ }
+ else {
+ die $info;
+ }
+}
+
+plan(tests => 9);
+
+pass('create message queue');
+
+#Putting a message on the queue
+my $test_name = 'enqueue message';
+
+my $msgtype = 1;
+my $msg = "hello";
+if ($msq->snd($msgtype,$msg,IPC_NOWAIT)) {
+ pass($test_name);
+}
+else {
+ print "# snd: $!\n";
+ fail($test_name);
+}
+
+#Check if there are messages on the queue
+my $ds = $msq->stat;
+ok($ds, 'stat');
+
+if ($ds) {
+ is($ds->qnum, 1, 'qnum');
+}
+else {
+ fail('qnum');
+}
+
+#Retrieving a message from the queue
+my $rmsg;
+my $rmsgtype = 0; # Give me any type
+$rmsgtype = $msq->rcv($rmsg,256,$rmsgtype,IPC_NOWAIT);
+is($rmsgtype, $msgtype, 'rmsgtype');
+is($rmsg, $msg, 'rmsg');
+
+$ds = $msq->stat;
+ok($ds, 'stat');
+
+if ($ds) {
+ is($ds->qnum, 0, 'qnum');
+}
+else {
+ fail('qnum');
+}
+
+END {
+ ok($msq->remove, 'remove message') if defined $msq;
+}