feat(socket): add unix socket listener

This commit is contained in:
outfoxxed 2024-03-02 05:05:45 -08:00
parent bb5bc0547a
commit 83a0ec6fc6
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
10 changed files with 479 additions and 0 deletions

View file

@ -0,0 +1,7 @@
function (qs_test name)
add_executable(${name} ${ARGN})
target_link_libraries(${name} PRIVATE ${QT_DEPS} Qt6::Test)
add_test(NAME ${name} WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" COMMAND $<TARGET_FILE:${name}>)
endfunction()
qs_test(datastream datastream.cpp ../datastream.cpp)

View file

@ -0,0 +1,110 @@
#include "../datastream.hpp"
#include <qbytearray.h>
#include <qlist.h>
#include <qlogging.h>
#include <qobject.h>
#include <qsignalspy.h>
#include <qtest.h>
#include <qtestcase.h>
#include <qtmetamacros.h>
class TestSplitParser: public QObject {
Q_OBJECT;
private slots:
void splits_data() { // NOLINT
QTest::addColumn<QString>("mark");
QTest::addColumn<QString>("buffer"); // max that can go in the buffer
QTest::addColumn<QString>("incoming"); // data that has to be tested on the end in one go
QTest::addColumn<QList<QString>>("results");
QTest::addColumn<QString>("remainder");
// NOLINTBEGIN
// clang-format off
QTest::addRow("simple") << "-"
<< "foo" << "-"
<< QList<QString>("foo") << "";
QTest::addRow("multiple") << "-"
<< "foo" << "-bar-baz-"
<< QList<QString>({ "foo", "bar", "baz" }) << "";
QTest::addRow("incomplete") << "-"
<< "foo" << "-bar-baz"
<< QList<QString>({ "foo", "bar" }) << "baz";
QTest::addRow("longsplit") << "12345"
<< "foo1234" << "5bar12345"
<< QList<QString>({ "foo", "bar" }) << "";
QTest::addRow("longsplit-incomplete") << "123"
<< "foo12" << "3bar123baz"
<< QList<QString>({ "foo", "bar" }) << "baz";
// clang-format on
// NOLINTEND
}
void splits() { // NOLINT
// NOLINTBEGIN
QFETCH(QString, mark);
QFETCH(QString, buffer);
QFETCH(QString, incoming);
QFETCH(QList<QString>, results);
QFETCH(QString, remainder);
// NOLINTEND
auto bufferArray = buffer.toUtf8();
auto incomingArray = incoming.toUtf8();
for (auto i = 0; i <= bufferArray.length(); i++) {
auto buffer = bufferArray.sliced(0, i);
auto incoming = bufferArray.sliced(i);
incoming.append(incomingArray);
qInfo() << "BUFFER" << QString(buffer);
qInfo() << "INCOMING" << QString(incoming);
auto parser = SplitParser();
auto spy = QSignalSpy(&parser, &DataStreamParser::read);
parser.setSplitMarker(mark);
parser.parseBytes(incoming, buffer);
auto actualResults = QList<QString>();
for (auto& read: spy) {
actualResults.push_back(read[0].toString());
}
qInfo() << "EXPECTED RESULTS" << results;
qInfo() << "ACTUAL RESULTS" << actualResults;
qInfo() << "EXPECTED REMAINDER" << remainder;
qInfo() << "ACTUAL REMAINDER" << remainder;
QCOMPARE(actualResults, results);
QCOMPARE(buffer, remainder);
}
}
void initBuffer() { // NOLINT
auto parser = SplitParser();
auto spy = QSignalSpy(&parser, &DataStreamParser::read);
auto buf = QString("foo-bar-baz").toUtf8();
auto expected = QList<QString>({"foo", "bar"});
parser.setSplitMarker("-");
parser.parseBytes(buf, buf);
auto actualResults = QList<QString>();
for (auto& read: spy) {
actualResults.push_back(read[0].toString());
}
qInfo() << "EXPECTED RESULTS" << expected;
qInfo() << "ACTUAL RESULTS" << actualResults;
QCOMPARE(actualResults, expected);
QCOMPARE(buf, "baz");
}
};
QTEST_MAIN(TestSplitParser)
#include "datastream.moc"