#include #include #include #include #include "dummyresource/resourcefactory.h" #include "store.h" #include "common/domainadaptor.h" #include "common/entitybuffer.h" #include "event_generated.h" #include "mail_generated.h" #include "metadata_generated.h" #include "entity_generated.h" class TestFactory : public DomainTypeAdaptorFactory { public: TestFactory() { mResourceWriteMapper = QSharedPointer>::create(); Sink::ApplicationDomain::TypeImplementation::configure(*mResourceWriteMapper); } }; class TestMailFactory : public DomainTypeAdaptorFactory { public: TestMailFactory() { mResourceWriteMapper = QSharedPointer>::create(); Sink::ApplicationDomain::TypeImplementation::configure(*mResourceWriteMapper); } }; /** * Test of domain adaptor, that it can read and write buffers. */ class DomainAdaptorTest : public QObject { Q_OBJECT private slots: void initTestCase() { } void cleanupTestCase() { } void testCreateBufferPart() { auto writeMapper = QSharedPointer>::create(); Sink::ApplicationDomain::TypeImplementation::configure(*writeMapper); Sink::ApplicationDomain::Event event; event.setProperty("summary", "foo"); flatbuffers::FlatBufferBuilder fbb; auto pos = createBufferPart(event, fbb, *writeMapper); Sink::ApplicationDomain::Buffer::FinishEventBuffer(fbb, pos); flatbuffers::Verifier verifier(fbb.GetBufferPointer(), fbb.GetSize()); QVERIFY(verifier.VerifyBuffer(nullptr)); } void testAdaptor() { // Create entity buffer flatbuffers::FlatBufferBuilder metadataFbb; auto metadataBuilder = Sink::MetadataBuilder(metadataFbb); metadataBuilder.add_revision(1); auto metadataBuffer = metadataBuilder.Finish(); Sink::FinishMetadataBuffer(metadataFbb, metadataBuffer); flatbuffers::FlatBufferBuilder m_fbb; auto summary = m_fbb.CreateString("summary1"); auto description = m_fbb.CreateString("description"); static uint8_t rawData[100]; auto attachment = m_fbb.CreateVector(rawData, 100); auto builder = Sink::ApplicationDomain::Buffer::EventBuilder(m_fbb); builder.add_summary(summary); builder.add_description(description); builder.add_attachment(attachment); auto buffer = builder.Finish(); Sink::ApplicationDomain::Buffer::FinishEventBuffer(m_fbb, buffer); flatbuffers::FlatBufferBuilder fbb; Sink::EntityBuffer::assembleEntityBuffer( fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize()); // Extract entity buffer { std::string data(reinterpret_cast(fbb.GetBufferPointer()), fbb.GetSize()); Sink::EntityBuffer buffer((void *)(data.data()), data.size()); TestFactory factory; auto adaptor = factory.createAdaptor(buffer.entity()); QCOMPARE(adaptor->getProperty("summary").toString(), QString("summary1")); } } void testMail() { auto writeMapper = QSharedPointer>::create(); Sink::ApplicationDomain::TypeImplementation::configure(*writeMapper); Sink::ApplicationDomain::Mail mail; mail.setExtractedSubject("summary"); mail.setMimeMessage("foobar"); mail.setFolder("folder"); flatbuffers::FlatBufferBuilder metadataFbb; auto metadataBuilder = Sink::MetadataBuilder(metadataFbb); metadataBuilder.add_revision(1); auto metadataBuffer = metadataBuilder.Finish(); Sink::FinishMetadataBuffer(metadataFbb, metadataBuffer); flatbuffers::FlatBufferBuilder mailFbb; auto pos = createBufferPart(mail, mailFbb, *writeMapper); Sink::ApplicationDomain::Buffer::FinishMailBuffer(mailFbb, pos); flatbuffers::FlatBufferBuilder fbb; Sink::EntityBuffer::assembleEntityBuffer( fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize(), mailFbb.GetBufferPointer(), mailFbb.GetSize()); { std::string data(reinterpret_cast(fbb.GetBufferPointer()), fbb.GetSize()); Sink::EntityBuffer buffer((void *)(data.data()), data.size()); TestMailFactory factory; auto adaptor = factory.createAdaptor(buffer.entity()); Sink::ApplicationDomain::Mail readMail{QByteArray{}, QByteArray{}, 0, adaptor}; QCOMPARE(readMail.getSubject(), mail.getSubject()); QCOMPARE(readMail.getMimeMessage(), mail.getMimeMessage()); QCOMPARE(readMail.getFolder(), mail.getFolder()); } } }; QTEST_MAIN(DomainAdaptorTest) #include "domainadaptortest.moc"