qt: Handle if gpg does not support tofu in test
authorAndre Heinecke <aheinecke@intevation.de>
Thu, 30 Mar 2017 12:36:49 +0000 (14:36 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Thu, 30 Mar 2017 12:44:42 +0000 (14:44 +0200)
* lang/qt/src/t-tofuinfo.cpp (TestTofuInfo::testSupported): Treat
it as unsupported if secret keylisting already fails.

--
The likely cause of this is that the agent can't be started
because the trust model is unsupported. Other tests check
that keylisting actually works.

lang/qt/tests/t-tofuinfo.cpp

index e16b1fd..8d040bc 100644 (file)
@@ -118,7 +118,24 @@ Q_SIGNALS:
 private:
     bool testSupported()
     {
-        return !(GpgME::engineInfo(GpgME::GpgEngine).engineVersion() < "2.1.16");
+        static bool initialized, supported;
+        if (initialized) {
+            return supported;
+        }
+        initialized = true;
+        if (GpgME::engineInfo(GpgME::GpgEngine).engineVersion() < "2.1.16") {
+            return false;
+        }
+        // If the keylist fails here this means that gnupg does not
+        // support tofu at all. It can be disabled at compile time. So no
+        // tests.
+        auto *job = openpgp()->keyListJob(false, false, false);
+        job->addMode(GpgME::WithTofu);
+        std::vector<GpgME::Key> keys;
+        job->exec(QStringList() << QStringLiteral("zulu@example.net"), true, keys);
+        delete job;
+        supported = !keys.empty();
+        return supported;
     }
 
     void testTofuCopy(TofuInfo other, const TofuInfo &orig)
@@ -402,6 +419,10 @@ private Q_SLOTS:
 
     void testTofuConflict()
     {
+        if (!testSupported()) {
+            return;
+        }
+
         if (GpgME::engineInfo(GpgME::GpgEngine).engineVersion() < "2.1.19") {
             return;
         }