aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/remotelinux/linuxdevicetester.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/remotelinux/linuxdevicetester.cpp')
-rw-r--r--src/plugins/remotelinux/linuxdevicetester.cpp65
1 files changed, 50 insertions, 15 deletions
diff --git a/src/plugins/remotelinux/linuxdevicetester.cpp b/src/plugins/remotelinux/linuxdevicetester.cpp
index 3d6c41cd65..f279bc0c38 100644
--- a/src/plugins/remotelinux/linuxdevicetester.cpp
+++ b/src/plugins/remotelinux/linuxdevicetester.cpp
@@ -3,6 +3,7 @@
#include "linuxdevicetester.h"
+#include "linuxdevice.h"
#include "remotelinuxtr.h"
#include <projectexplorer/devicesupport/deviceusedportsgatherer.h>
@@ -17,6 +18,8 @@
#include <utils/qtcassert.h>
#include <utils/stringutils.h>
+#include <QFutureWatcher>
+
using namespace ProjectExplorer;
using namespace Tasking;
using namespace Utils;
@@ -43,9 +46,13 @@ public:
const Storage<TransferStorage> &storage) const;
GroupItem transferTasks() const;
GroupItem commandTasks() const;
+ void runCommandTests();
+
+ bool isRunning() const { return m_connectionTest || m_taskTreeRunner.isRunning(); }
GenericLinuxDeviceTester *q = nullptr;
- IDevice::Ptr m_device;
+ LinuxDevice::Ptr m_device;
+ QFutureWatcher<bool> *m_connectionTest = nullptr;
TaskTreeRunner m_taskTreeRunner;
QStringList m_extraCommands;
QList<GroupItem> m_extraTests;
@@ -276,6 +283,20 @@ GroupItem GenericLinuxDeviceTesterPrivate::commandTasks() const
return root;
}
+void GenericLinuxDeviceTesterPrivate::runCommandTests()
+{
+ const Group root {
+ echoTask("Hello"), // No quoting necessary
+ echoTask("Hello Remote World!"), // Checks quoting, too.
+ unameTask(),
+ gathererTask(),
+ transferTasks(),
+ m_extraTests,
+ commandTasks()
+ };
+ m_taskTreeRunner.start(root);
+}
+
} // namespace Internal
using namespace Internal;
@@ -302,26 +323,40 @@ void GenericLinuxDeviceTester::setExtraTests(const QList<GroupItem> &extraTests)
void GenericLinuxDeviceTester::testDevice(const IDevice::Ptr &deviceConfiguration)
{
- QTC_ASSERT(!d->m_taskTreeRunner.isRunning(), return);
+ QTC_ASSERT(!d->isRunning(), return);
- d->m_device = deviceConfiguration;
+ emit progressMessage(Tr::tr("Connecting to device..."));
- const Group root {
- d->echoTask("Hello"), // No quoting necessary
- d->echoTask("Hello Remote World!"), // Checks quoting, too.
- d->unameTask(),
- d->gathererTask(),
- d->transferTasks(),
- d->m_extraTests,
- d->commandTasks()
- };
- d->m_taskTreeRunner.start(root);
+ d->m_device = std::static_pointer_cast<LinuxDevice>(deviceConfiguration);
+
+ d->m_connectionTest = new QFutureWatcher<bool>(this);
+ d->m_connectionTest->setFuture(d->m_device->tryToConnect());
+
+ connect(d->m_connectionTest, &QFutureWatcher<bool>::finished, this, [this] {
+ const bool success = d->m_connectionTest->result();
+ d->m_connectionTest->deleteLater();
+ d->m_connectionTest = nullptr;
+ if (success) {
+ emit progressMessage(Tr::tr("Connected. Now doing extended checks.\n"));
+ d->runCommandTests();
+ } else {
+ emit errorMessage(
+ Tr::tr("Basic connectivity test failed, device is considered unusable."));
+ emit finished(TestFailure);
+ }
+ });
}
void GenericLinuxDeviceTester::stopTest()
{
- QTC_ASSERT(d->m_taskTreeRunner.isRunning(), return);
- d->m_taskTreeRunner.reset();
+ QTC_ASSERT(d->isRunning(), return);
+ if (d->m_connectionTest) {
+ d->m_connectionTest->disconnect();
+ d->m_connectionTest->cancel();
+ d->m_connectionTest = nullptr;
+ } else {
+ d->m_taskTreeRunner.reset();
+ }
emit finished(TestFailure);
}