File: 07_poll.t

package info (click to toggle)
libposix-2008-perl 0.26-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 888 kB
  • sloc: perl: 1,072; makefile: 3
file content (61 lines) | stat: -rw-r--r-- 2,187 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#! /usr/bin/perl

use strict;
use warnings;
use sigtrap qw(die normal-signals error-signals);

use Data::Dumper ();
use Fcntl;
use File::Temp 'mktemp';
use Test::More tests => 18;

use POSIX::2008;

my $tmpname = mktemp('X'x20);
sysopen my $tmpfh, $tmpname, O_RDWR|O_CREAT|O_EXCL, 0700 or die "$tmpname: $!";

SKIP: {
  if (! defined &POSIX::2008::poll) {
    skip 'poll() UNAVAILABLE', 18;
  }

  my $pollfds;
  my $rv = POSIX::2008::poll($pollfds, 0);
  is($rv, 0, 'poll(undef, 0)');
  is($pollfds, undef, 'poll(undef, 0)');

  $pollfds = [];
  $rv = POSIX::2008::poll($pollfds, 0);
  is($rv, 0, 'poll([], 0)');
  is(ref $pollfds, 'ARRAY', 'poll([], 0)');
  is(scalar @$pollfds, 0, 'poll([], 0)');

  # dist/IO/t/io_poll.t says these OSes suck.
  if ($^O =~ /^(?:MSWin32|NetWare|VMS|beos)$/) {
    skip "poll() doesn't work on non-socket fds on $^O", 13;
  }
  $pollfds = [
    [$tmpfh, POSIX::2008::POLLIN|POSIX::2008::POLLOUT, 0],
    [\*STDOUT, POSIX::2008::POLLIN|POSIX::2008::POLLWRNORM, 0],
  ];
  $rv = POSIX::2008::poll($pollfds, 0);
  my $pfd_dump = Data::Dumper->new([$pollfds])->Terse(1)->Indent(0)->Dump();
  my $msg = "pollfds: $pfd_dump";
  is($rv, 2, "poll() rv; $msg");
  is(ref $pollfds, 'ARRAY', "pollfds is ARRAY ref; $msg");
  is(scalar @$pollfds, 2, "pollfds has 2 elements; $msg");
  is(ref $pollfds->[0], 'ARRAY', "pollfds[0] is an ARRAY ref; $msg");
  is(scalar @{$pollfds->[0]}, 3, "pollfds[0] has 3 elements; $msg");
  is(ref $pollfds->[1], 'ARRAY', "pollfds[1] is an ARRAY ref; $msg");
  is(scalar @{$pollfds->[1]}, 3, "pollfds[1] has 3 elements; $msg");
  is($pollfds->[0]->[0], $tmpfh, "pollfds[0][0] if file handle $msg");
  is($pollfds->[0]->[1], POSIX::2008::POLLIN|POSIX::2008::POLLOUT, "pollfds[0][1]==POLLIN|POLLOUT; $msg");
  is($pollfds->[0]->[2], POSIX::2008::POLLIN|POSIX::2008::POLLOUT, "pollfds[0][2]==POLLIN|POLLOUT; $msg");
  is($pollfds->[1]->[0], \*STDOUT, "pollfds[1][0] is STDOUT; $msg");
  is($pollfds->[1]->[1], POSIX::2008::POLLIN|POSIX::2008::POLLWRNORM, "pollfds[1][1]==POLLIN|POLLWRNORM; $msg");
  is($pollfds->[1]->[2], POSIX::2008::POLLWRNORM, "pollfds[1][2]==POLLWRNORM; $msg");
}

END {
  unlink $tmpname if defined $tmpname;
}