• Tom Lane's avatar
    Avoid picking already-bound TCP ports in kerberos and ldap test suites. · 803466b6
    Tom Lane authored
    src/test/kerberos and src/test/ldap need to run a private authentication
    server of the relevant type, for which they need a free TCP port.
    They were just picking a random port number in 48K-64K, which works
    except when something's already using the particular port.  Notably,
    the probability of failure rises dramatically if one simply runs those
    tests in a tight loop, because each test cycle leaves behind a bunch of
    high ports that are transiently in TIME_WAIT state.
    
    To fix, split out the code that PostgresNode.pm already had for
    identifying a free TCP port number, so that it can be invoked to choose
    a port for the KDC or LDAP server.  This isn't 100% bulletproof, since
    conceivably something else on the machine could grab the port between
    the time we check and the time we actually start the server.  But that's
    a pretty short window, so in practice this should be good enough.
    
    Back-patch to v11 where these test suites were added.
    
    Patch by me, reviewed by Andrew Dunstan.
    
    Discussion: https://postgr.es/m/3397.1564872168@sss.pgh.pa.us
    803466b6
001_auth.pl 7.57 KB