2013-08-20 13:05:22 +01:00
/**
* Copyright 2013 Albert Vaca < albertvaka @ gmail . com >
2013-06-06 04:57:06 +01:00
*
2013-08-20 13:05:22 +01:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation ; either version 2 of
* the License or ( at your option ) version 3 or any later version
* accepted by the membership of KDE e . V . ( or its successor approved
* by the membership of KDE e . V . ) , which shall act as a proxy
* defined in Section 14 of version 3 of the license .
2013-06-06 04:57:06 +01:00
*
2013-08-20 13:05:22 +01:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2013-06-06 04:57:06 +01:00
*
2013-08-20 13:05:22 +01:00
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
2013-06-06 04:57:06 +01:00
*/
2013-09-01 21:13:03 +01:00
# include "networkpackagetests.h"
2013-06-06 04:57:06 +01:00
2014-06-14 14:22:40 +01:00
# include "core/networkpackage.h"
2013-07-04 02:34:35 +01:00
# include <QtTest>
2013-06-06 04:57:06 +01:00
2016-06-01 09:39:13 +01:00
static void initEnv ( )
{
// Force LC_TIME=C to make sure longMonthName returns as en_US.
setenv ( " LC_TIME " , " C " , 1 ) ;
}
Q_CONSTRUCTOR_FUNCTION ( initEnv )
2014-09-22 01:37:10 +01:00
QTEST_GUILESS_MAIN ( NetworkPackageTests ) ;
2013-06-06 04:57:06 +01:00
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : initTestCase ( )
2013-06-06 04:57:06 +01:00
{
// Called before the first testfunction is executed
}
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : networkPackageTest ( )
2013-07-04 02:34:35 +01:00
{
NetworkPackage np ( " com.test " ) ;
np . set ( " hello " , " hola " ) ;
QCOMPARE ( ( np . get < QString > ( " hello " , " bye " ) ) , QString ( " hola " ) ) ;
np . set ( " hello " , " " ) ;
QCOMPARE ( ( np . get < QString > ( " hello " , " bye " ) ) , QString ( " " ) ) ;
np . body ( ) . remove ( " hello " ) ;
QCOMPARE ( ( np . get < QString > ( " hello " , " bye " ) ) , QString ( " bye " ) ) ;
2014-09-12 23:16:26 +01:00
np . set ( " foo " , " bar " ) ;
2013-07-04 02:34:35 +01:00
QByteArray ba = np . serialize ( ) ;
//qDebug() << "Serialized package:" << ba;
2013-08-06 02:40:26 +01:00
NetworkPackage np2 ( " " ) ;
2013-07-04 02:34:35 +01:00
NetworkPackage : : unserialize ( ba , & np2 ) ;
QCOMPARE ( np . id ( ) , np2 . id ( ) ) ;
QCOMPARE ( np . type ( ) , np2 . type ( ) ) ;
QCOMPARE ( np . body ( ) , np2 . body ( ) ) ;
2014-09-12 23:49:56 +01:00
QByteArray json ( " { \" id \" : \" 123 \" , \" type \" : \" test \" , \" body \" :{ \" testing \" :true}} " ) ;
2013-07-04 02:34:35 +01:00
//qDebug() << json;
NetworkPackage : : unserialize ( json , & np2 ) ;
2013-09-01 21:13:03 +01:00
QCOMPARE ( np2 . id ( ) , QString ( " 123 " ) ) ;
2013-07-04 02:34:35 +01:00
QCOMPARE ( ( np2 . get < bool > ( " testing " ) ) , true ) ;
QCOMPARE ( ( np2 . get < bool > ( " not_testing " ) ) , false ) ;
QCOMPARE ( ( np2 . get < bool > ( " not_testing " , true ) ) , true ) ;
//NetworkPackage::unserialize("this is not json",&np2);
//QtTest::ignoreMessage(QtSystemMsg, "json_parser - syntax error found, forcing abort, Line 1 Column 0");
//QtTest::ignoreMessage(QtDebugMsg, "Unserialization error: 1 \"syntax error, unexpected string\"");
2013-09-01 21:13:03 +01:00
}
2013-09-03 01:14:55 +01:00
void NetworkPackageTests : : networkPackageIdentityTest ( )
{
NetworkPackage np ( " " ) ;
NetworkPackage : : createIdentityPackage ( & np ) ;
2015-09-11 11:34:52 +01:00
QCOMPARE ( np . get < int > ( " protocolVersion " , - 1 ) , NetworkPackage : : ProtocolVersion ) ;
2013-09-03 01:14:55 +01:00
QCOMPARE ( np . type ( ) , PACKAGE_TYPE_IDENTITY ) ;
}
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : networkPackageEncryptionTest ( )
{
2014-09-12 22:32:19 +01:00
QCA : : Initializer init ;
2014-09-09 08:17:25 +01:00
if ( ! QCA : : isSupported ( " rsa " ) ) {
QFAIL ( " RSA isn't supported by your QCA. " ) ;
return ;
}
2013-09-01 21:13:03 +01:00
NetworkPackage original ( " com.test " ) ;
original . set ( " hello " , " hola " ) ;
NetworkPackage copy ( " " ) ;
NetworkPackage : : unserialize ( original . serialize ( ) , & copy ) ;
NetworkPackage decrypted ( " " ) ;
2013-09-02 02:17:23 +01:00
QCA : : PrivateKey privateKey = QCA : : KeyGenerator ( ) . createRSA ( 2048 ) ;
2014-09-09 08:17:25 +01:00
QVERIFY ( ! privateKey . isNull ( ) ) ;
2013-09-01 21:13:03 +01:00
QCA : : PublicKey publicKey = privateKey . toPublicKey ( ) ;
2013-09-02 02:17:23 +01:00
2013-09-01 21:13:03 +01:00
//Encrypt and decrypt np
2013-09-02 12:26:26 +01:00
QCOMPARE ( original . type ( ) , QString ( " com.test " ) ) ;
2013-09-01 21:13:03 +01:00
original . encrypt ( publicKey ) ;
2013-09-02 12:26:26 +01:00
QCOMPARE ( original . type ( ) , PACKAGE_TYPE_ENCRYPTED ) ;
2013-09-01 21:13:03 +01:00
original . decrypt ( privateKey , & decrypted ) ;
2013-09-02 12:26:26 +01:00
QCOMPARE ( original . type ( ) , PACKAGE_TYPE_ENCRYPTED ) ;
QCOMPARE ( decrypted . type ( ) , QString ( " com.test " ) ) ;
2013-09-01 21:13:03 +01:00
//np should be equal top np2
QCOMPARE ( decrypted . id ( ) , copy . id ( ) ) ;
QCOMPARE ( decrypted . type ( ) , copy . type ( ) ) ;
QCOMPARE ( decrypted . body ( ) , copy . body ( ) ) ;
2013-09-02 02:17:23 +01:00
//Test for long package encryption that need multi-chunk encryption
2015-04-20 06:29:03 +01:00
QByteArray json = " { \" body \" :{ \" nowPlaying \" : \" A really long song name - A really long artist name \" , \" player \" : \" A really long player name \" , \" the_meaning_of_life_the_universe_and_everything \" : \" 42 \" }, \" id \" : \" A really long package id \" , \" payloadSize \" :0, \" payloadTransferInfo \" :{}, \" type \" : \" kdeconnect.a_really_really_long_package_type \" } \n " ;
2013-09-02 02:17:23 +01:00
qDebug ( ) < < " EME_PKCS1_OAEP maximumEncryptSize " < < publicKey . maximumEncryptSize ( QCA : : EME_PKCS1_OAEP ) ;
qDebug ( ) < < " EME_PKCS1v15 maximumEncryptSize " < < publicKey . maximumEncryptSize ( QCA : : EME_PKCS1v15 ) ;
2013-09-02 12:26:26 +01:00
QCOMPARE ( json . size ( ) > publicKey . maximumEncryptSize ( NetworkPackage : : EncryptionAlgorithm ) , true ) ;
2013-09-02 02:17:23 +01:00
NetworkPackage : : unserialize ( json , & original ) ;
original . encrypt ( publicKey ) ;
original . decrypt ( privateKey , & decrypted ) ;
QByteArray decryptedJson = decrypted . serialize ( ) ;
2014-09-12 23:50:46 +01:00
QCOMPARE ( QString ( decryptedJson ) , QString ( json ) ) ;
2013-09-02 02:17:23 +01:00
2013-07-04 02:34:35 +01:00
}
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : cleanupTestCase ( )
2013-06-06 04:57:06 +01:00
{
// Called after the last testfunction was executed
}
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : init ( )
2013-06-06 04:57:06 +01:00
{
// Called before each testfunction is executed
}
2013-09-01 21:13:03 +01:00
void NetworkPackageTests : : cleanup ( )
2013-06-06 04:57:06 +01:00
{
// Called after every testfunction
}