// // Created by robin on 1/30/18. // #include #include #include #include #include "dns-server/QDnsTcpServer.h" #include "serverTests.h" struct DnsTcpServerTestParams { QList hexData; }; class DnsTcpServerTest : public ::testing::TestWithParam { }; TEST_P(DnsTcpServerTest, simple) { auto params = GetParam(); QCoreApplication app(m_argc, m_argv); QTimer timer; QObject::connect(&timer, &QTimer::timeout, qApp, &QCoreApplication::quit); timer.start(1000); QDns::Server::QDnsTcpServer server; ASSERT_TRUE(server.start(QHostAddress("127.0.0.1"), 5053)); QList packets; QObject::connect(&server, &QDns::Server::QDnsServer::onRequest, [&packets](QDns::Server::QDnsServer::OnRequestParams params) { packets.append(params.query); }); QList expectedPackets; QTcpSocket socket; socket.connectToHost(QHostAddress("127.0.0.1"), 5053); socket.waitForConnected(); for (auto hexData : params.hexData) { auto data = QByteArray::fromHex(hexData); QByteArray size; QDataStream dataStream(&size, QIODevice::WriteOnly); dataStream << (quint16) data.size(); socket.write(size.constData(), size.size()); socket.write(data.constData(), data.length()); QDns::Base::QDnsPacket packet(data); if (packet.isValid()) { expectedPackets.append(packet); } } socket.disconnectFromHost(); socket.waitForDisconnected(); ASSERT_EQ(app.exec(), 0); ASSERT_EQ(packets.size(), expectedPackets.size()); } INSTANTIATE_TEST_CASE_P(DnsTcpServerTestInst, DnsTcpServerTest, ::testing::Values( DnsTcpServerTestParams { QList() << "e1bc010000010000000000000266720000010001" << "00" << "e1bc010000010000000000000266720000010001" } ));