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 "../Query.h"
00025 #include "Imports.cpp"
00026
00027 namespace Protocols {
00028 namespace Gnutella {
00029 namespace Packets {
00030 namespace Testing {
00031
00033
00051 class QueryTest : public CppUnit::TestFixture
00052 {
00053 CPPUNIT_TEST_SUITE(QueryTest);
00054 CPPUNIT_TEST(testPacketProperties);
00055 CPPUNIT_TEST(testReadPacketHasExtension);
00056 CPPUNIT_TEST(testReadPacketNoExtension);
00057 CPPUNIT_TEST(testWritePacketHasExtension);
00058 CPPUNIT_TEST(testWritePacketNoExtension);
00059 CPPUNIT_TEST(testReadSetWritePacketOK);
00060 CPPUNIT_TEST_SUITE_END();
00061
00062 auto_ptr <Query> packet;
00063
00064 public:
00065 void setUp()
00066 {
00067 packet.reset (new Query());
00068 }
00069
00070 void tearDown()
00071 {
00072 packet.reset();
00073 }
00074
00076
00080 void scenarioReadPacket (const QByteArray &rawHeader,
00081 const QByteArray &rawPayload,
00082 bool parsedOk,const MinSpeed &minSpeed,
00083 const QByteArray &searchCriteria,
00084 const QueryData &extension) {
00085 CPPUNIT_ASSERT (packet->parse (rawHeader, rawPayload) == parsedOk);
00086
00087 if (parsedOk) {
00088 CPPUNIT_ASSERT (packet->minSpeed() == minSpeed);
00089 CPPUNIT_ASSERT (packet->searchCriteria() == searchCriteria);
00090 CPPUNIT_ASSERT (packet->extension() == extension);
00091 }
00092 }
00093
00095
00099 void scenarioWritePacket (const MinSpeed &minSpeed,
00100 const QByteArray &searchCriteria,
00101 const QueryData &extension,
00102 const QByteArray &rawHeader,
00103 const QByteArray &rawPayload) {
00104 packet->setMinSpeed (minSpeed);
00105 packet->setSearchCriteria (searchCriteria);
00106 packet->setExtension (extension);
00107
00108 CPPUNIT_ASSERT (packet->rawHeader() == rawHeader);
00109 CPPUNIT_ASSERT (packet->rawPayload() == rawPayload);
00110 }
00111
00113
00121 void scenarioReadSetWritePacket (const QByteArray &rawHeader,
00122 const QByteArray &rawPayload,
00123 const MinSpeed &minSpeed,
00124 const QByteArray &searchCriteria,
00125 const QueryData &extension,
00126 const QByteArray &rawHeader2,
00127 const QByteArray &rawPayload2) {
00128 CPPUNIT_ASSERT (packet->parse (rawHeader, rawPayload));
00129
00130 packet->setMinSpeed (minSpeed);
00131 packet->setSearchCriteria (searchCriteria);
00132 packet->setExtension (extension);
00133
00134 CPPUNIT_ASSERT (packet->rawHeader() == rawHeader2);
00135 CPPUNIT_ASSERT (packet->rawPayload() == rawPayload2);
00136 }
00137
00139 void testPacketProperties()
00140 {
00141 CPPUNIT_ASSERT (QueryPacket == packet->packetType());
00142 CPPUNIT_ASSERT (QString ("Query") == packet->name());
00143 }
00144
00145 void testReadPacketHasExtension() {
00146 scenarioReadPacket(
00147 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x80\x7\x8\x14\0\0\0", 23),
00148 QByteArray ("\xa4\x7c\143alitko\0\074xmltest/\076", 20),
00149 true,
00150 MinSpeed(true, false, true, false,false, true, '\x7c'),
00151 QByteArray("calitko"),
00152 QueryData::xmlExtension ("\074xmltest/\076"));
00153 }
00154
00155 void testReadPacketNoExtension() {
00156 scenarioReadPacket(
00157 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x80\x7\x8\xa\0\0\0", 23),
00158 QByteArray ("\xa4\x7c\143alitko\0", 10),
00159 true,
00160 MinSpeed(true, false, true, false,false, true, '\x7c'),
00161 QByteArray("calitko"),
00162 QueryData());
00163 }
00164
00165 void testWritePacketHasExtension() {
00166 scenarioWritePacket(
00167 MinSpeed(true, false, true, false,false, true, '\x7c'),
00168 QByteArray("calitko"),
00169 QueryData::xmlExtension ("\074xmltest/\076"),
00170 packet->rawHeader().replace(19, 4, QByteArray("\x14\0\0\0",4)),
00171 QByteArray ("\xa4\x7c\143alitko\0\074xmltest/\076", 20));
00172 }
00173
00174 void testWritePacketNoExtension() {
00175 scenarioWritePacket(
00176 MinSpeed(true, false, true, false,false, true, '\x7c'),
00177 QByteArray("calitko"),
00178 QueryData(),
00179 packet->rawHeader().replace(19, 4, QByteArray("\xa\0\0\0",4)),
00180 QByteArray ("\xa4\x7c\143alitko\0", 10));
00181 }
00182
00183 void testReadSetWritePacketOK() {
00184 scenarioReadSetWritePacket(
00185 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x80\x7\x8\x14\0\0\0", 23),
00186 QByteArray ("\xa4\x7c\143alitko\0\074xmltest/\076", 20),
00187 MinSpeed(true, true, false, false,true, true, '\x3b'),
00188 QByteArray("peterdemov"),
00189 QueryData::urnExtension ("urn: hugetest"),
00190 QByteArray ("\x1\x2\x3\x4\x5\x6\x7\x8\x9\0\x1\x2\x3\x4\x5\x6\x80\x7\x8\x1a\0\0\0", 23),
00191 QByteArray ("\xcc\x3bpeterdemov\0urn: hugetest", 26));
00192 }
00193 };
00194
00195 CPPUNIT_TEST_SUITE_REGISTRATION(QueryTest);
00196
00197 }
00198 }
00199 }
00200 }