PeerInfoTest.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 "../PeerInfo.h"
00025 #include "Imports.cpp"
00026 
00027 namespace Protocols {
00028 namespace BitTorrent {
00029 namespace Trackers {
00030 namespace Testing {
00031 
00033 
00035 class PeerInfoTest : public CppUnit::TestFixture
00036 {
00037     CPPUNIT_TEST_SUITE (PeerInfoTest);
00038     CPPUNIT_TEST (testDefaultCtorCreatesEmptyPeerInfo);
00039     CPPUNIT_TEST (testCtorCreatesCorrectPeerInfo);
00040     CPPUNIT_TEST (testCompareTwoEqualNonEmptyPeerInfos);
00041     CPPUNIT_TEST (testCompareTwoEqualEmptyPeerInfos);
00042     CPPUNIT_TEST (testCompareTwoDifferentNonEmptyPeerInfos);
00043     CPPUNIT_TEST (testCompareEmptyAndNonEmptyPeerInfos);
00044     CPPUNIT_TEST (testCopyCtor);
00045     CPPUNIT_TEST (testAssignment);
00046     CPPUNIT_TEST (testModifyingACopyDoesNotChangeTheOriginal);
00047     CPPUNIT_TEST (testSetHostSetsHostCorrectly);
00048     CPPUNIT_TEST (testSetPortSetsPortCorrectly);
00049     CPPUNIT_TEST (testSetPeerIdSetsPeerIdCorrectly);
00050     CPPUNIT_TEST (testSetPeerIdTwice);
00051     CPPUNIT_TEST (testToUriEmptyPeerInfo);
00052     CPPUNIT_TEST (testToUriEverythingSet);
00053     CPPUNIT_TEST (testFromUriEmptyUri);
00054     CPPUNIT_TEST (testFromUriPortUnspecified);
00055     CPPUNIT_TEST (testFromUriPeerIdUnspecified);
00056     CPPUNIT_TEST (testFromUriEverythingSpecified);
00057     CPPUNIT_TEST_SUITE_END();
00058 
00059 public:
00061     void testDefaultCtorCreatesEmptyPeerInfo()
00062     {
00063         PeerInfo peerInfo;
00064 
00065         CPPUNIT_ASSERT  (peerInfo.host() == "0.0.0.0");
00066         CPPUNIT_ASSERT  (peerInfo.port() == 0);
00067         CPPUNIT_ASSERT  (peerInfo.peerId() == PeerInfo::PeerId());
00068     }
00069 
00071     void testCtorCreatesCorrectPeerInfo()
00072     {
00073         PeerInfo peerInfo ("145.64.45.123", 6881,
00074             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00075 
00076         CPPUNIT_ASSERT  (peerInfo.host() == QByteArray ("145.64.45.123"));
00077         CPPUNIT_ASSERT  (peerInfo.port() == 6881);
00078         CPPUNIT_ASSERT  (peerInfo.peerId() ==
00079             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00080     }
00081 
00083     void testCompareTwoEqualNonEmptyPeerInfos()
00084     {
00085         PeerInfo peerInfo1 ("145.64.45.123", 6881,
00086             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00087         PeerInfo peerInfo2 ("145.64.45.123", 6881,
00088             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00089 
00090         CPPUNIT_ASSERT (peerInfo1 == peerInfo2);
00091         CPPUNIT_ASSERT (!(peerInfo1 != peerInfo2));
00092     }
00093 
00095     void testCompareTwoEqualEmptyPeerInfos()
00096     {
00097         PeerInfo peerInfo1;
00098         PeerInfo peerInfo2;
00099 
00100         CPPUNIT_ASSERT (peerInfo1 == peerInfo2);
00101         CPPUNIT_ASSERT (!(peerInfo1 != peerInfo2));
00102     }
00103 
00105     void testCompareTwoDifferentNonEmptyPeerInfos()
00106     {
00107         PeerInfo peerInfo1 ("127.0.0.1", 6880,
00108             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00109         PeerInfo peerInfo2 ("145.64.45.123", 6881,
00110             PeerInfo::PeerId ("af2vxzmskf9rocmglhon"));
00111 
00112         CPPUNIT_ASSERT (peerInfo1 != peerInfo2);
00113         CPPUNIT_ASSERT (!(peerInfo1 == peerInfo2));
00114     }
00115 
00117     void testCompareEmptyAndNonEmptyPeerInfos()
00118     {
00119         PeerInfo peerInfo1 ("127.0.0.1", 6880,
00120             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00121         PeerInfo peerInfo2;
00122 
00123         CPPUNIT_ASSERT (peerInfo1 != peerInfo2);
00124         CPPUNIT_ASSERT (!(peerInfo1 == peerInfo2));
00125     }
00126 
00128     void testCopyCtor()
00129     {
00130         PeerInfo peerInfo1 ("127.0.0.1", 6880,
00131             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00132         PeerInfo peerInfo2 (peerInfo1);
00133 
00134         CPPUNIT_ASSERT (peerInfo1 == peerInfo2);
00135     }
00136 
00138     void testAssignment()
00139     {
00140         PeerInfo peerInfo1 ("127.0.0.1", 6880,
00141             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00142         PeerInfo peerInfo2;
00143         peerInfo2 = peerInfo1;
00144 
00145         CPPUNIT_ASSERT (peerInfo1 == peerInfo2);
00146     }
00147 
00149     void testModifyingACopyDoesNotChangeTheOriginal()
00150     {
00151         PeerInfo peerInfo1 ("127.0.0.1", 6880,
00152             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00153         PeerInfo peerInfo2;
00154         peerInfo2 = peerInfo1;
00155         // After setting different data to the new peer info the two objects
00156         // should be different.
00157         peerInfo2 = PeerInfo ("12.89.9.1", 6881,
00158             PeerInfo::PeerId ("xvsf3yr64hfgxbzlbnvd"));
00159 
00160         CPPUNIT_ASSERT (peerInfo1 != peerInfo2);
00161     }
00162 
00164     void testSetHostSetsHostCorrectly()
00165     {
00166         PeerInfo peerInfo;
00167         peerInfo.setHost ("127.0.0.1");
00168 
00169         CPPUNIT_ASSERT (peerInfo.host() == QByteArray ("127.0.0.1"));
00170     }
00171 
00173     void testSetPortSetsPortCorrectly()
00174     {
00175         PeerInfo peerInfo;
00176         peerInfo.setPort (6882);
00177 
00178         CPPUNIT_ASSERT (peerInfo.port() == 6882);
00179     }
00180 
00182     void testSetPeerIdSetsPeerIdCorrectly()
00183     {
00184         PeerInfo peerInfo;
00185         PeerInfo::PeerId peerId ("xvsf3yr64hfgxbzlbnvd");
00186         peerInfo.setPeerId (peerId);
00187 
00188         CPPUNIT_ASSERT (peerInfo.peerId() == peerId);
00189     }
00190 
00195     void testSetPeerIdTwice()
00196     {
00197         PeerInfo peerInfo;
00198         PeerInfo::PeerId peerId1 ("xvsf3yr64hfgxbzlbnvd");
00199         peerInfo.setPeerId (peerId1);
00200         PeerInfo::PeerId peerId2 ("j7f53fx0fknv713sxlo9");
00201         peerInfo.setPeerId (peerId2);
00202 
00203         CPPUNIT_ASSERT (peerInfo.peerId() == peerId2);
00204     }
00205 
00207     void testToUriEmptyPeerInfo()
00208     {
00209         PeerInfo peerInfo;
00210         Uri peerInfoAsUri;
00211         peerInfoAsUri.setScheme ("bt-peer");
00212         peerInfoAsUri.setAuthority (QByteArray(), "0.0.0.0", "0");
00213         peerInfoAsUri.appendQueryItem ("id", PeerInfo::PeerId().toQByteArray());
00214 
00215         CPPUNIT_ASSERT (peerInfo.toUri() == peerInfoAsUri);
00216     }
00217 
00219     void testToUriEverythingSet()
00220     {
00221         PeerInfo peerInfo ("127.0.0.1", 6880,
00222             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00223 
00224         CPPUNIT_ASSERT (peerInfo.toUri() == Uri::fromUnencoded (
00225             "bt-peer://127.0.0.1:6880?id=gf2vxzmskf9rocmglhon"));
00226     }
00227 
00229     void testFromUriEmptyUri()
00230     {
00231         CPPUNIT_ASSERT (PeerInfo() == PeerInfo::fromUri (
00232             Uri::fromUnencoded ("bt-peer:")));
00233     }
00234 
00236     void testFromUriPortUnspecified()
00237     {
00238         PeerInfo peerInfo ("127.0.0.1", 0,
00239             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00240 
00241         CPPUNIT_ASSERT (peerInfo == PeerInfo::fromUri (Uri::fromUnencoded (
00242             "bt-peer://127.0.0.1?id=gf2vxzmskf9rocmglhon")));
00243     }
00244 
00246     void testFromUriPeerIdUnspecified()
00247     {
00248         PeerInfo peerInfo ("127.0.0.1", 6880,
00249             PeerInfo::PeerId());
00250 
00251         CPPUNIT_ASSERT (peerInfo == PeerInfo::fromUri (Uri::fromUnencoded (
00252             "bt-peer://127.0.0.1:6880")));
00253     }
00254 
00256     void testFromUriEverythingSpecified()
00257     {
00258         PeerInfo peerInfo ("127.0.0.1", 6880,
00259             PeerInfo::PeerId ("gf2vxzmskf9rocmglhon"));
00260 
00261         CPPUNIT_ASSERT (peerInfo == PeerInfo::fromUri (Uri::fromUnencoded (
00262             "bt-peer://127.0.0.1:6880?id=gf2vxzmskf9rocmglhon")));
00263     }
00264 };
00265 
00266 CPPUNIT_TEST_SUITE_REGISTRATION(PeerInfoTest);
00267 
00268 } // namespace Testing
00269 } // namespace Trackers
00270 } // namespace BitTorrent
00271 } // namespace Protocols