TrackerResponseTest.cpp

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 2006-2007 by Peter Dimov.
00004 
00005 This file is part of Calitko (http://www.calitko.org).
00006 
00007 Calitko is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 Calitko is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Calitko; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 */
00022 
00023 #include "Qt.h"
00024 #include "../TrackerResponse.h"
00025 #include "../TrackerResponseParser.h"
00026 #include "Imports.cpp"
00027 
00028 namespace Protocols {
00029 namespace BitTorrent {
00030 namespace Trackers {
00031 namespace Testing {
00032 
00034 
00036 class TrackerResponseTest : public CppUnit::TestFixture
00037 {
00038     CPPUNIT_TEST_SUITE (TrackerResponseTest);
00039     CPPUNIT_TEST (testCompareTwoEqualNonEmptyTrackerResponses);
00040     CPPUNIT_TEST (testCompareTwoEqualEmptyTrackerResponses);
00041     CPPUNIT_TEST (testCompareTwoDifferentNonEmptyTrackerResponses);
00042     CPPUNIT_TEST (testCompareEmptyAndNonEmptyTrackerResponses);
00043     CPPUNIT_TEST (testCopyCtor);
00044     CPPUNIT_TEST (testAssignment);
00045     CPPUNIT_TEST (testModifyingACopyDoesNotChangeTheOriginal);
00046     CPPUNIT_TEST_SUITE_END();
00047 
00048     const QByteArray rawResponseDataOk1;
00049     const QByteArray rawResponseDataOk2;
00050 
00051 public:
00052     TrackerResponseTest();
00053 
00055     void testCompareTwoEqualNonEmptyTrackerResponses()
00056     {
00057         TrackerResponse response1, response2;
00058         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00059             rawResponseDataOk1, response1);
00060         bool loadedOk2 = TrackerResponseParser::parseAndLoadTrackerResponse (
00061             rawResponseDataOk1, response2);
00062         CPPUNIT_ASSERT (loadedOk1 && loadedOk2);
00063 
00064         CPPUNIT_ASSERT (response1 == response2);
00065         CPPUNIT_ASSERT (!(response1 != response2));
00066     }
00067 
00069     void testCompareTwoEqualEmptyTrackerResponses()
00070     {
00071         TrackerResponse response1, response2;
00072 
00073         CPPUNIT_ASSERT (response1 == response2);
00074         CPPUNIT_ASSERT (!(response1 != response2));
00075     }
00076 
00078     void testCompareTwoDifferentNonEmptyTrackerResponses()
00079     {
00080         TrackerResponse response1, response2;
00081         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00082             rawResponseDataOk1, response1);
00083         bool loadedOk2 = TrackerResponseParser::parseAndLoadTrackerResponse (
00084             rawResponseDataOk2, response2);
00085         CPPUNIT_ASSERT (loadedOk1 && loadedOk2);
00086 
00087         CPPUNIT_ASSERT (response1 != response2);
00088         CPPUNIT_ASSERT (!(response1 == response2));
00089     }
00090 
00092     void testCompareEmptyAndNonEmptyTrackerResponses()
00093     {
00094         TrackerResponse response1;
00095         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00096             rawResponseDataOk1, response1);
00097         CPPUNIT_ASSERT (loadedOk1);
00098 
00099         CPPUNIT_ASSERT (response1 != TrackerResponse());
00100         CPPUNIT_ASSERT (!(response1 == TrackerResponse()));
00101     }
00102 
00104     void testCopyCtor()
00105     {
00106         TrackerResponse response1;
00107         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00108             rawResponseDataOk1, response1);
00109         CPPUNIT_ASSERT (loadedOk1);
00110 
00111         TrackerResponse response2 (response1);
00112         CPPUNIT_ASSERT (response1 == response2);
00113     }
00114 
00116     void testAssignment()
00117     {
00118         TrackerResponse response1, response2;
00119         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00120             rawResponseDataOk1, response1);
00121         CPPUNIT_ASSERT (loadedOk1);
00122 
00123         CPPUNIT_ASSERT (response1 != response2);
00124         response2 = response1;
00125         CPPUNIT_ASSERT (response1 == response2);
00126     }
00127 
00129     void testModifyingACopyDoesNotChangeTheOriginal()
00130     {
00131         TrackerResponse response1, response2;
00132         bool loadedOk1 = TrackerResponseParser::parseAndLoadTrackerResponse (
00133             rawResponseDataOk1, response1);
00134         CPPUNIT_ASSERT (loadedOk1);
00135 
00136         response2 = response1;
00137         // After loading the new response the two objects should be different.
00138         bool loadedOk2 = TrackerResponseParser::parseAndLoadTrackerResponse (
00139             rawResponseDataOk2, response2);
00140         CPPUNIT_ASSERT (loadedOk2);
00141         CPPUNIT_ASSERT (response1 != response2);
00142     }
00143 };
00144 
00145 CPPUNIT_TEST_SUITE_REGISTRATION(TrackerResponseTest);
00146 
00148 
00153 TrackerResponseTest::TrackerResponseTest()
00154     : rawResponseDataOk1 (
00155         "d"
00156             "8:intervali300e"
00157             "5:peersle"
00158         "e"),
00159     rawResponseDataOk2 (
00160         "d"
00161             "15:warning message7:Warning"
00162             "8:intervali300e"
00163             "12:min intervali600e"
00164             "10:tracker id20:dg47sk3ld06jvnzmaq23"
00165             "8:completei10e"
00166             "10:incompletei20e"
00167             "5:peers"
00168                 "l"
00169                     "d"
00170                         "7:peer id20:agd538x9fo4bf85jg076"
00171                         "2:ip9:127.0.0.1"
00172                         "4:porti6881e"
00173                     "e"
00174                 "e"
00175         "e")
00176 {
00177 }
00178 
00179 } // namespace Testing
00180 } // namespace Trackers
00181 } // namespace BitTorrent
00182 } // namespace Protocols