aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.cpp8
-rw-r--r--src/libs/ssh/ssh.qbs8
-rw-r--r--src/libs/ssh/sshconnection.cpp91
-rw-r--r--src/libs/ssh/sshconnection.h13
-rw-r--r--src/libs/utils/tooltip/tips.cpp2
5 files changed, 116 insertions, 6 deletions
diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp
index 8e2dc530539..dd2b7628eb1 100644
--- a/src/libs/languageserverprotocol/servercapabilities.cpp
+++ b/src/libs/languageserverprotocol/servercapabilities.cpp
@@ -281,11 +281,11 @@ Utils::optional<Utils::variant<QString, bool> >
ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::changeNotifications() const
{
using RetType = Utils::variant<QString, bool>;
- const QJsonValue &provider = value(implementationProviderKey);
- if (provider.isUndefined())
+ const QJsonValue &change = value(changeNotificationsKey);
+ if (change.isUndefined())
return Utils::nullopt;
- return Utils::make_optional(provider.isBool() ? RetType(provider.toBool())
- : RetType(provider.toString()));
+ return Utils::make_optional(change.isBool() ? RetType(change.toBool())
+ : RetType(change.toString()));
}
void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications(
diff --git a/src/libs/ssh/ssh.qbs b/src/libs/ssh/ssh.qbs
index 0b940452c3d..295117c0714 100644
--- a/src/libs/ssh/ssh.qbs
+++ b/src/libs/ssh/ssh.qbs
@@ -4,7 +4,13 @@ Project {
name: "QtcSsh"
QtcLibrary {
- cpp.defines: base.concat("QTCSSH_LIBRARY")
+ cpp.defines: {
+ var defines = base;
+ defines.push("QTCSSH_LIBRARY");
+ if (project.withAutotests && !defines.contains("WITH_TESTS"))
+ defines.push("WITH_TESTS");
+ return defines;
+ }
cpp.enableExceptions: true
Depends { name: "Qt"; submodules: ["widgets", "network" ] }
diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp
index 4e695cbbfc5..2e07e12bbad 100644
--- a/src/libs/ssh/sshconnection.cpp
+++ b/src/libs/ssh/sshconnection.cpp
@@ -404,4 +404,95 @@ SftpTransferPtr SshConnection::setupTransfer(
d->connectionArgs(SshSettings::sftpFilePath())));
}
+#ifdef WITH_TESTS
+namespace SshTest {
+const QString getHostFromEnvironment()
+{
+ const QString host = QString::fromLocal8Bit(qgetenv("QTC_SSH_TEST_HOST"));
+ if (host.isEmpty() && qEnvironmentVariableIsSet("QTC_SSH_TEST_DEFAULTS"))
+ return QString("127.0.0.1");
+ return host;
+}
+
+quint16 getPortFromEnvironment()
+{
+ const int port = qEnvironmentVariableIntValue("QTC_SSH_TEST_PORT");
+ return port != 0 ? quint16(port) : 22;
+}
+
+const QString getUserFromEnvironment()
+{
+ return QString::fromLocal8Bit(qgetenv("QTC_SSH_TEST_USER"));
+}
+
+const QString getKeyFileFromEnvironment()
+{
+ const FilePath defaultKeyFile = FileUtils::homePath() / ".ssh/id_rsa";
+ const QString keyFile = QString::fromLocal8Bit(qgetenv("QTC_SSH_TEST_KEYFILE"));
+ if (keyFile.isEmpty()) {
+ if (qEnvironmentVariableIsSet("QTC_SSH_TEST_DEFAULTS"))
+ return defaultKeyFile.toString();
+ }
+ return keyFile;
+}
+
+const QString userAtHost()
+{
+ QString userMidFix = getUserFromEnvironment();
+ if (!userMidFix.isEmpty())
+ userMidFix.append('@');
+ return userMidFix + getHostFromEnvironment();
+}
+
+SshConnectionParameters getParameters()
+{
+ SshConnectionParameters params;
+ if (!qEnvironmentVariableIsSet("QTC_SSH_TEST_DEFAULTS")) {
+ params.setUserName(getUserFromEnvironment());
+ params.privateKeyFile = Utils::FilePath::fromUserInput(getKeyFileFromEnvironment());
+ }
+ params.setHost(getHostFromEnvironment());
+ params.setPort(getPortFromEnvironment());
+ params.timeout = 10;
+ params.authenticationType = !params.privateKeyFile.isEmpty()
+ ? QSsh::SshConnectionParameters::AuthenticationTypeSpecificKey
+ : QSsh::SshConnectionParameters::AuthenticationTypeAll;
+ return params;
+}
+
+bool checkParameters(const QSsh::SshConnectionParameters &params)
+{
+ if (qEnvironmentVariableIsSet("QTC_SSH_TEST_DEFAULTS"))
+ return true;
+ if (params.host().isEmpty()) {
+ qWarning("No hostname provided. Set QTC_SSH_TEST_HOST.");
+ return false;
+ }
+ if (params.userName().isEmpty())
+ qWarning("No user name provided - test may fail with empty default. Set QTC_SSH_TEST_USER.");
+ if (params.privateKeyFile.isEmpty()) {
+ qWarning("No key file provided. Set QTC_SSH_TEST_KEYFILE.");
+ return false;
+ }
+ return true;
+}
+
+void printSetupHelp()
+{
+ qInfo() << "In order to run this test properly it requires some setup (example for fedora):\n"
+ "1. Run a server on the host to connect to:\n"
+ " systemctl start sshd\n"
+ "2. Create your own ssh key (needed only once). For fedora it needs ecdsa type:\n"
+ " ssh-keygen -t ecdsa\n"
+ "3. Make your public key known to the server (needed only once):\n"
+ " ssh-copy-id -i [full path to your public key] [user@host]\n"
+ "4. Set the env variables before executing test:\n"
+ " QTC_SSH_TEST_HOST=127.0.0.1\n"
+ " QTC_SSH_TEST_KEYFILE=[full path to your private key]\n"
+ " QTC_SSH_TEST_USER=[your user name]\n";
+}
+
+} // namespace SshTest
+#endif
+
} // namespace QSsh
diff --git a/src/libs/ssh/sshconnection.h b/src/libs/ssh/sshconnection.h
index 74aa9bdf525..d63b5b321f1 100644
--- a/src/libs/ssh/sshconnection.h
+++ b/src/libs/ssh/sshconnection.h
@@ -139,6 +139,19 @@ private:
SshConnectionPrivate * const d;
};
+#ifdef WITH_TESTS
+namespace SshTest {
+const QString QSSH_EXPORT getHostFromEnvironment();
+quint16 QSSH_EXPORT getPortFromEnvironment();
+const QString QSSH_EXPORT getUserFromEnvironment();
+const QString QSSH_EXPORT getKeyFileFromEnvironment();
+const QSSH_EXPORT QString userAtHost();
+SshConnectionParameters QSSH_EXPORT getParameters();
+bool QSSH_EXPORT checkParameters(const SshConnectionParameters &params);
+void QSSH_EXPORT printSetupHelp();
+} // namespace SshTest
+#endif
+
} // namespace QSsh
Q_DECLARE_METATYPE(QSsh::SshConnectionParameters::AuthenticationType)
diff --git a/src/libs/utils/tooltip/tips.cpp b/src/libs/utils/tooltip/tips.cpp
index 2a1f4f8093f..e8c3cae6df6 100644
--- a/src/libs/utils/tooltip/tips.cpp
+++ b/src/libs/utils/tooltip/tips.cpp
@@ -88,7 +88,7 @@ const QMetaObject *TipLabel::metaObject() const
struct qt_meta_stringdata_Utils_t {
const uint offsetsAndSize[2];
char stringdata0[24];
- } qt_meta_stringdata = { 8, sizeof("QTipLabel"), "QTipLabel" };
+ } qt_meta_stringdata = { {8, sizeof("QTipLabel")}, "QTipLabel" };
static const QMetaObject tipMetaObject {
&QLabel::staticMetaObject, // SuperData superdata