summaryrefslogtreecommitdiffstats
path: root/tests/auto/network
Commit message (Collapse)AuthorAgeFilesLines
* Add unit test for BackgroundRequestAttributeShane Kearns2012-04-131-1/+47
| | | | | Change-Id: I807953cac3d23825461f9ae860badbd148835330 Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* Add unit test for usagePoliciesShane Kearns2012-04-112-1/+32
| | | | | Change-Id: I749268d81521d84ffc709014963a0f34fbf6d74c Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Merge remote-tracking branch 'origin/master' into api_changesOswald Buddenhagen2012-04-104-3/+61
|\ | | | | | | | | | | | | | | | | | | Conflicts: configure src/widgets/styles/qwindowsxpstyle.cpp tests/auto/gui/kernel/qwindow/qwindow.pro tests/auto/gui/kernel/qwindow/tst_qwindow.cpp Change-Id: I624b6d26abce9874c610c04954c1c45bc074bef3
| * Fix MSVC warnings in tests.Friedemann Kleint2012-04-021-2/+3
| | | | | | | | | | | | | | | | | | - Unused variables - conversion truncations - Overflow in expressions like '-1 + sizeof()' Change-Id: Ibbd18497951e9e7e9dccaf596cb4e864b69ec02c Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
| * Fix QTcpServer::listen() returning true when the port is in use on OS X.Robin Burchell2012-04-021-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Way back in the mists of time, someone added SO_REUSEPORT to socket binding, which was great, because otherwise it meant that multiple UDP sockets couldn't share the same port on OS X (as platforms with SO_REUSEPORT apparently don't support rebinding with SO_REUSEADDR). However: SO_REUSEPORT also means that *any* bind on a port will succeed, which is most definitely not wanted in the case of TCP sockets, so check the socket type before performing the actual bind. Also test that multiple listens don't take effect. Change-Id: I2f8d450bcfb8a7f3abd8918a4e789a850281dd13 Done-with: Thiago Macieira Done-with: Shane Kearns Task-number: QTBUG-6305 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
| * Fix multicast join/leave when binding to QHostAddress::Any.Robin Burchell2012-04-021-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On OS X and Windows, this was not working, because the socket was being bound in v6 mode (due to ::Any being for dual mode), but the address passed was a v4 address, meaning it took the wrong codepath. Linux, strangely, apparently works anyway. This is fixable in OS X (by using the v6 join path when bound in v6/dual mode), but the same fix doesn't work on Windows, failing with WSAEADDRNOTAVAIL. Don't allow this behaviour, and provide a sane error message telling the user what to do instead. Done-with: Shane Kearns Task-number: QTBUG-25047 Change-Id: Iaf5bbee82e13ac92e11b60c558f5af9ce26f474b Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
| * QNetworkAccessFtpBackend: remove entry from QNetworkAccessCacheMartin Petersson2012-04-011-0/+32
| | | | | | | | | | | | | | | | | | | | | | When FTP login fails we fail to remove the entry from the cache. This is because the cache key is created from the url with the userInfo. So this needs to be set again to match the key used when inserted. Task-number: QTBUG-11824 Change-Id: Ib3fd2d737581653ae59c56d0810d42e2d8dc2176 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
| * Fix some compiler warnings in tests.Friedemann Kleint2012-03-271-1/+1
| | | | | | | | | | | | | | | | - Unused variables - Deprecated conversion from const char * to char *. Change-Id: Iea0b9c4613ea74cead6d95ba12ad1028f531cbff Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* | QHostAddress: improve qHash implementationGiuseppe D'Angelo2012-04-081-0/+2
| | | | | | | | | | | | | | | | | | | | Avoid the conversion to a temporary QString -- just hash the address as a byte array. Change-Id: Ic35cdbbc3ee66c32a28d911bd27de0092395979f Done-with: Shane Kearns Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* | Port to the new QUrl APIThiago Macieira2012-03-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The use of any broken-down components of the query now needs QUrlQuery. The QUrl constructor and toString() are now rehabilitated and the preferred forms. Use toEncoded() and fromEncoded() now only when we need to store data in a QByteArray or the data comes from a QByteArray anyway. Change to toString() or the constructor if the data was in a QString. Change-Id: I9d761a628bef9c70185a48e927a61779a1642342 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* | Port QHostAddress to use the new IP utilities in QtCoreThiago Macieira2012-03-281-15/+17
| | | | | | | | | | | | | | | | | | | | | | The new code now generates lowercase hex instead of uppercase, so adapt the unit tests to pass. Also, "123.0.0" is now considered valid (compatibility with inet_aton). Change-Id: I07b5125abf60106dc5e706033d60836fb690a41f Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* | Merge master into api_changesKent Hansen2012-03-231-0/+79
|\| | | | | | | Change-Id: I93551e4d13a1b0815b359b9415060e9089477db1
| * Allow autobound UDP sockets to send to IPv4 and IPv6Shane Kearns2012-03-221-0/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When writeDatagram is called without first binding the UDP socket, then bind it as QHostAddress::Any. This allows the same socket to be used to sent to both IPv4 and IPv6 destination addresses. Allowing the OS to autobind the socket inside sendTo() may result in a single protocol socket. Task-number: QTBUG-5275 Change-Id: I2b76507e8a8a38369c6eafb61ce4191d1d6cc930 Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* | tst_qsslsocket*: don't inherit from QSharedPointerMarc Mutz2012-03-233-66/+42
| | | | | | | | | | | | | | | | | | | | | | | | QSharedPointer is about to become final. Instead of inheriting from it to add implicit conversions to and from QSslSocket*, make QSslSocketPtr a typedef, and make the conversions explicit. Change-Id: I4eebb262ab5aef348f4d676f9e839325d4ed13da Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | tst_qnetworkreply: don't inherit from QSharedPointerMarc Mutz2012-03-231-146/+145
|/ | | | | | | | | | | | | | | QSharedPointer isn't meant to be used as a base class. Instead of inheriting from it to add implicit conversions to and from QNetworkReply*, make QNetworkReplyPtr a typedef, overload two oft-used functions to take a QNetworkReplyPtr in addition to QNetworkReply*, and otherwise make the conversions explicit. Change-Id: I1eff1793a19f2d5bad1cce8de74c0786675a50f3 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
* Fix QDnsLookup autotest failure in CI environmentShane Kearns2012-03-151-4/+6
| | | | | | | | | | | | | | The DNS server can legitimately include NS and A records for the authoritative name server in addition to the DNS records that were requested. These are now ignored when checking the reply (we only check results that match the query, rather than failing if a result is for a different host name than the query). Task-number: QTBUG-24698 Change-Id: I327f31d58cdca50c7df6b32b275d7f28b56405f0 Reviewed-by: Jeremy Lainé <jeremy.laine@m4x.org> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Mark unstable windows network testsShane Kearns2012-03-086-0/+25
| | | | | | | | | | | | | | This is unfortunately still "most of them", because of QTBUG-24451 however some of the unit tests are still possible to test stably. Also skipped test cases which would hang forever due to QTBUG-24451. Bearer tests are not run, because they pass when test machine has no wireless LAN, but fail or hang if it does (QTBUG-24503) Change-Id: Icf99d45707102d2ef9219ed0b5ad521605716219 Reviewed-by: Sergio Ahumada <sergio.ahumada@nokia.com> Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Rework QNetworkProxyFactory::systemProxyForQuery autotestShane Kearns2012-03-081-21/+76
| | | | | | | | | | | | | | | | Rather than requiring specific hardcoded proxies in the system, it now checks the proxies returned by the system have the required capabilities for the request. Note the test will pass if no proxy is configured (as QNetworkProxy::NoProxy has all required capabilities) The test prints the returned proxy lists and elapsed time diagnostic for manual comparison and debugging. Change-Id: I621ef4d1d7264a98c3e8bd485c30bc1166fcbdf0 Task-number: QTBUG-19454 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Mark tst_QNetworkReply::getThenDeleteObject as unstableShane Kearns2012-03-081-0/+1
| | | | | | | | | | It's unstable on all platforms, because the reply can be finished due to a race with the http thread. It isn't crashing (which the test was trying to test for), but rather the QVERIFY(!reply->isFinished()) fails, which is an inconclusive verdict. Change-Id: Ib815a7cedd220544a0c9cb83023e3334df4a0fb3 Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* tst_qnetworkreply - remove qRegisterMetaType duplicatesShane Kearns2012-03-081-28/+0
| | | | | | | | | | The metatypes are registered in the constructor, don't need to register them in test cases as well. Registering in a test case is bad practice, as it could result in tests failing when run individually due to unknown metatype. Change-Id: Ic4d65d0f5fe3cdd3ab57cf2512a4906d71205a05 Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* Add windows XFAIL to qnetworkreply autotestShane Kearns2012-03-081-0/+4
| | | | | | | | The test case that depends on QLocalSocket consistently fails due to bugs in QLocalSocket windows implementation Change-Id: Ibfe9eb3590be4f72b52f14cd4fbe5be61f6cf70e Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
* Fix tst_QNetworkReply::httpWithNoCredentialUsage autotestShane Kearns2012-03-061-16/+39
| | | | | | | | | | | | The test was testing the wrong thing, and passing even though QNetworkRequest::AuthenticationReuseAttribute was not being respected, until recently when I fixed username/password in URLs Now the cache is properly bypassed when this attribute is set to manual, and the autotest is updated to check this. Change-Id: I87943515562d0b16b03504f0758ba265758d1c22 Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* Fix QNetworkReply ioGetFromHttpWithCache test caseShane Kearns2012-03-061-0/+1
| | | | | | | | | | | | | | Expiration date is calculated from max-age header when a response is inserted into the cache. Because the test case is prepopulating the cache outside of QNAM's control, the expiration date was uninitialised, causing the test to fail. This is due to a 2 year old change in QNAM, where max age calculation was removed from cache retrieval, and more recent changes to QDateTime where secsTo() returns 0 if one of the arguments is invalid. Change-Id: Ieecd46123dde4ca0fd0be3ae79e70e1528ec02bc Reviewed-by: Martin Petersson <Martin.Petersson@nokia.com>
* QSslCertificate - make lazy initialisation thread safeShane Kearns2012-03-061-0/+72
| | | | | | | | | | | | | | | | | | | QSslCertificate can be copied around into multiple threads, without detaching. For example, the https worker threads inside QNetworkAccessManager. There are const methods, which lazily initialise members of the private class without detaching (i.e. caching results of expensive function calls) These functions now lock the d pointer using QMutexPool to avoid concurrency related crashes. autotest crashes 20% of the time in release builds without the fix, passes 100 times in a row with the fix. Task-number: QTBUG-20452 Change-Id: I64a01af8159216f2dd6215a08669890f6c029ca8 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Richard J. Moore <rich@kde.org>
* Merge remote-tracking branch 'origin/api_changes'Lars Knoll2012-03-042-5/+5
|\ | | | | | | | | | | | | | | | | | | Conflicts: dist/changes-5.0.0 mkspecs/features/qt_module_config.prf qmake/project.cpp qmake/property.cpp Change-Id: I6e4af40743a9aeff8ed18533a48036e332acc296
| * Make some tests and benchmarks pass with QT_NO_QSTRINGBUILDERStephen Kelly2012-03-012-5/+5
| | | | | | | | | | Change-Id: I6c91a613007043d0f26ac11e98353a0b9ce646ae Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Change bugreports.qt.nokia.com -> bugreports.qt-project.orgSergio Ahumada2012-03-021-1/+1
| | | | | | | | | | Change-Id: Ia795098f24cf358b15067f54cd08dff0bd792bc5 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* | Use QSystemError for QDnsLookup windows backendShane Kearns2012-03-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | The OS provides the error string in this case. This gives more information to the developer seeing a generic error. Change-Id: Ia03642982f3513ee5a8a9fa98d918e948f8d97a5 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Richard J. Moore <rich@kde.org>
* | Windows - fix getsockopt calls for narrower than int optionsShane Kearns2012-03-011-0/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Windows unhelpfully writes to only one byte of the output buffer when getsockopt is called for a boolean option. Therefore we have to zero initialise the int rather than initialising to -1 as was done before. This in general only works for little endian architecture, because the word would look like 0x01000000 on big endian. So I have added some compile time asserts in the assumption that windows is always little endian. This is ok for comparisons with 0/false, but not comparisons with true or nonzero values. In the case of IPV6_V6ONLY, it is documented as DWORD (unsigned int) but on some windows versions it is returned as a boolean triggering the warning. I removed the warning, as the conversion to int works on both LE and BE since it is only compared with zero. Task-number: QTBUG-23488 Change-Id: I3c586d1ada76465fc045a82661f289920c657a4c Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>
* | network cookies: check "example.com" != "example.com."Shane Kearns2012-02-291-0/+12
|/ | | | | | | | Only test code change, we already have the correct behaviour Task-number: QTBUG-20001 Change-Id: I2296f405f47f9c8d15796e69f9d1854063e38d6a Reviewed-by: Richard J. Moore <rich@kde.org>
* Changed qnetworkreply unittest to return correct codeKurt Korbatits2012-02-271-7/+5
| | | | | | | | - Changed waitForFinished() to return correct return code Change-Id: Ic6b0dfa195254783a2106011c4a108d907d73557 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* clean up qmake-generated projectsOswald Buddenhagen2012-02-242-14/+0
| | | | | | | | remove "header" and assignmets which are defaults or bogus, reorder some assignments. Change-Id: I67403872168c890ca3b696753ceb01c605d19be7 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* compile fix: missing #include <unistd.h>sMarc Mutz2012-02-232-0/+6
| | | | | Change-Id: I3bd34f67033fb921c49da97419c107811d8da6ff Reviewed-by: David Faure <faure@kde.org>
* Fix the qlocalsocket testAndrew Stanley-Jones2012-02-211-1/+3
| | | | | | | | | | | | | | | | | This test is broken in a couple of ways. A few one line fixes combined into a single patch. 1. Linux is the only OS that does abstract unix domain sockets by prepending a null as the first character. Don't test this on non-Linux platforms and expect it to pass. 2. Change QVERIFY2 to QCOMPARE so we can see why this fails in CI but no on the local system. Use QCOMPARE where possible. Change-Id: Ic3d2cf9696730dc4d6589539fdfe8a48ccf28de5 Reviewed-by: Alex <alex.blasche@nokia.com>
* Enable qlocalsocket auto testAndrew Stanley-Jones2012-02-211-1/+1
| | | | | | | | Due to recent changes in the test it should now compile and run properly. This re-enables the test. Change-Id: I6c647d99fa1f1b1c53e006fef2865d6be08ec16c Reviewed-by: Alex <alex.blasche@nokia.com>
* Test for QT_NO_SSL instead of QT_NO_OPENSSLShane Kearns2012-02-218-64/+64
| | | | | | | | Change the ifdefs in our own code (except openssl backend) to use the new configure flag. Change-Id: I8774734771c66b22164b5fae8fdb27814ac3df7b Reviewed-by: Richard J. Moore <rich@kde.org>
* Changed qnetworksession unittest to work from installation dirKurt Korbatits2012-02-212-1/+6
| | | | | | | | - Made test depend on subprogram - added install of subprogram Change-Id: Ib263e9e75ed3c900b52fb1c9b6d319e71d19bdbb Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Changed qabstractnetworkcache unittest to use TESTDATAKurt Korbatits2012-02-201-5/+1
| | | | | | | | - Changed qabstractnetworkcache to install testdata Change-Id: I8f2ae6103214755ee7898dbc0ee50c0e4d7d45ab Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* Fix handling of urls containing username/password in QNetworkAccessManagerShane Kearns2012-02-171-10/+53
| | | | | | | | | | | | | | | | | | QNetworkAccessManager was ignoring the supplied credentials, although webkit seems to support these urls at a higher level. Following the behaviour of browsers: We use supplied credentials if authentication is required. We add supplied credentials to the authentication cache. We emit authenticationRequired signal if the credentials were wrong. We do not use previously cached credentials for that url Synchronous http requests fail, if the credentials were wrong. Task-number: QTBUG-18107 Change-Id: If46e8eab1511ba8a0f4bbe0d4efaabc4df0b8ab4 Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Changed qnetworkreply unittest to work from install directoryKurt Korbatits2012-02-174-289/+243
| | | | | | | | | | | | | | | | | - made subdir test depend on echo - remove SRCDIR and changed to use TESTDATA and QFINDTESTDATA - added waitForFinish() to handle slow networks - removed core module header from echo subprogram and replaced with needed header only - Added ipv6 skip to connectToIPV6Address() if not available - Added check QT_BUILD_INTERNAL and skip tests if backend not available - Skip permission tests if run as root - Removed win32 debug and release directory locations so that application is in known location relative to test data Change-Id: I58c3c2fca3cd2fee72fdb81d016bb4fd7fe08ac2 Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Changed qsslkey to work from installation directoryKurt Korbatits2012-02-172-52/+12
| | | | | | | | - Changed to use TESTDATA and QFINDTESTDATA instead of SRCDIR Change-Id: I30bf175c2c9044e1f8556260a032467ca0dfc09f Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com> Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
* Changed qsslcertificate unittest to work from install directoryKurt Korbatits2012-02-172-63/+38
| | | | | | | | - Changed to use TESTDATA and QFINDTESTDATA instead of SRCDIR Change-Id: I1957ef287ba2f337b5e0b2c6245d872eacb6316f Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com> Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Eliminate duplicate data row names in network autotestsJason McDonald2012-02-164-23/+24
| | | | | Change-Id: Icbfc24309a182f37268232fc3c299d35d6d6a0ea Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Allow the QLocalServer to listen to a native descriptorAndrew Stanley-Jones2012-02-151-4/+100
| | | | | | | | | | | | | QLocalServer could only listen to sockets it created. Thi is not always possible as sockets may be passed by socketpair() or have to be created locally by other means. This adds a similar feature to QLocalSocket where a native descriptor maybe used. Change-Id: I43b0af179b3b868dd164d4e1fd312ff4546cf9ff Reviewed-by: Michalina Ziemba <michalina.ziemba@nokia.com> Reviewed-by: Tapani Mikola <tapani.mikola@nokia.com> Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
* Abort FTP download, not the whole applicationShane Kearns2012-02-151-0/+24
| | | | | | | | | | An old coding error meant that the C runtime abort() function was being called instead of QFtp::abort() when cancelling an FTP download using QNetworkReply::close() Task-number: QTBUG-22820 Change-Id: Ib97fda9769b2b55a08c042c66c4444cb6216d2b1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Windows: Fixed helper process finding in network testsMiikka Heikkinen2012-02-154-11/+44
| | | | | | | | | | | | | | | | | | | | Helper processes were not found properly on all network tests when the test was run with "nmake check": - tst_qtcpsocket - tst_qtcpserver - tst_qnetworksession - tst_qnetworkreply Task-number: QTBUG-24199 Task-number: QTBUG-24203 Task-number: QTBUG-24226 Task-number: QTBUG-24231 Task-number: QTBUG-24232 Change-Id: Ia4451b5a5e3fe9f81aba3837baf8292411f995d8 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Shane Kearns <ext-shane.2.kearns@nokia.com>
* Make "nmake check" pass for network tests in Windows.Miikka Heikkinen2012-02-142-0/+4
| | | | | | | | | | | | Marked two tests insignificant due to failures, these need to be fixed later and then re-enabled: - tst_qnetworkreply - tst_qsslsocket Task-number: QTBUG-24203 Change-Id: I9647833bf15fe5a340d7ef59e1dcb007a92677dc Reviewed-by: Sergio Ahumada <sergio.ahumada@nokia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Add socketOptions flags to QLocalServerAndrew Stanley-Jones2012-02-101-0/+55
| | | | | | | | | | QLocalServer had no way to set socket options that more complicated servers require. The first set of options allow setting of access control on the sockets. Change-Id: If4268c66462fc2e6cf1e70b1d5f56c76d2c69228 Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
* Replace Q_WS_WINCE against Q_OS_WINCE.Andreas Holzammer2012-02-091-1/+1
| | | | | | | | | | Window system Macros where deprecated so use Q_OS_WINCE for now. This code will need some refactoring, but this is the first step to it. Change-Id: I5876b80ee45d4b38ac63fc7d51e775dc70bbd485 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Fix qlocalsocket autotestHarald Fernengel2012-02-081-19/+11
| | | | | | | | | Lackey is currently not built due to a qscript dependency. Mark the test as an expected failure, so we can resume testing QLocalSocket again. See QTBUG-24142 Change-Id: I2642ed30cf7a2068f30f63801c632fea7dae7691 Reviewed-by: Andrew Stanley-Jones <andrew.stanley-jones@nokia.com>