You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DnsTcpServer.cpp 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //
  2. // Created by robin on 1/30/18.
  3. //
  4. #include <gtest/gtest.h>
  5. #include <QtCore/QCoreApplication>
  6. #include <QtCore/QTimer>
  7. #include <QtNetwork/QTcpSocket>
  8. #include "dns-server/QDnsTcpServer.h"
  9. #include "serverTests.h"
  10. struct DnsTcpServerTestParams
  11. {
  12. QList<const char*> hexData;
  13. };
  14. class DnsTcpServerTest : public ::testing::TestWithParam<DnsTcpServerTestParams>
  15. {
  16. };
  17. TEST_P(DnsTcpServerTest, simple)
  18. {
  19. auto params = GetParam();
  20. QCoreApplication app(m_argc, m_argv);
  21. QTimer timer;
  22. QObject::connect(&timer, &QTimer::timeout, qApp, &QCoreApplication::quit);
  23. timer.start(1000);
  24. QDns::Server::QDnsTcpServer server;
  25. ASSERT_TRUE(server.start(QHostAddress("127.0.0.1"), 5053));
  26. QList<QDns::Base::QDnsPacket> packets;
  27. QObject::connect(&server, &QDns::Server::QDnsServer::onRequest, [&packets](QDns::Server::QDnsServer::OnRequestParams params)
  28. {
  29. packets.append(params.query);
  30. });
  31. QList<QDns::Base::QDnsPacket> expectedPackets;
  32. QTcpSocket socket;
  33. socket.connectToHost(QHostAddress("127.0.0.1"), 5053);
  34. socket.waitForConnected();
  35. for (auto hexData : params.hexData)
  36. {
  37. auto data = QByteArray::fromHex(hexData);
  38. QByteArray size;
  39. QDataStream dataStream(&size, QIODevice::WriteOnly);
  40. dataStream << (quint16) data.size();
  41. socket.write(size.constData(), size.size());
  42. socket.write(data.constData(), data.length());
  43. QDns::Base::QDnsPacket packet(data);
  44. if (packet.isValid())
  45. {
  46. expectedPackets.append(packet);
  47. }
  48. }
  49. socket.disconnectFromHost();
  50. socket.waitForDisconnected();
  51. ASSERT_EQ(app.exec(), 0);
  52. ASSERT_EQ(packets.size(), expectedPackets.size());
  53. }
  54. INSTANTIATE_TEST_CASE_P(DnsTcpServerTestInst,
  55. DnsTcpServerTest,
  56. ::testing::Values(
  57. DnsTcpServerTestParams
  58. {
  59. QList<const char*>()
  60. << "e1bc010000010000000000000266720000010001"
  61. << "00"
  62. << "e1bc010000010000000000000266720000010001"
  63. }
  64. ));