File indexing completed on 2024-05-12 05:17:32
0001 /* 0002 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include "../lib/protobuf/protobufstreamreader.h" 0007 0008 #include <QDebug> 0009 #include <QObject> 0010 #include <QTest> 0011 0012 using namespace KItinerary; 0013 0014 Q_DECLARE_METATYPE(KItinerary::ProtobufStreamReader::WireType) 0015 0016 class ProtobufStreamReaderTest: public QObject 0017 { 0018 Q_OBJECT 0019 private Q_SLOTS: 0020 void testVarint_data() 0021 { 0022 QTest::addColumn<QByteArray>("input"); 0023 QTest::addColumn<uint64_t>("output"); 0024 0025 QTest::newRow("empty") << QByteArray() << (uint64_t)0; 0026 QTest::newRow("0") << QByteArray("\x00", 1) << (uint64_t)0; 0027 QTest::newRow("150") << QByteArray("\x96\x01") << (uint64_t)150; 0028 QTest::newRow("7") << QByteArray("\x07\01\00", 3) << (uint64_t)7; 0029 QTest::newRow("1579970760000") << QByteArray("\xC0\x9A\xE2\xEC\xFD\x2D") << (uint64_t)1579970760000; 0030 } 0031 0032 void testVarint() 0033 { 0034 QFETCH(QByteArray, input); 0035 QFETCH(uint64_t, output); 0036 0037 ProtobufStreamReader r(std::string_view(input.constBegin(), input.size())); 0038 QCOMPARE(r.peekVarint(), output); 0039 QCOMPARE(r.peekVarint(), output); 0040 QCOMPARE(r.readVarint(), output); 0041 } 0042 0043 void testFieldRead_data() 0044 { 0045 QTest::addColumn<QByteArray>("input"); 0046 QTest::addColumn<uint64_t>("fieldNum"); 0047 QTest::addColumn<ProtobufStreamReader::WireType>("wireType"); 0048 0049 QTest::newRow("number") << QByteArray::fromHex("089601") << (uint64_t)1 << ProtobufStreamReader::VARINT; 0050 QTest::newRow("string-testing") << QByteArray::fromHex("120774657374696e67") << (uint64_t)2 << ProtobufStreamReader::LEN; 0051 QTest::newRow("sub-message") << QByteArray::fromHex("1a03089601") << (uint64_t)3 << ProtobufStreamReader::LEN; 0052 } 0053 0054 void testFieldRead() 0055 { 0056 QFETCH(QByteArray, input); 0057 QFETCH(uint64_t, fieldNum); 0058 QFETCH(ProtobufStreamReader::WireType, wireType); 0059 0060 ProtobufStreamReader r(std::string_view(input.constBegin(), input.size())); 0061 QCOMPARE(r.fieldNumber(), fieldNum); 0062 QCOMPARE(r.wireType(), wireType); 0063 QCOMPARE(r.fieldNumber(), fieldNum); 0064 QCOMPARE(r.wireType(), wireType); 0065 0066 QVERIFY(!r.atEnd()); 0067 r.skip(); 0068 QVERIFY(r.atEnd()); 0069 } 0070 0071 void testLengthDelimitedRecord() 0072 { 0073 const auto stringData = QByteArray::fromHex("120774657374696e67"); 0074 ProtobufStreamReader r(std::string_view(stringData.constData(), stringData.size())); 0075 QCOMPARE(r.readString(), QLatin1StringView("testing")); 0076 0077 const auto subMessage = QByteArray::fromHex("1a03089601"); 0078 r = ProtobufStreamReader(std::string_view(subMessage.constData(), subMessage.size())); 0079 auto subR = r.readSubMessage(); 0080 QCOMPARE(subR.readVarintField(), 150); 0081 QVERIFY(subR.atEnd()); 0082 QVERIFY(r.atEnd()); 0083 } 0084 }; 0085 0086 QTEST_GUILESS_MAIN(ProtobufStreamReaderTest) 0087 0088 #include "protobufstreamreadertest.moc"