summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2023-05-11 10:17:44 -0700
committerThiago Macieira <thiago.macieira@intel.com>2023-05-16 12:00:17 -0700
commite43512d942485dfc0b3bbe2e142e0f3ae53b0c43 (patch)
treed944f905cb784757d3cb13651aa656ce4ea2448e /tests
parent6577e74a3df82886be9029dc7355fb5ccd294e91 (diff)
tst_QDnsLookup: don't fail if the server refused to answer
This happens often for me for ANY queries via Dnsmasq (home router) or via whatever the corporate DNS servers are in the office. Change-Id: I3e3bfef633af4130a03afffd175e2656ae5e2c3e Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> (cherry picked from commit af9fa21a70c485accd152995f47cfafb0d0341d4)
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp69
1 files changed, 35 insertions, 34 deletions
diff --git a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
index 689abf38c7..cbfd53dd38 100644
--- a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
+++ b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
@@ -19,6 +19,7 @@ class tst_QDnsLookup: public QObject
const QString normalDomain = u".test.qt-project.org"_s;
const QString idnDomain = u".alqualondë.test.qt-project.org"_s;
bool usingIdnDomain = false;
+ bool dnsServersMustWork = false;
QString domainName(const QString &input);
QString domainNameList(const QString &input);
@@ -39,6 +40,8 @@ private slots:
void tst_QDnsLookup::initTestCase()
{
+ if (qgetenv("QTEST_ENVIRONMENT") == "ci")
+ dnsServersMustWork = true;
}
QString tst_QDnsLookup::domainName(const QString &input)
@@ -146,38 +149,6 @@ void tst_QDnsLookup::lookup_data()
QTest::newRow("txt-multi-multirr") << int(QDnsLookup::TXT) << "txt-multi-multirr" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello;World";
}
-static QByteArray msgDnsLookup(QDnsLookup::Error actualError,
- int expectedError,
- const QString &domain,
- const QString &cname,
- const QString &host,
- const QString &srv,
- const QString &mx,
- const QString &ns,
- const QString &ptr,
- const QString &errorString)
-{
- QString result;
- QTextStream str(&result);
- str << "Actual error: " << actualError;
- if (!errorString.isEmpty())
- str << " (" << errorString << ')';
- str << ", expected: " << expectedError;
- str << ", domain: " << domain;
- if (!cname.isEmpty())
- str << ", cname: " << cname;
- str << ", host: " << host;
- if (!srv.isEmpty())
- str << " server: " << srv;
- if (!mx.isEmpty())
- str << " mx: " << mx;
- if (!ns.isEmpty())
- str << " ns: " << ns;
- if (!ptr.isEmpty())
- str << " ptr: " << ptr;
- return result.toLocal8Bit();
-}
-
void tst_QDnsLookup::lookup()
{
QFETCH(int, type);
@@ -213,8 +184,38 @@ void tst_QDnsLookup::lookup()
QEXPECT_FAIL("", "Not yet supported on Android", Abort);
#endif
- QVERIFY2(int(lookup.error()) == error,
- msgDnsLookup(lookup.error(), error, domain, cname, host, srv, mx, ns, ptr, lookup.errorString()));
+ auto extraErrorMsg = [&] () {
+ QString result;
+ QTextStream str(&result);
+ str << "Actual error: " << lookup.error();
+ if (QString errorString = lookup.errorString(); !errorString.isEmpty())
+ str << " (" << errorString << ')';
+ str << ", expected: " << error;
+ str << ", domain: " << domain;
+ if (!cname.isEmpty())
+ str << ", cname: " << cname;
+ str << ", host: " << host;
+ if (!srv.isEmpty())
+ str << " server: " << srv;
+ if (!mx.isEmpty())
+ str << " mx: " << mx;
+ if (!ns.isEmpty())
+ str << " ns: " << ns;
+ if (!ptr.isEmpty())
+ str << " ptr: " << ptr;
+ return result.toLocal8Bit();
+ };
+
+ if (!dnsServersMustWork && (lookup.error() == QDnsLookup::ServerFailureError
+ || lookup.error() == QDnsLookup::ServerRefusedError)) {
+ // It's not a QDnsLookup problem if the server refuses to answer the query.
+ // This happens for queries of type ANY through Dnsmasq, for example.
+ qWarning("Server refused or was unable to answer query; %s", extraErrorMsg().constData());
+ return;
+ }
+
+ QVERIFY2(int(lookup.error()) == error, extraErrorMsg());
+
if (error == QDnsLookup::NoError)
QVERIFY(lookup.errorString().isEmpty());
QCOMPARE(int(lookup.type()), type);