diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2015-02-02 14:14:49 -0500 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2015-02-02 14:14:49 -0500 |
commit | aa4b25a90d2501553658d96267a01e2eda2297bf (patch) | |
tree | 62d9953f631aca2e909c9e0d6d3b224996dcc09e /gps | |
parent | ef39b1cd848a006751b1d30c931056a5790e3116 (diff) | |
download | gpsd-aa4b25a90d2501553658d96267a01e2eda2297bf.tar.gz |
In the test framework, use the bind-to-port-0 trick to get a random unused port.
This makes the -f option of gpsfake obsolete, and it has been removed.
All regression tests pass.
Diffstat (limited to 'gps')
-rw-r--r-- | gps/fake.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/gps/fake.py b/gps/fake.py index b4115ef6..95b0b11e 100644 --- a/gps/fake.py +++ b/gps/fake.py @@ -364,6 +364,15 @@ class FakePTY(FakeGPS): "Wait for the associated device to drain (e.g. before closing)." termios.tcdrain(self.fd) +def cleansocket(host, port): + "Get a socket that we can re-use cleanly after it's closed." + cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + # This magic prevents "Address already in use" errors after + # we release the socket. + cs.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + cs.bind((host, port)) + return cs + class FakeTCP(FakeGPS): "A TCP serverlet with a test log ready to be cycled to it." def __init__(self, testload, @@ -373,11 +382,7 @@ class FakeTCP(FakeGPS): self.host = host self.port = int(port) self.byname = "tcp://" + host + ":" + str(port) - self.dispatcher = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - # This magic prevents "Address already in use" errors after - # we release the socket. - self.dispatcher.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.dispatcher.bind((self.host, self.port)) + self.dispatcher = cleansocket(self.host, self.port) self.dispatcher.listen(5) self.readables = [self.dispatcher] @@ -571,7 +576,10 @@ class TestSession: if port: self.port = port else: - self.port = gps.GPSD_PORT + # Magic way to get a socket with an unused port number + s = cleansocket("localhost", 0) + self.port = s.getsockname()[1] + s.close() self.close_delay = CLOSE_DELAY if slow: self.close_delay += CLOSE_DELAY_SLOWDOWN |