changeset 404:91fc587ddae0

Tests: randomize port for concurrent tests
author David Demelier <markand@malikania.fr>
date Wed, 11 Jan 2017 15:10:36 +0100
parents 8b7d1366c75c
children 31837008f7e2
files libirccd-test/irccd/command-tester.cpp libirccd/irccd/transport.cpp libirccd/irccd/transport.hpp
diffstat 3 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd-test/irccd/command-tester.cpp	Wed Jan 11 14:46:09 2017 +0100
+++ b/libirccd-test/irccd/command-tester.cpp	Wed Jan 11 15:10:36 2017 +0100
@@ -32,8 +32,11 @@
     log::setLogger(std::make_unique<log::SilentLogger>());
     log::setVerbose(false);
 
-    m_irccd.transports().add(std::make_unique<TransportServerIp>("*", 5000));
-    m_irccdctl.client().connect(net::ipv4::pton("127.0.0.1", 5000));
+    auto tpt = std::make_unique<TransportServerIp>("*", 0);
+    auto port = tpt->port();
+
+    m_irccd.transports().add(std::move(tpt));
+    m_irccdctl.client().connect(net::ipv4::pton("127.0.0.1", port));
 
     if (cmd)
         m_irccd.commands().add(std::move(cmd));
--- a/libirccd/irccd/transport.cpp	Wed Jan 11 14:46:09 2017 +0100
+++ b/libirccd/irccd/transport.cpp	Wed Jan 11 15:10:36 2017 +0100
@@ -394,6 +394,15 @@
     m_socket.listen();
 }
 
+std::uint16_t TransportServerIp::port() const
+{
+    auto addr = m_socket.getsockname();
+
+    return addr.domain() == AF_INET
+        ? ntohs(addr.as<sockaddr_in>().sin_port)
+        : ntohs(addr.as<sockaddr_in6>().sin6_port);
+}
+
 /*
  * TransportServerTls
  * ------------------------------------------------------------------
--- a/libirccd/irccd/transport.hpp	Wed Jan 11 14:46:09 2017 +0100
+++ b/libirccd/irccd/transport.hpp	Wed Jan 11 15:10:36 2017 +0100
@@ -350,6 +350,13 @@
     IRCCD_EXPORT TransportServerIp(const std::string &address,
                                    std::uint16_t port,
                                    std::uint8_t mode = v4);
+
+    /**
+     * Get the associated port.
+     *
+     * \return the port
+     */
+    std::uint16_t port() const;
 };
 
 #if defined(WITH_SSL)