[Rt-commit] rt branch, 4.4/ldap-test-server-idle-port, created. rt-4.4.2-65-gb86ca9fb1

? sunnavy sunnavy at bestpractical.com
Wed Feb 7 11:01:05 EST 2018


The branch, 4.4/ldap-test-server-idle-port has been created
        at  b86ca9fb19064d98497b897ec1f6a344c39b59e8 (commit)

- Log -----------------------------------------------------------------
commit b86ca9fb19064d98497b897ec1f6a344c39b59e8
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Fri Jan 26 23:36:27 2018 +0800

    find idle port for ldap test server
    
    previously we don't check if the ldap test server port is in use or not,
    and tests hang if the port is already in use. switch to the same
    strategy we find idle web server port in tests.

diff --git a/lib/RT/Test.pm b/lib/RT/Test.pm
index 7ff4d68ea..656cced22 100644
--- a/lib/RT/Test.pm
+++ b/lib/RT/Test.pm
@@ -109,6 +109,7 @@ problem in Perl that hides the top-level optree from L<Devel::Cover>.
 
 our $port;
 our @SERVERS;
+my @ports; # keep track of all the random ports we used
 
 BEGIN {
     delete $ENV{$_} for qw/LANGUAGE LC_ALL LC_MESSAGES LANG/;
@@ -146,7 +147,7 @@ sub import {
 
     $class->bootstrap_tempdir;
 
-    $class->bootstrap_port;
+    $port = $class->find_idle_port;
 
     $class->bootstrap_plugins_paths( %args );
 
@@ -229,7 +230,7 @@ sub db_requires_no_dba {
     return 1 if $db_type eq 'SQLite';
 }
 
-sub bootstrap_port {
+sub find_idle_port {
     my $class = shift;
 
     my %ports;
@@ -245,6 +246,7 @@ sub bootstrap_port {
 
     # Pick a random port, checking that the port isn't in our in-use
     # list, and that something isn't already listening there.
+    my $port;
     {
         $port = 1024 + int rand(10_000) + $$ % 1024;
         redo if $ports{$port};
@@ -271,6 +273,8 @@ sub bootstrap_port {
     truncate(PORTS, 0);
     print PORTS "$_\n" for sort {$a <=> $b} keys %ports;
     close(PORTS) or die "Can't close ports file: $!";
+    push @ports, $port;
+    return $port;
 }
 
 sub bootstrap_tempdir {
@@ -1809,7 +1813,7 @@ END {
 
     # Drop our port from t/tmp/ports; do this after dropping the
     # database, as our port lock is also a lock on the database name.
-    if ($port) {
+    if (@ports) {
         my %ports;
         my $portfile = "$tmp{'directory'}/../ports";
         sysopen(PORTS, $portfile, O_RDWR|O_CREAT)
@@ -1817,7 +1821,7 @@ END {
         flock(PORTS, LOCK_EX)
             or die "Can't write-lock ports file $portfile: $!";
         $ports{$_}++ for split ' ', join("",<PORTS>);
-        delete $ports{$port};
+        delete $ports{$_} for @ports;
         seek(PORTS, 0, 0);
         truncate(PORTS, 0);
         print PORTS "$_\n" for sort {$a <=> $b} keys %ports;
diff --git a/t/externalauth/ldap.t b/t/externalauth/ldap.t
index 5c148ad4e..1e0516fab 100644
--- a/t/externalauth/ldap.t
+++ b/t/externalauth/ldap.t
@@ -8,7 +8,7 @@ eval { require RT::Authen::ExternalAuth; require Net::LDAP::Server::Test; 1; } o
 };
 
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port" );
 
diff --git a/t/externalauth/ldap_escaping.t b/t/externalauth/ldap_escaping.t
index 5598d6042..b46c3ffe6 100644
--- a/t/externalauth/ldap_escaping.t
+++ b/t/externalauth/ldap_escaping.t
@@ -8,7 +8,7 @@ eval { require RT::Authen::ExternalAuth; require Net::LDAP::Server::Test; 1; } o
 };
 
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port" );
 
diff --git a/t/externalauth/ldap_group.t b/t/externalauth/ldap_group.t
index cc6b7bd45..168c37b07 100644
--- a/t/externalauth/ldap_group.t
+++ b/t/externalauth/ldap_group.t
@@ -13,7 +13,7 @@ eval { require RT::Authen::ExternalAuth; require Net::LDAP::Server::Test; 1; } o
 };
 
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port" );
 
diff --git a/t/externalauth/ldap_privileged.t b/t/externalauth/ldap_privileged.t
index 544440996..02e760bf3 100644
--- a/t/externalauth/ldap_privileged.t
+++ b/t/externalauth/ldap_privileged.t
@@ -7,7 +7,7 @@ eval { require RT::Authen::ExternalAuth; require Net::LDAP::Server::Test; 1; } o
     plan skip_all => 'Unable to test without Net::LDAP and Net::LDAP::Server::Test';
 };
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port" );
 
diff --git a/t/ldapimport/group-callbacks.t b/t/ldapimport/group-callbacks.t
index 8a7a689ec..272d32921 100644
--- a/t/ldapimport/group-callbacks.t
+++ b/t/ldapimport/group-callbacks.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 my $ldap = Net::LDAP->new("localhost:$ldap_port");
diff --git a/t/ldapimport/group-import.t b/t/ldapimport/group-import.t
index 76db1bb20..b87bc97c0 100644
--- a/t/ldapimport/group-import.t
+++ b/t/ldapimport/group-import.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 my $ldap = Net::LDAP->new("localhost:$ldap_port");
diff --git a/t/ldapimport/group-member-import.t b/t/ldapimport/group-member-import.t
index 4e0ce8f66..651f5ab6c 100644
--- a/t/ldapimport/group-member-import.t
+++ b/t/ldapimport/group-member-import.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 my $ldap = Net::LDAP->new("localhost:$ldap_port");
diff --git a/t/ldapimport/group-rename.t b/t/ldapimport/group-rename.t
index 06207d448..786533ef9 100644
--- a/t/ldapimport/group-rename.t
+++ b/t/ldapimport/group-rename.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 my $ldap = Net::LDAP->new("localhost:$ldap_port");
diff --git a/t/ldapimport/user-import-cfs.t b/t/ldapimport/user-import-cfs.t
index 6a157ab55..a0c723ee0 100644
--- a/t/ldapimport/user-import-cfs.t
+++ b/t/ldapimport/user-import-cfs.t
@@ -25,7 +25,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 
diff --git a/t/ldapimport/user-import-privileged.t b/t/ldapimport/user-import-privileged.t
index 44aeff359..4b155eea7 100644
--- a/t/ldapimport/user-import-privileged.t
+++ b/t/ldapimport/user-import-privileged.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 
diff --git a/t/ldapimport/user-import.t b/t/ldapimport/user-import.t
index c404bb556..aafbd954d 100644
--- a/t/ldapimport/user-import.t
+++ b/t/ldapimport/user-import.t
@@ -10,7 +10,7 @@ eval { require RT::LDAPImport; require Net::LDAP::Server::Test; 1; } or do {
 my $importer = RT::LDAPImport->new;
 isa_ok($importer,'RT::LDAPImport');
 
-my $ldap_port = 1024 + int rand(10000) + $$ % 1024;
+my $ldap_port = RT::Test->find_idle_port;
 ok( my $server = Net::LDAP::Server::Test->new( $ldap_port, auto_schema => 1 ),
     "spawned test LDAP server on port $ldap_port");
 

-----------------------------------------------------------------------


More information about the rt-commit mailing list