TransferTest.cpp
Go to the documentation of this file.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 "../Transfer.h"
00025 #include "generated/PacketProcessorMock.h"
00026 #include "generated/TransferDriver.h"
00027 #include "generated/TransferMock.h"
00028 #include "generated/TransferSessionMock.h"
00029 #include "Imports.cpp"
00030
00031 namespace Protocols {
00032 namespace BitTorrent {
00033 namespace Transfers {
00034 namespace Testing {
00035
00037
00039 class TransferTest : public CppUnit::TestFixture
00040 {
00041 CPPUNIT_TEST_SUITE(TransferTest);
00042 CPPUNIT_TEST (testStartTransferForTorrent);
00043 CPPUNIT_TEST (testPeersReturnedFromTrackerAddedToSessionManager);
00044 CPPUNIT_TEST (testEstablishedSessionAllPacketProcessorsAreNotified);
00045 CPPUNIT_TEST (testIncomingPacketForwardedToAllPacketProcessors);
00046 CPPUNIT_TEST (testOutgoingPacketForwardedToAllPacketProcessors);
00047 CPPUNIT_TEST (testClosingSessionDoesNothing);
00048 CPPUNIT_TEST (testClosedSessionAllPacketProcessorsAreNotified);
00049 CPPUNIT_TEST (testStopTransfer);
00050 CPPUNIT_TEST_SUITE_END();
00051
00052 auto_ptr <TrackerManagerMock> trackerManager;
00053 auto_ptr <SessionManagerMock> sessionManager;
00054 auto_ptr <PacketProcessorMock> choker;
00055 auto_ptr <PacketProcessorMock> pieceRequester;
00056 auto_ptr <PacketProcessorMock> pieceProvider;
00057 auto_ptr <Transfer> transferReal;
00058 auto_ptr <TransferDriver> transfer;
00059
00060 const QList <PeerInfo> peers;
00061 const PeerInfo::PeerId peerId;
00062 const Packet packet;
00063 auto_ptr <TransferSessionMock> session;
00064
00065 public:
00066 TransferTest();
00067
00068 void setUp()
00069 {
00070 trackerManager.reset (new TrackerManagerMock());
00071 sessionManager.reset (new SessionManagerMock());
00072 choker.reset (new PacketProcessorMock());
00073 pieceRequester.reset (new PacketProcessorMock());
00074 pieceProvider.reset (new PacketProcessorMock());
00075 QList <PacketProcessor *> packetProcessors;
00076 packetProcessors.append (*choker);
00077 packetProcessors.append (*pieceRequester);
00078 packetProcessors.append (*pieceProvider);
00079 transferReal.reset (new Transfer(*trackerManager, *sessionManager,
00080 packetProcessors));
00081 transfer.reset (new TransferDriver (*transferReal.get()));
00082 session.reset (new TransferSessionMock());
00083 }
00084
00085 void tearDown()
00086 {
00087 transfer.reset();
00088 transferReal.reset();
00089 pieceProvider.reset();
00090 pieceRequester.reset();
00091 choker.reset();
00092 sessionManager.reset();
00093 trackerManager.reset();
00094 session.reset();
00095 }
00096
00097 void testStartTransferForTorrent()
00098 {
00099 Torrent torrent;
00100
00101 call (transfer->start (torrent))
00102 .willCall (trackerManager->start (torrent.announce()))
00103 .returns()
00104 .willCall (sessionManager->start())
00105 .returns()
00106 .returns();
00107 }
00108
00109 void stateTransferStarted()
00110 {
00111 testStartTransferForTorrent();
00112 }
00113
00114 void testPeersReturnedFromTrackerAddedToSessionManager()
00115 {
00116 call (transfer->trackerManagerFoundPeers (peers))
00117 .willCall (sessionManager->addPeers (peers))
00118 .returns()
00119 .returns();
00120 }
00121
00122 void testEstablishedSessionAllPacketProcessorsAreNotified()
00123 {
00124 call (transfer->sessionManagerEstablishedSession (*session))
00125 .willCall (choker->openedSession (*session))
00126 .returns()
00127 .willCall (pieceRequester->openedSession (*session))
00128 .returns()
00129 .willCall (pieceProvider->openedSession (*session))
00130 .returns()
00131 .returns();
00132 }
00133
00134 void testIncomingPacketForwardedToAllPacketProcessors()
00135 {
00136 call (transfer->transferSessionReceivedPacket (*session, packet))
00137 .willCall (choker->incomingPacket (*session, packet))
00138 .returns()
00139 .willCall (pieceRequester->incomingPacket (*session, packet))
00140 .returns()
00141 .willCall (pieceProvider->incomingPacket (*session, packet))
00142 .returns()
00143 .returns();
00144 }
00145
00146 void testOutgoingPacketForwardedToAllPacketProcessors()
00147 {
00148 call (transfer->transferSessionSendingPacket (*session, packet))
00149 .willCall (choker->outgoingPacket (*session, packet))
00150 .returns()
00151 .willCall (pieceRequester->outgoingPacket (*session, packet))
00152 .returns()
00153 .willCall (pieceProvider->outgoingPacket (*session, packet))
00154 .returns()
00155 .returns();
00156 }
00157
00158 void testClosingSessionDoesNothing()
00159 {
00160 call (transfer->transferSessionClosing (*session))
00161 .returns();
00162 }
00163
00164 void testClosedSessionAllPacketProcessorsAreNotified()
00165 {
00166 call (transfer->transferSessionClosed (*session))
00167 .willCall (choker->closedSession (*session))
00168 .returns()
00169 .willCall (pieceRequester->closedSession (*session))
00170 .returns()
00171 .willCall (pieceProvider->closedSession (*session))
00172 .returns()
00173 .willCall (sessionManager->closedSession (*session))
00174 .returns()
00175 .returns();
00176 }
00177
00178 void testStopTransfer()
00179 {
00180 call (transfer->stop())
00181 .willCall (trackerManager->stop())
00182 .returns()
00183 .willCall (sessionManager->stop())
00184 .returns()
00185 .returns();
00186 }
00187 };
00188
00189 TransferTest::TransferTest()
00190 : trackerManager(), sessionManager(), choker(), pieceRequester(),
00191 pieceProvider(), transferReal(), transfer(), peers(), peerId(), packet(),
00192 session()
00193 {
00194 }
00195
00196 CPPUNIT_TEST_SUITE_REGISTRATION(TransferTest);
00197
00198 }
00199 }
00200 }
00201 }