00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "Qt.h"
00024 #include "../Pong.h"
00025 #include "Imports.cpp"
00026
00027 namespace Protocols {
00028 namespace Gnutella {
00029 namespace Packets {
00030 namespace Testing {
00031
00033
00051 class PongTest : public CppUnit::TestFixture
00052 {
00053 CPPUNIT_TEST_SUITE(PongTest);
00054 CPPUNIT_TEST(testPacketProperties);
00055 CPPUNIT_TEST(testReadPacketOK);
00056 CPPUNIT_TEST(testReadPacketNoPayload);
00057 CPPUNIT_TEST(testWritePacketOK);
00058 CPPUNIT_TEST(testReadSetWritePacketOK);
00059 CPPUNIT_TEST_SUITE_END();
00060
00061 auto_ptr <Pong> packet;
00062
00063 public:
00064 void setUp()
00065 {
00066 packet.reset (new Pong());
00067 }
00068
00069 void tearDown()
00070 {
00071 packet.reset();
00072 }
00073
00075
00079 void scenarioReadPacket (const QByteArray &rawHeader,
00080 const QByteArray &rawPayload,
00081 bool parsedOk,quint16 port,
00082 const QHostAddress &ipAddress,
00083 quint32 sharedFiles,
00084 quint32 sharedKiloBytes,
00085 const GgepBlock &ggepBlock) {
00086 CPPUNIT_ASSERT (packet->parse (rawHeader, rawPayload) == parsedOk);
00087
00088 if (parsedOk) {
00089 CPPUNIT_ASSERT (packet->port() == port);
00090 CPPUNIT_ASSERT (packet->ipAddress() == ipAddress);
00091 CPPUNIT_ASSERT (packet->sharedFiles() == sharedFiles);
00092 CPPUNIT_ASSERT (packet->sharedKiloBytes() == sharedKiloBytes);
00093 CPPUNIT_ASSERT (packet->ggepBlock() == ggepBlock);
00094 }
00095 }
00096
00098
00102 void scenarioWritePacket (quint16 port,
00103 const QHostAddress &ipAddress,
00104 quint32 sharedFiles,
00105 quint32 sharedKiloBytes,
00106 const GgepBlock &ggepBlock,
00107 const QByteArray &rawHeader,
00108 const QByteArray &rawPayload) {
00109 packet->setPort (port);
00110 packet->setIpAddress (ipAddress);
00111 packet->setSharedFiles (sharedFiles);
00112 packet->setSharedKiloBytes (sharedKiloBytes);
00113 packet->setGgepBlock (ggepBlock);
00114
00115 CPPUNIT_ASSERT (packet->rawHeader() == rawHeader);
00116 CPPUNIT_ASSERT (packet->rawPayload() == rawPayload);
00117 }
00118
00120
00128 void scenarioReadSetWritePacket (const QByteArray &rawHeader,
00129 const QByteArray &rawPayload,
00130 quint16 port,
00131 const QHostAddress &ipAddress,
00132 quint32 sharedFiles,
00133 quint32 sharedKiloBytes,
00134 const GgepBlock &ggepBlock,
00135 const QByteArray &rawHeader2,
00136 const QByteArray &rawPayload2) {
00137 CPPUNIT_ASSERT (packet->parse (rawHeader, rawPayload));
00138
00139 packet->setPort (port);
00140 packet->setIpAddress (ipAddress);
00141 packet->setSharedFiles (sharedFiles);
00142 packet->setSharedKiloBytes (sharedKiloBytes);
00143 packet->setGgepBlock (ggepBlock);
00144
00145 CPPUNIT_ASSERT (packet->rawHeader() == rawHeader2);
00146 CPPUNIT_ASSERT (packet->rawPayload() == rawPayload2);
00147 }
00148
00150 void testPacketProperties()
00151 {
00152 CPPUNIT_ASSERT (PongPacket == packet->packetType());
00153 CPPUNIT_ASSERT (QString ("Pong") == packet->name());
00154 }
00155
00156 void testReadPacketOK() {
00157 scenarioReadPacket(
00158 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x1\x7\x8\x1c\0\0\0", 23),
00159 QByteArray ("\x67\x45\x55\xd6\x3c\xb9\x70\x56\x34\x12\x07\x89\x70\x56\xC3\x84UNKN\107fortest", 28),
00160 true,
00161 0x4567,
00162 QHostAddress(0x55d63cb9),
00163 0x12345670,
00164 0x56708907,
00165 GgepBlock().addExtension(Ggeps::Unknown("UNKN","fortest")));
00166 }
00167
00168 void testReadPacketNoPayload() {
00169 scenarioReadPacket(
00170 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x1\x7\x8\0\0\0\0", 23),
00171 QByteArray(),
00172 false,
00173 0,
00174 QHostAddress(),
00175 0,
00176 0,
00177 GgepBlock());
00178 }
00179
00180 void testWritePacketOK() {
00181 scenarioWritePacket(
00182 0x4567,
00183 QHostAddress(0x55d63cb9),
00184 0x12345670,
00185 0x56708907,
00186 GgepBlock().addExtension(Ggeps::Unknown("UNKN","fortest")),
00187 packet->rawHeader().replace(19, 4, QByteArray("\x1c\0\0\0",4)),
00188 QByteArray ("\x67\x45\x55\xd6\x3c\xb9\x70\x56\x34\x12\x07\x89\x70\x56\xC3\x84UNKN\107fortest", 28));
00189 }
00190
00191 void testReadSetWritePacketOK() {
00192 scenarioReadSetWritePacket(
00193 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x1\x7\x8\x1c\0\0\0", 23),
00194 QByteArray ("\x67\x45\x55\xd6\x3c\xb9\x70\x56\x34\x12\x07\x89\x70\x56\xC3\x84UNKN\107fortest", 28),
00195 0x2345,
00196 QHostAddress(0x7f000001),
00197 0x20061008,
00198 0x20070412,
00199 GgepBlock().addExtension(Ggeps::Unknown("UNKN","fortest2")),
00200 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x1\x7\x8\x1d\0\0\0", 23),
00201 QByteArray ("\x45\x23\x7f\0\0\x01\x08\x10\x06\x20\x12\x04\x07\x20\xC3\x84UNKN\110fortest2", 29));
00202 }
00203 };
00204
00205 CPPUNIT_TEST_SUITE_REGISTRATION(PongTest);
00206
00207 }
00208 }
00209 }
00210 }