47
48
void testCancelSendingPieceEvent_invalidate();
48
49
void testToString();
50
class MockBtMessage2 : public MockBtMessage {
56
MockBtMessage2(size_t index, uint32_t begin, size_t length):index(index), begin(begin), length(length) {}
60
51
class MockBtMessageFactory2 : public MockBtMessageFactory {
62
virtual SharedHandle<BtMessage>
53
virtual std::unique_ptr<BtRejectMessage>
63
54
createRejectMessage(size_t index,
66
SharedHandle<MockBtMessage2> msg(new MockBtMessage2(index, begin, length));
56
int32_t length) CXX11_OVERRIDE
58
return make_unique<BtRejectMessage>(index, begin, length);
71
SharedHandle<DownloadContext> dctx_;
72
SharedHandle<MockBtMessageDispatcher> btMessageDispatcher;
73
SharedHandle<MockBtMessageFactory> btMessageFactory_;
74
SharedHandle<Peer> peer;
75
SharedHandle<BtPieceMessage> msg;
62
std::unique_ptr<DownloadContext> dctx_;
63
std::unique_ptr<MockBtMessageDispatcher> btMessageDispatcher;
64
std::unique_ptr<MockBtMessageFactory> btMessageFactory_;
65
std::shared_ptr<Peer> peer;
66
std::unique_ptr<BtPieceMessage> msg;
78
dctx_.reset(new DownloadContext(16*1024, 256*1024, "/path/to/file"));
69
dctx_ = make_unique<DownloadContext>(16*1024, 256*1024, "/path/to/file");
80
peer.reset(new Peer("host", 6969));
71
peer = std::make_shared<Peer>("host", 6969);
81
72
peer->allocateSessionResource(dctx_->getPieceLength(),
82
73
dctx_->getTotalLength());
84
btMessageDispatcher.reset(new MockBtMessageDispatcher());
85
btMessageFactory_.reset(new MockBtMessageFactory2());
75
btMessageDispatcher = make_unique<MockBtMessageDispatcher>();
76
btMessageFactory_ = make_unique<MockBtMessageFactory2>();
87
msg.reset(new BtPieceMessage());
78
msg = make_unique<BtPieceMessage>();
89
80
msg->setBegin(1024);
90
81
msg->setBlockLength(16*1024);
91
msg->setDownloadContext(dctx_);
82
msg->setDownloadContext(dctx_.get());
92
83
msg->setPeer(peer);
93
84
msg->setBtMessageDispatcher(btMessageDispatcher.get());
94
85
msg->setBtMessageFactory(btMessageFactory_.get());
106
97
bittorrent::setIntParam(&msg[5], 12345);
107
98
bittorrent::setIntParam(&msg[9], 256);
108
99
memcpy(&msg[13], data, sizeof(data));
109
SharedHandle<BtPieceMessage> pm(BtPieceMessage::create(&msg[4], 11));
100
std::shared_ptr<BtPieceMessage> pm(BtPieceMessage::create(&msg[4], 11));
110
101
CPPUNIT_ASSERT_EQUAL((uint8_t)7, pm->getId());
111
102
CPPUNIT_ASSERT_EQUAL((size_t)12345, pm->getIndex());
112
103
CPPUNIT_ASSERT_EQUAL(256, pm->getBegin());
167
158
CPPUNIT_ASSERT(msg->isInvalidate());
168
159
CPPUNIT_ASSERT_EQUAL((size_t)1, btMessageDispatcher->messageQueue.size());
169
SharedHandle<MockBtMessage2> rej =
170
dynamic_pointer_cast<MockBtMessage2>
171
(btMessageDispatcher->messageQueue.front());
172
CPPUNIT_ASSERT_EQUAL((size_t)1, rej->index);
173
CPPUNIT_ASSERT_EQUAL((uint32_t)1024, rej->begin);
174
CPPUNIT_ASSERT_EQUAL((size_t)16*1024, rej->length);
160
auto rej = static_cast<const BtRejectMessage*>
161
(btMessageDispatcher->messageQueue.front().get());
162
CPPUNIT_ASSERT_EQUAL((size_t)1, rej->getIndex());
163
CPPUNIT_ASSERT_EQUAL((int32_t)1024, rej->getBegin());
164
CPPUNIT_ASSERT_EQUAL((int32_t)16*1024, rej->getLength());
177
167
void BtPieceMessageTest::testChokingEvent_inAmAllowedIndexSet() {
236
226
CPPUNIT_ASSERT(msg->isInvalidate());
237
227
CPPUNIT_ASSERT_EQUAL((size_t)1, btMessageDispatcher->messageQueue.size());
238
SharedHandle<MockBtMessage2> rej =
239
dynamic_pointer_cast<MockBtMessage2>
240
(btMessageDispatcher->messageQueue.front());
241
CPPUNIT_ASSERT_EQUAL((size_t)1, rej->index);
242
CPPUNIT_ASSERT_EQUAL((uint32_t)1024, rej->begin);
243
CPPUNIT_ASSERT_EQUAL((size_t)16*1024, rej->length);
228
auto rej = static_cast<const BtRejectMessage*>
229
(btMessageDispatcher->messageQueue.front().get());
230
CPPUNIT_ASSERT_EQUAL((size_t)1, rej->getIndex());
231
CPPUNIT_ASSERT_EQUAL((int32_t)1024, rej->getBegin());
232
CPPUNIT_ASSERT_EQUAL((int32_t)16*1024, rej->getLength());
246
235
void BtPieceMessageTest::testCancelSendingPieceEvent_invalidate() {