Testsuite: Add more tests to Exim::Runtest tests
[exim.git] / test / lib / Exim / Runtest.pm
index 2ac9a61ee0944f0c6b19489e3cb971c893dcb54e..845388b8b268cb172e17b0582ebd7fa3d97dad03 100644 (file)
@@ -1,16 +1,29 @@
 package Exim::Runtest;
 use strict;
 use warnings;
+use IO::Socket::INET;
 use Carp;
 
 use List::Util qw'shuffle';
 
+=head1 NAME
+
+Exim::Runtest - helper functions for the runtest script
+
+=head1 SYNOPSIS
+
+ use Exim::Runtest;
+ my $foo = Exim::Runtest::foo('foo');
+
+=head1 DESCRIPTION
+
+The B<Exim::Runtest> module provides some simple functions
+for the F<runtest> script. No functions are exported yet.
+
+=cut
 
-# find a group name, preferrable 'mail', but
-# use some other random name if 'mail' isn't a valid group
-# name
 sub mailgroup {
-    my $group = shift;
+    my $group = shift // croak "Need a default group name.";
 
     croak "Need a group *name*, not a numeric group id."
         if $group =~ /^\d+$/;
@@ -22,7 +35,39 @@ sub mailgroup {
     push @groups, $_ while defined($_ = getgrent);
     endgrent;
     return (shuffle @groups)[0];
-};
+}
 
+sub dynamic_socket {
+    my $socket;
+    for (my $port = 1024; $port < 65000; $port++) {
+        $socket = IO::Socket::INET->new(
+            LocalHost => '127.0.0.1',
+            LocalPort => $port,
+            Listen => 10,
+            ReuseAddr => 1,
+        ) and return $socket;
+    }
+    croak 'Can not allocate a free port.';
+}
 
 1;
+
+__END__
+
+=head1 FUNCTIONS
+
+=over
+
+=item B<mailgroup>(I<$default>)
+
+Check if the mailgroup I<$default> exists. Return the checked
+group name or some other random but existing group.
+
+=item B<dynamic_socket>()
+
+Return a dynamically allocated listener socket in the range
+between 1024 and 65534;
+
+=back
+
+=cut