diff options
author | Kevin Smith <git@kismith.co.uk> | 2018-06-19 13:57:06 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2018-06-19 15:57:25 (GMT) |
commit | 83434963a7b10b759ffe3fdc1312efdef282a450 (patch) | |
tree | 7cf46b95fc0327cc338259f07e10d609c6ed4c68 /Swiften/Network/UnitTest | |
parent | ddc60687e44209d136c63776b5dc714791b41436 (diff) | |
download | swift-83434963a7b10b759ffe3fdc1312efdef282a450.zip swift-83434963a7b10b759ffe3fdc1312efdef282a450.tar.bz2 |
Don't double-connect to IP literals
Before this change, an IP literal would be attempted directly, and if
that failed it would then 'resolve' the literal and try the result.
Test-Information:
Added a unit test verifying the bug before fixing it.
Change-Id: Ic887c74152f5a4b259392dad402952b3777268b1
Diffstat (limited to 'Swiften/Network/UnitTest')
-rw-r--r-- | Swiften/Network/UnitTest/ConnectorTest.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/Swiften/Network/UnitTest/ConnectorTest.cpp b/Swiften/Network/UnitTest/ConnectorTest.cpp index 8524439..658aaf7 100644 --- a/Swiften/Network/UnitTest/ConnectorTest.cpp +++ b/Swiften/Network/UnitTest/ConnectorTest.cpp @@ -26,6 +26,7 @@ class ConnectorTest : public CppUnit::TestFixture { CPPUNIT_TEST(testConnect); CPPUNIT_TEST(testConnect_NoServiceLookups); CPPUNIT_TEST(testConnect_NoServiceLookups_DefaultPort); + CPPUNIT_TEST(testConnect_OnlyLiteral); CPPUNIT_TEST(testConnect_FirstAddressHostFails); CPPUNIT_TEST(testConnect_NoSRVHost); CPPUNIT_TEST(testConnect_NoHosts); @@ -119,6 +120,21 @@ class ConnectorTest : public CppUnit::TestFixture { CPPUNIT_ASSERT(!std::dynamic_pointer_cast<DomainNameResolveError>(error)); } + void testConnect_OnlyLiteral() { + auto testling = Connector::create("1.1.1.1", 1234, boost::none, resolver, connectionFactory, timerFactory); + testling->onConnectFinished.connect(boost::bind(&ConnectorTest::handleConnectorFinished, this, _1, _2)); + + auto address1 = HostAddress::fromString("1.1.1.1").get(); + connectionFactory->failingPorts.push_back(HostAddressPort(address1, 1234)); + + testling->start(); + eventLoop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(connections.size())); + CPPUNIT_ASSERT(!connections[0]); + CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(connectionFactory->createdConnections.size())); + } + void testConnect_FirstAddressHostFails() { Connector::ref testling(createConnector()); @@ -356,12 +372,15 @@ class ConnectorTest : public CppUnit::TestFixture { } std::shared_ptr<Connection> createConnection() { - return std::make_shared<MockConnection>(failingPorts, isResponsive, eventLoop); + auto connection = std::make_shared<MockConnection>(failingPorts, isResponsive, eventLoop); + createdConnections.push_back(connection); + return connection; } EventLoop* eventLoop; bool isResponsive; std::vector<HostAddressPort> failingPorts; + std::vector<std::shared_ptr<MockConnection>> createdConnections; }; private: |