Skip to content

Commit 83e0b81

Browse files
committed
[auth] Update python tests (keep disabled); add auth config tests
- Add comparison operators to QgsAuthMethodConfig
1 parent 1ff02de commit 83e0b81

File tree

8 files changed

+329
-60
lines changed

8 files changed

+329
-60
lines changed

python/core/auth/qgsauthconfig.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ class QgsAuthMethodConfig
99

1010
QgsAuthMethodConfig( const QgsAuthMethodConfig& methodconfig );
1111

12+
bool operator==( const QgsAuthMethodConfig& other ) const;
13+
14+
bool operator!=( const QgsAuthMethodConfig& other ) const;
15+
1216
~QgsAuthMethodConfig();
1317

1418
const QString id() const;

src/core/auth/qgsauthconfig.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,21 @@ QgsAuthMethodConfig::QgsAuthMethodConfig( const QgsAuthMethodConfig &methodconfi
5656
{
5757
}
5858

59+
bool QgsAuthMethodConfig::operator==( const QgsAuthMethodConfig &other ) const
60+
{
61+
return ( other.id() == id()
62+
&& other.name() == name()
63+
&& other.uri() == uri()
64+
&& other.method() == method()
65+
&& other.version() == version()
66+
&& other.configMap() == configMap() );
67+
}
68+
69+
bool QgsAuthMethodConfig::operator!=( const QgsAuthMethodConfig &other ) const
70+
{
71+
return !( *this == other );
72+
}
73+
5974
bool QgsAuthMethodConfig::isValid( bool validateid ) const
6075
{
6176
bool idvalid = validateid ? !mId.isEmpty() : true;

src/core/auth/qgsauthconfig.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ class CORE_EXPORT QgsAuthMethodConfig
4747
/** Full clone of config */
4848
QgsAuthMethodConfig( const QgsAuthMethodConfig& methodconfig );
4949

50+
/** Operator used to compare configs' equality */
51+
bool operator==( const QgsAuthMethodConfig& other ) const;
52+
53+
/** Operator used to compare configs' inequality */
54+
bool operator!=( const QgsAuthMethodConfig& other ) const;
55+
5056
~QgsAuthMethodConfig() {}
5157

5258
/**

src/gui/auth/qgsauthimportidentitydialog.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/***************************************************************************
2-
qgsauthimportidentitydialog.h
2+
qgsauthimportidentitydialog.cpp
33
---------------------
44
begin : May 9, 2015
55
copyright : (C) 2015 by Boundless Spatial, Inc. USA

tests/src/core/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ ENDMACRO (ADD_QGIS_TEST)
8181
8282
ADD_QGIS_TEST(applicationtest testqgsapplication.cpp)
8383
ADD_QGIS_TEST(atlascompositiontest testqgsatlascomposition.cpp)
84-
ADD_QGIS_TEST(authcrypto testqgsauthcrypto.cpp)
84+
ADD_QGIS_TEST(authcryptotest testqgsauthcrypto.cpp)
85+
ADD_QGIS_TEST(authconfigtest testqgsauthconfig.cpp)
8586
ADD_QGIS_TEST(blendmodestest testqgsblendmodes.cpp)
8687
ADD_QGIS_TEST(clippertest testqgsclipper.cpp)
8788
ADD_QGIS_TEST(colorscheme testqgscolorscheme.cpp)
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
/***************************************************************************
2+
testqgsauthconfig.cpp
3+
----------------------
4+
Date : September 2015
5+
Copyright : (C) 2015 by Boundless Spatial, Inc. USA
6+
Author : Larry Shaffer
7+
Email : lshaffer at boundlessgeo dot com
8+
***************************************************************************
9+
* *
10+
* This program is free software; you can redistribute it and/or modify *
11+
* it under the terms of the GNU General Public License as published by *
12+
* the Free Software Foundation; either version 2 of the License, or *
13+
* (at your option) any later version. *
14+
* *
15+
***************************************************************************/
16+
#include <QtTest/QtTest>
17+
#include <QObject>
18+
#include <QString>
19+
#include <QStringList>
20+
21+
#include "qgsapplication.h"
22+
#include "qgsauthconfig.h"
23+
24+
/** \ingroup UnitTests
25+
* Unit tests for QgsAuthConfig
26+
*/
27+
class TestQgsAuthConfig: public QObject
28+
{
29+
Q_OBJECT
30+
31+
private slots:
32+
void initTestCase();
33+
void cleanupTestCase();
34+
void init() {}
35+
void cleanup() {}
36+
37+
void testMethodConfig();
38+
void testPkiBundle();
39+
void testPkiConfigBundle();
40+
void testConfigSslServer();
41+
42+
private:
43+
static QString smPkiData;
44+
};
45+
46+
QString TestQgsAuthConfig::smPkiData = QString( TEST_DATA_DIR ) + "/auth_system/certs_keys";
47+
48+
49+
void TestQgsAuthConfig::initTestCase()
50+
{
51+
QgsApplication::init();
52+
QgsApplication::initQgis();
53+
}
54+
55+
void TestQgsAuthConfig::cleanupTestCase()
56+
{
57+
QgsApplication::exitQgis();
58+
}
59+
60+
void TestQgsAuthConfig::testMethodConfig()
61+
{
62+
QgsAuthMethodConfig mconfig;
63+
Q_ASSERT( !mconfig.isValid() );
64+
65+
mconfig.setName( "Some Name" );
66+
mconfig.setMethod( "MethodKey" );
67+
Q_ASSERT( mconfig.isValid() );
68+
69+
mconfig.setId( "0000000" );
70+
Q_ASSERT( mconfig.isValid( true ) );
71+
72+
mconfig.setVersion( 1 );
73+
mconfig.setUri( "http://example.com" );
74+
75+
QCOMPARE( mconfig.name(), QString( "Some Name" ) );
76+
QCOMPARE( mconfig.method(), QString( "MethodKey" ) );
77+
QCOMPARE( mconfig.id(), QString( "0000000" ) );
78+
QCOMPARE( mconfig.version(), 1 );
79+
QCOMPARE( mconfig.uri(), QString( "http://example.com" ) );
80+
81+
QString confstr( "key1:::value1|||key2:::value2|||key3:::value3a```value3b```value3c" );
82+
QgsStringMap confmap;
83+
confmap.insert( "key1", "value1" );
84+
confmap.insert( "key2", "value2" );
85+
confmap.insert( "key3", "value3a```value3b```value3c" );
86+
87+
mconfig.setConfigMap( confmap );
88+
QCOMPARE( mconfig.configMap(), confmap );
89+
QCOMPARE( mconfig.configString(), confstr );
90+
91+
mconfig.clearConfigMap();
92+
Q_ASSERT( mconfig.configMap().isEmpty() );
93+
94+
mconfig.setConfig( "key1", "value1" );
95+
mconfig.setConfig( "key2", "value2" );
96+
QStringList key3list;
97+
key3list << "value3a" << "value3b" << "value3c";
98+
mconfig.setConfigList( "key3", key3list );
99+
QCOMPARE( mconfig.configMap(), confmap );
100+
QCOMPARE( mconfig.configString(), confstr );
101+
102+
QCOMPARE( mconfig.config( "key1" ), QString( "value1" ) );
103+
QCOMPARE( mconfig.configList( "key3" ), key3list );
104+
105+
Q_ASSERT( mconfig.hasConfig( "key2" ) );
106+
mconfig.removeConfig( "key2" );
107+
Q_ASSERT( !mconfig.hasConfig( "key2" ) );
108+
109+
mconfig.loadConfigString( confstr );
110+
QCOMPARE( mconfig.configMap(), confmap );
111+
QCOMPARE( mconfig.configString(), confstr );
112+
113+
QgsAuthMethodConfig mconfig2( mconfig );
114+
Q_ASSERT( mconfig2 == mconfig );
115+
116+
mconfig.setMethod( "MethodKey2" );
117+
Q_ASSERT( mconfig2 != mconfig );
118+
}
119+
120+
void TestQgsAuthConfig::testPkiBundle()
121+
{
122+
QgsPkiBundle bundle;
123+
Q_ASSERT( bundle.isNull() );
124+
Q_ASSERT( !bundle.isValid() );
125+
126+
QList<QSslCertificate> cacerts( QSslCertificate::fromPath( smPkiData + "/chain_subissuer-issuer-root.pem" ) );
127+
Q_ASSERT( !cacerts.isEmpty() );
128+
QCOMPARE( cacerts.size(), 3 );
129+
QgsPkiBundle bundle2( QgsPkiBundle::fromPemPaths( smPkiData + "/fra_cert.pem",
130+
smPkiData + "/fra_key_w-pass.pem",
131+
"password",
132+
cacerts ) );
133+
Q_ASSERT( !bundle2.isNull() );
134+
Q_ASSERT( bundle2.isValid() );
135+
QCOMPARE( bundle2.certId(), QString( "c3633c428d441853973e5081ba9be39f667f5af6" ) );
136+
137+
QSslCertificate clientcert( bundle2.clientCert() );
138+
Q_ASSERT( !clientcert.isNull() );
139+
QSslKey clientkey( bundle2.clientKey( true ) );
140+
Q_ASSERT( !clientkey.isNull() );
141+
QString keypass( bundle2.keyPassphrase() );
142+
Q_ASSERT( !keypass.isEmpty() );
143+
QList<QSslCertificate> cachain( bundle2.caChain() );
144+
Q_ASSERT( !cachain.isEmpty() );
145+
QCOMPARE( cachain.size(), 3 );
146+
147+
QgsPkiBundle bundle3( clientcert, clientkey, keypass, cachain );
148+
Q_ASSERT( !bundle3.isNull() );
149+
Q_ASSERT( bundle3.isValid() );
150+
151+
bundle.setClientCert( clientcert );
152+
bundle.setClientKey( clientkey );
153+
bundle.setKeyPassphrase( keypass );
154+
bundle.setCaChain( cachain );
155+
Q_ASSERT( !bundle.isNull() );
156+
Q_ASSERT( bundle.isValid() );
157+
158+
QgsPkiBundle bundle4( QgsPkiBundle::fromPkcs12Paths( smPkiData + "/fra_w-chain.p12",
159+
"password" ) );
160+
Q_ASSERT( !bundle4.isNull() );
161+
Q_ASSERT( bundle4.isValid() );
162+
QList<QSslCertificate> cachain4( bundle2.caChain() );
163+
Q_ASSERT( !cachain4.isEmpty() );
164+
QCOMPARE( cachain4.size(), 3 );
165+
}
166+
167+
void TestQgsAuthConfig::testPkiConfigBundle()
168+
{
169+
QgsAuthMethodConfig mconfig;
170+
mconfig.setName( "Some Name" );
171+
mconfig.setMethod( "MethodKey" );
172+
mconfig.setId( "0000000" );
173+
mconfig.setVersion( 1 );
174+
mconfig.setUri( "http://example.com" );
175+
Q_ASSERT( mconfig.isValid( true ) );
176+
177+
QSslCertificate clientcert( QSslCertificate::fromPath( smPkiData + "/gerardus_cert.pem" ).first() );
178+
QByteArray keydata;
179+
QFile file( smPkiData + "/gerardus_key.pem" );
180+
if ( file.open( QIODevice::ReadOnly | QIODevice::Text ) )
181+
keydata = file.readAll();
182+
file.close();
183+
QSslKey clientkey( keydata, QSsl::Rsa );
184+
185+
QgsPkiConfigBundle bundle( mconfig, clientcert, clientkey );
186+
Q_ASSERT( bundle.isValid() );
187+
QCOMPARE( bundle.config(), mconfig );
188+
189+
QCOMPARE( bundle.clientCert(), clientcert );
190+
QCOMPARE( bundle.clientCertKey(), clientkey );
191+
bundle.setConfig( mconfig );
192+
bundle.setClientCert( clientcert );
193+
bundle.setClientCertKey( clientkey );
194+
Q_ASSERT( bundle.isValid() );
195+
QCOMPARE( bundle.config(), mconfig );
196+
QCOMPARE( bundle.clientCert(), clientcert );
197+
QCOMPARE( bundle.clientCertKey(), clientkey );
198+
}
199+
200+
void TestQgsAuthConfig::testConfigSslServer()
201+
{
202+
QString hostport( "localhost:443" );
203+
QString confstr( "2|||470|||2|||10~~19|||0~~2" );
204+
QSslCertificate sslcert( QSslCertificate::fromPath( smPkiData + "/localhost_ssl_cert.pem" ).first() );
205+
206+
QgsAuthConfigSslServer sslconfig;
207+
Q_ASSERT( sslconfig.isNull() );
208+
QCOMPARE( sslconfig.qtVersion(), 480 );
209+
QCOMPARE( sslconfig.version(), 1 );
210+
QCOMPARE( sslconfig.sslPeerVerifyMode(), QSslSocket::VerifyPeer );
211+
212+
sslconfig.setSslCertificate( sslcert );
213+
sslconfig.setSslHostPort( hostport );
214+
sslconfig.setSslProtocol( QSsl::TlsV1 );
215+
sslconfig.setVersion( 2 );
216+
sslconfig.setQtVersion( 470 );
217+
sslconfig.setSslPeerVerifyMode( QSslSocket::VerifyNone );
218+
sslconfig.setSslPeerVerifyDepth( 2 );
219+
QList<QSslError::SslError> sslerrenums;
220+
sslerrenums << QSslError::SelfSignedCertificateInChain << QSslError::SubjectIssuerMismatch;
221+
sslconfig.setSslIgnoredErrorEnums( sslerrenums );
222+
Q_ASSERT( !sslconfig.isNull() );
223+
224+
QCOMPARE( sslconfig.configString(), confstr );
225+
QCOMPARE( sslconfig.sslHostPort(), hostport );
226+
QCOMPARE( sslconfig.sslCertificate(), sslcert );
227+
QCOMPARE( sslconfig.sslProtocol(), QSsl::TlsV1 );
228+
QCOMPARE( sslconfig.version(), 2 );
229+
QCOMPARE( sslconfig.qtVersion(), 470 );
230+
QCOMPARE( sslconfig.sslPeerVerifyMode(), QSslSocket::VerifyNone );
231+
QCOMPARE( sslconfig.sslPeerVerifyDepth(), 2 );
232+
QCOMPARE( sslconfig.sslIgnoredErrorEnums(), sslerrenums );
233+
234+
QgsAuthConfigSslServer sslconfig2;
235+
sslconfig2.loadConfigString( confstr );
236+
QCOMPARE( sslconfig2.sslProtocol(), QSsl::TlsV1 );
237+
QCOMPARE( sslconfig2.version(), 2 );
238+
QCOMPARE( sslconfig2.qtVersion(), 470 );
239+
QCOMPARE( sslconfig2.sslPeerVerifyMode(), QSslSocket::VerifyNone );
240+
QCOMPARE( sslconfig2.sslPeerVerifyDepth(), 2 );
241+
QCOMPARE( sslconfig2.sslIgnoredErrorEnums(), sslerrenums );
242+
QCOMPARE( sslconfig2.configString(), confstr );
243+
}
244+
245+
QTEST_MAIN( TestQgsAuthConfig )
246+
#include "testqgsauthconfig.moc"

tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ADD_PYTHON_TEST(PyQgsAnalysis test_qgsanalysis.py)
1111
ADD_PYTHON_TEST(PyQgsApplication test_qgsapplication.py)
1212
ADD_PYTHON_TEST(PyQgsAtlasComposition test_qgsatlascomposition.py)
1313
ADD_PYTHON_TEST(PyQgsAttributeTableModel test_qgsattributetablemodel.py)
14+
#ADD_PYTHON_TEST(PyQgsAuthenticationSystem test_qgsauthsystem.py)
1415
ADD_PYTHON_TEST(PyQgsBlendModes test_qgsblendmodes.py)
1516
ADD_PYTHON_TEST(PyQgsColorScheme test_qgscolorscheme.py)
1617
ADD_PYTHON_TEST(PyQgsColorSchemeRegistry test_qgscolorschemeregistry.py)

0 commit comments

Comments
 (0)