Test live message metadata and document notification limits
This commit is contained in:
1 parent
c6cb3f0e8e
commit
16a9094770
3 files changed
+95
No files matched your search
@@ -0,0 +1,75 @@
|
||||
/* Формат канального события: live/history сохраняются при передаче в GUI, битые события отбрасываются. */
|
||||
#include "../transport/gui_bridge.h"
|
||||
#include "../../../lib/debug_config.h"
|
||||
#include <QtTest>
|
||||
#include <cstring>
|
||||
|
||||
struct ReceivedMessage {
|
||||
QString channel;
|
||||
quint64 author;
|
||||
bool initialSync;
|
||||
bool guiThread;
|
||||
};
|
||||
static QList<ReceivedMessage> received;
|
||||
|
||||
static void message_received(const char* channel, int length, uint64_t author, int initial_sync) {
|
||||
received.append({QString::fromUtf8(channel, length), author, initial_sync != 0, QThread::currentThread() == qApp->thread()});
|
||||
}
|
||||
|
||||
static QByteArray message_event(quint64 author, bool initialSync) {
|
||||
const QByteArray channel("12345");
|
||||
QByteArray event(1 + channel.size() + 9, '\0');
|
||||
event[0] = char(channel.size());
|
||||
memcpy(event.data() + 1, channel.constData(), channel.size());
|
||||
memcpy(event.data() + 1 + channel.size(), &author, 8);
|
||||
event[event.size() - 1] = initialSync;
|
||||
return event;
|
||||
}
|
||||
|
||||
static void post_message(const QByteArray& event) {
|
||||
gui_bridge_post(GUI_EVT_MSG_RECEIVED, reinterpret_cast<const uint8_t*>(event.constData()), event.size());
|
||||
}
|
||||
|
||||
class MessageEventTest : public QObject {
|
||||
Q_OBJECT
|
||||
private slots:
|
||||
void initTestCase() {
|
||||
debug_config_init();
|
||||
debug_set_level(DEBUG_LEVEL_DEBUG);
|
||||
gui_bridge_init();
|
||||
gui_bridge_set_msg_received_cb(message_received);
|
||||
}
|
||||
void cleanupTestCase() { gui_bridge_set_msg_received_cb(nullptr); }
|
||||
void init() { received.clear(); }
|
||||
|
||||
void liveAndHistory() {
|
||||
post_message(message_event(42, false));
|
||||
post_message(message_event(43, true));
|
||||
QTRY_COMPARE(received.size(), 2);
|
||||
QCOMPARE(received[0].channel, QString("12345"));
|
||||
QCOMPARE(received[0].author, quint64(42));
|
||||
QVERIFY(!received[0].initialSync);
|
||||
QVERIFY(received[0].guiThread);
|
||||
QCOMPARE(received[1].author, quint64(43));
|
||||
QVERIFY(received[1].initialSync);
|
||||
QVERIFY(received[1].guiThread);
|
||||
}
|
||||
|
||||
void rejectsMalformedEvents() {
|
||||
QByteArray event = message_event(42, false);
|
||||
event.chop(1);
|
||||
post_message(event);
|
||||
event = message_event(42, false);
|
||||
event[event.size() - 1] = 2;
|
||||
post_message(event);
|
||||
event = message_event(42, false);
|
||||
event[0] = char(255);
|
||||
post_message(event);
|
||||
post_message({});
|
||||
QTest::qWait(100);
|
||||
QVERIFY(received.isEmpty());
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_MAIN(MessageEventTest)
|
||||
#include "test_message_events.moc"
|
||||
Reference in new issue
Block a user