Made code more explicit and additional tests.

This commit is contained in:
Richard Liebscher 2020-01-04 13:34:48 +01:00
parent 10d2a6b912
commit 456d4830fe
2 changed files with 27 additions and 24 deletions

View file

@ -71,27 +71,17 @@ void NetworkPacket::createIdentityPacket(NetworkPacket* np)
//qCDebug(KDECONNECT_CORE) << "createIdentityPacket" << np->serialize();
}
template<class T>
QVariantMap qobject2qvariant(const T* object)
{
QVariantMap map;
auto metaObject = T::staticMetaObject;
for(int i = metaObject.propertyOffset(); i < metaObject.propertyCount(); ++i) {
QMetaProperty prop = metaObject.property(i);
map.insert(QString::fromLatin1(prop.name()), prop.readOnGadget(object));
}
return map;
}
QByteArray NetworkPacket::serialize() const
{
//Object -> QVariant
QVariantMap variant = qobject2qvariant(this);
QVariantMap variant;
variant.insert(QStringLiteral("id"), m_id);
variant.insert(QStringLiteral("type"), m_type);
variant.insert(QStringLiteral("body"), m_body);
if (!hasPayload()) {
variant.remove(QStringLiteral("payloadSize"));
variant.remove(QStringLiteral("payloadTransferInfo"));
if (hasPayload()) {
variant.insert(QStringLiteral("payloadSize"), m_payloadSize);
variant.insert(QStringLiteral("payloadTransferInfo"), m_payloadTransferInfo);
}
//QVariant -> json

View file

@ -82,9 +82,10 @@ void NetworkPacketTests::networkPacketIdentityTest()
void NetworkPacketTests::networkPacketPayloadTest()
{
QByteArray json;
NetworkPacket np;
// empty package
NetworkPacket np(QStringLiteral("com.test"));
np = NetworkPacket(QStringLiteral("com.test"));
json = np.serialize();
qDebug() << json;
QVERIFY(!json.contains("\"payloadSize\""));
@ -93,10 +94,10 @@ void NetworkPacketTests::networkPacketPayloadTest()
// package with payload
QByteArray buffer("test data");
auto payload = QSharedPointer<QIODevice>(new QBuffer(&buffer, this));
NetworkPacket payloadNp(QStringLiteral("com.test"));
payloadNp.setPayload(payload, buffer.size());
np = NetworkPacket(QStringLiteral("com.test"));
np.setPayload(payload, buffer.size());
json = payloadNp.serialize();
json = np.serialize();
qDebug() << json;
QVERIFY(json.contains("\"payloadSize\":9"));
QVERIFY(json.contains("\"payloadTransferInfo\""));
@ -104,13 +105,25 @@ void NetworkPacketTests::networkPacketPayloadTest()
// package with empty payload
QByteArray emptyBuffer("test data");
auto emptyPayload = QSharedPointer<QIODevice>(new QBuffer(&emptyBuffer, this));
NetworkPacket emptyPayloadNp(QStringLiteral("com.test"));
emptyPayloadNp.setPayload(emptyPayload, 0);
np = NetworkPacket(QStringLiteral("com.test"));
np.setPayload(emptyPayload, 0);
json = emptyPayloadNp.serialize();
json = np.serialize();
qDebug() << json;
QVERIFY(!json.contains("\"payloadSize\""));
QVERIFY(!json.contains("\"payloadTransferInfo\""));
// incoming package without payload
np = NetworkPacket();
QVERIFY(NetworkPacket::unserialize(
"{\"body\":{},\"id\":\"1578136807254\",\"type\":\"com.test\"}\n", &np));
QVERIFY(!np.hasPayload());
// incoming package without payload (but with payload keys)
np = NetworkPacket();
QVERIFY(NetworkPacket::unserialize(
"{\"body\":{},\"id\":\"1578136807254\",\"payloadSize\":0,\"payloadTransferInfo\":{},\"type\":\"com.test\"}\n", &np));
QVERIFY(!np.hasPayload());
}
void NetworkPacketTests::cleanupTestCase()