Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
PIM
libkleo
Commits
c3f83b3c
Commit
c3f83b3c
authored
Apr 21, 2021
by
Ingo Klöcker
Browse files
Add tests for the compliance label
This requires faking the "compliance" config value. GnuPG-bug-id: 5283
parent
de29db89
Changes
3
Hide whitespace changes
Inline
Side-by-side
autotests/newkeyapprovaldialogtest.cpp
View file @
c3f83b3c
...
...
@@ -11,6 +11,7 @@
#include <Libkleo/KeyCache>
#include <Libkleo/KeySelectionCombo>
#include <Libkleo/NewKeyApprovalDialog>
#include <Libkleo/Test>
#include <QCheckBox>
#include <QLabel>
...
...
@@ -55,7 +56,21 @@ enum class KeyUsage {
Encrypt
,
};
GpgME
::
Key
createTestKey
(
const
char
*
uid
,
GpgME
::
Protocol
protocol
=
GpgME
::
UnknownProtocol
,
KeyUsage
usage
=
KeyUsage
::
AnyUsage
)
auto
mapValidity
(
GpgME
::
UserID
::
Validity
validity
)
{
switch
(
validity
)
{
default:
case
GpgME
::
UserID
::
Unknown
:
return
GPGME_VALIDITY_UNKNOWN
;
case
GpgME
::
UserID
::
Undefined
:
return
GPGME_VALIDITY_UNDEFINED
;
case
GpgME
::
UserID
::
Never
:
return
GPGME_VALIDITY_NEVER
;
case
GpgME
::
UserID
::
Marginal
:
return
GPGME_VALIDITY_MARGINAL
;
case
GpgME
::
UserID
::
Full
:
return
GPGME_VALIDITY_FULL
;
case
GpgME
::
UserID
::
Ultimate
:
return
GPGME_VALIDITY_ULTIMATE
;
}
}
GpgME
::
Key
createTestKey
(
const
char
*
uid
,
GpgME
::
Protocol
protocol
=
GpgME
::
UnknownProtocol
,
KeyUsage
usage
=
KeyUsage
::
AnyUsage
,
GpgME
::
UserID
::
Validity
validity
=
GpgME
::
UserID
::
Full
)
{
static
int
count
=
0
;
count
++
;
...
...
@@ -63,6 +78,7 @@ GpgME::Key createTestKey(const char *uid, GpgME::Protocol protocol = GpgME::Unkn
gpgme_key_t
key
;
gpgme_key_from_uid
(
&
key
,
uid
);
Q_ASSERT
(
key
);
Q_ASSERT
(
key
->
uids
);
if
(
protocol
!=
GpgME
::
UnknownProtocol
)
{
key
->
protocol
=
protocol
==
GpgME
::
OpenPGP
?
GPGME_PROTOCOL_OpenPGP
:
GPGME_PROTOCOL_CMS
;
}
...
...
@@ -74,6 +90,7 @@ GpgME::Key createTestKey(const char *uid, GpgME::Protocol protocol = GpgME::Unkn
key
->
can_encrypt
=
int
(
usage
==
KeyUsage
::
AnyUsage
||
usage
==
KeyUsage
::
Encrypt
);
key
->
can_sign
=
int
(
usage
==
KeyUsage
::
AnyUsage
||
usage
==
KeyUsage
::
Sign
);
key
->
secret
=
1
;
key
->
uids
->
validity
=
mapValidity
(
validity
);
return
GpgME
::
Key
(
key
,
false
);
}
...
...
@@ -181,6 +198,7 @@ private Q_SLOTS:
createTestKey
(
"sender@example.net"
,
GpgME
::
CMS
,
KeyUsage
::
AnyUsage
),
createTestKey
(
"Full Trust <prefer-openpgp@example.net>"
,
GpgME
::
OpenPGP
,
KeyUsage
::
Encrypt
),
createTestKey
(
"Trusted S/MIME <prefer-smime@example.net>"
,
GpgME
::
CMS
,
KeyUsage
::
Encrypt
),
createTestKey
(
"Marginal Validity <marginal-openpgp@example.net>"
,
GpgME
::
OpenPGP
,
KeyUsage
::
Encrypt
,
GpgME
::
UserID
::
Marginal
),
});
}
...
...
@@ -822,6 +840,69 @@ private Q_SLOTS:
QVERIFY
(
!
okButton
->
isEnabled
());
}
void
test__vs_de_compliance__all_keys_fully_valid
()
{
const
GpgME
::
Protocol
forcedProtocol
=
GpgME
::
UnknownProtocol
;
const
bool
allowMixed
=
true
;
const
QString
sender
=
QStringLiteral
(
"sender@example.net"
);
const
KeyResolver
::
Solution
preferredSolution
=
{
GpgME
::
UnknownProtocol
,
{
testKey
(
"sender@example.net"
,
GpgME
::
OpenPGP
),
testKey
(
"sender@example.net"
,
GpgME
::
CMS
)},
{
{
QStringLiteral
(
"prefer-openpgp@example.net"
),
{
testKey
(
"Full Trust <prefer-openpgp@example.net>"
,
GpgME
::
OpenPGP
)}},
{
QStringLiteral
(
"prefer-smime@example.net"
),
{
testKey
(
"Trusted S/MIME <prefer-smime@example.net>"
,
GpgME
::
CMS
)}},
{
QStringLiteral
(
"sender@example.net"
),
{
testKey
(
"sender@example.net"
,
GpgME
::
OpenPGP
),
testKey
(
"sender@example.net"
,
GpgME
::
CMS
)}}
}
};
const
KeyResolver
::
Solution
alternativeSolution
=
{};
Tests
::
FakeCryptoConfigStringValue
fakeCompliance
{
"gpg"
,
"compliance"
,
QStringLiteral
(
"de-vs"
)};
const
auto
dialog
=
std
::
make_unique
<
NewKeyApprovalDialog
>
(
true
,
true
,
sender
,
preferredSolution
,
alternativeSolution
,
allowMixed
,
forcedProtocol
);
dialog
->
show
();
waitForKeySelectionCombosBeingInitialized
(
dialog
.
get
());
const
auto
complianceLabel
=
dialog
->
findChild
<
QLabel
*>
(
"compliance label"
);
verifyWidgetVisibility
(
complianceLabel
,
IsVisible
);
QVERIFY
(
!
complianceLabel
->
text
().
contains
(
" not "
));
}
void
test__vs_de_compliance__not_all_keys_fully_valid
()
{
const
GpgME
::
Protocol
forcedProtocol
=
GpgME
::
UnknownProtocol
;
const
bool
allowMixed
=
true
;
const
QString
sender
=
QStringLiteral
(
"sender@example.net"
);
const
KeyResolver
::
Solution
preferredSolution
=
{
GpgME
::
UnknownProtocol
,
{
testKey
(
"sender@example.net"
,
GpgME
::
OpenPGP
),
testKey
(
"sender@example.net"
,
GpgME
::
CMS
)},
{
{
QStringLiteral
(
"marginal-openpgp@example.net"
),
{
testKey
(
"Marginal Validity <marginal-openpgp@example.net>"
,
GpgME
::
OpenPGP
)}},
{
QStringLiteral
(
"sender@example.net"
),
{
testKey
(
"sender@example.net"
,
GpgME
::
OpenPGP
),
testKey
(
"sender@example.net"
,
GpgME
::
CMS
)}}
}
};
const
KeyResolver
::
Solution
alternativeSolution
=
{};
Tests
::
FakeCryptoConfigStringValue
fakeCompliance
{
"gpg"
,
"compliance"
,
QStringLiteral
(
"de-vs"
)};
const
auto
dialog
=
std
::
make_unique
<
NewKeyApprovalDialog
>
(
true
,
true
,
sender
,
preferredSolution
,
alternativeSolution
,
allowMixed
,
forcedProtocol
);
dialog
->
show
();
waitForKeySelectionCombosBeingInitialized
(
dialog
.
get
());
const
auto
complianceLabel
=
dialog
->
findChild
<
QLabel
*>
(
"compliance label"
);
verifyWidgetVisibility
(
complianceLabel
,
IsVisible
);
QVERIFY
(
complianceLabel
->
text
().
contains
(
" not "
));
}
private:
std
::
shared_ptr
<
const
KeyCache
>
mKeyCache
;
};
...
...
src/ui/newkeyapprovaldialog.cpp
View file @
c3f83b3c
...
...
@@ -344,6 +344,9 @@ public:
mComplianceLbl
=
new
QLabel
;
mComplianceLbl
->
setVisible
(
false
);
#ifndef NDEBUG
mComplianceLbl
->
setObjectName
(
QStringLiteral
(
"compliance label"
));
#endif
auto
btnLayout
=
new
QHBoxLayout
;
btnLayout
->
addWidget
(
mComplianceLbl
);
...
...
src/utils/formatting.cpp
View file @
c3f83b3c
...
...
@@ -13,7 +13,7 @@
#include "kleo/keyfiltermanager.h"
#include "kleo/keygroup.h"
#include "utils/c
ompat
.h"
#include "utils/c
ryptoconfig
.h"
#include <gpgme++/key.h>
#include <gpgme++/importresult.h>
...
...
@@ -1081,15 +1081,8 @@ bool Formatting::uidsHaveFullValidity(const Key &key)
QString
Formatting
::
complianceMode
()
{
const
QGpgME
::
CryptoConfig
*
const
config
=
QGpgME
::
cryptoConfig
();
if
(
!
config
)
{
return
QString
();
}
const
QGpgME
::
CryptoConfigEntry
*
const
entry
=
getCryptoConfigEntry
(
config
,
"gpg"
,
"compliance"
);
if
(
!
entry
||
entry
->
stringValue
()
==
QLatin1String
(
"gnupg"
))
{
return
QString
();
}
return
entry
->
stringValue
();
const
auto
complianceValue
=
getCryptoConfigStringValue
(
"gpg"
,
"compliance"
);
return
complianceValue
==
QLatin1String
(
"gnupg"
)
?
QString
()
:
complianceValue
;
}
bool
Formatting
::
isKeyDeVs
(
const
GpgME
::
Key
&
key
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment