50
49
index(index), blockIndex(blockIndex) {}
53
typedef SharedHandle<MockBtRequestMessage> MockBtRequestMessageHandle;
55
52
class MockBtMessageFactory2 : public MockBtMessageFactory {
57
virtual SharedHandle<BtMessage>
58
createRequestMessage(const SharedHandle<Piece>& piece, size_t blockIndex) {
59
return SharedHandle<BtMessage>
60
(new MockBtRequestMessage(piece->getIndex(), blockIndex));
54
virtual std::unique_ptr<BtRequestMessage>
55
createRequestMessage(const std::shared_ptr<Piece>& piece,
56
size_t blockIndex) CXX11_OVERRIDE
58
return make_unique<BtRequestMessage>(piece->getIndex(), 0, 0,
64
63
class MockBtMessageDispatcher2 : public MockBtMessageDispatcher {
66
virtual bool isOutstandingRequest(size_t index, size_t blockIndex) {
65
virtual bool isOutstandingRequest(size_t index, size_t blockIndex)
67
68
return index == 0 && blockIndex == 0;
71
class SortMockBtRequestMessage {
72
class BtRequestMessageSorter {
73
bool operator()(const SharedHandle<MockBtRequestMessage>& a,
74
const SharedHandle<MockBtRequestMessage>& b) {
75
if(a->index < b->index) {
77
} else if(b->index < a->index) {
79
} else if(a->blockIndex < b->blockIndex) {
81
} else if(b->blockIndex < a->blockIndex) {
74
bool operator()(const std::unique_ptr<BtRequestMessage>& a,
75
const std::unique_ptr<BtRequestMessage>& b)
77
return a->getIndex() < b->getIndex() ||
78
(a->getIndex() == b->getIndex() &&
79
a->getBlockIndex() < b->getBlockIndex());
91
pieceStorage_.reset(new MockPieceStorage());
93
peer_.reset(new Peer("host", 6969));
95
messageFactory_.reset(new MockBtMessageFactory2());
97
dispatcher_.reset(new MockBtMessageDispatcher());
99
requestFactory_.reset(new DefaultBtRequestFactory());
100
requestFactory_->setPieceStorage(pieceStorage_);
85
pieceStorage_ = make_unique<MockPieceStorage>();
86
peer_ = std::make_shared<Peer>("host", 6969);
87
messageFactory_ = make_unique<MockBtMessageFactory2>();
88
dispatcher_ = make_unique<MockBtMessageDispatcher>();
89
requestFactory_ = make_unique<DefaultBtRequestFactory>();
90
requestFactory_->setPieceStorage(pieceStorage_.get());
101
91
requestFactory_->setPeer(peer_);
102
92
requestFactory_->setBtMessageDispatcher(dispatcher_.get());
103
93
requestFactory_->setBtMessageFactory(messageFactory_.get());
135
127
requestFactory_->getTargetPieces().front()->getIndex());
138
void DefaultBtRequestFactoryTest::testCreateRequestMessages() {
130
void DefaultBtRequestFactoryTest::testCreateRequestMessages()
139
132
int PIECE_LENGTH = 16*1024*2;
140
SharedHandle<Piece> piece1(new Piece(0, PIECE_LENGTH));
141
SharedHandle<Piece> piece2(new Piece(1, PIECE_LENGTH));
133
auto piece1 = std::make_shared<Piece>(0, PIECE_LENGTH);
134
auto piece2 = std::make_shared<Piece>(1, PIECE_LENGTH);
142
135
requestFactory_->addTargetPiece(piece1);
143
136
requestFactory_->addTargetPiece(piece2);
145
std::vector<SharedHandle<BtMessage> > msgs;
146
requestFactory_->createRequestMessages(msgs, 3);
138
auto msgs = requestFactory_->createRequestMessages(3, false);
148
140
CPPUNIT_ASSERT_EQUAL((size_t)3, msgs.size());
149
std::vector<SharedHandle<BtMessage> >::iterator itr = msgs.begin();
150
SharedHandle<MockBtRequestMessage> msg =
151
dynamic_pointer_cast<MockBtRequestMessage>(*itr);
152
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->index);
153
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->blockIndex);
155
msg = dynamic_pointer_cast<MockBtRequestMessage>(*itr);
156
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->index);
157
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->blockIndex);
159
msg = dynamic_pointer_cast<MockBtRequestMessage>(*itr);
160
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->index);
161
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->blockIndex);
141
auto msg = msgs[0].get();
142
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getIndex());
143
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getBlockIndex());
145
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getIndex());
146
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getBlockIndex());
148
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getIndex());
149
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getBlockIndex());
164
std::vector<SharedHandle<BtMessage> > msgs;
165
requestFactory_->createRequestMessages(msgs, 3);
152
auto msgs = requestFactory_->createRequestMessages(3, false);
166
153
CPPUNIT_ASSERT_EQUAL((size_t)1, msgs.size());
170
void DefaultBtRequestFactoryTest::testCreateRequestMessages_onEndGame() {
171
SharedHandle<MockBtMessageDispatcher2> dispatcher
172
(new MockBtMessageDispatcher2());
157
void DefaultBtRequestFactoryTest::testCreateRequestMessages_onEndGame()
159
auto dispatcher = make_unique<MockBtMessageDispatcher2>();
174
161
requestFactory_->setBtMessageDispatcher(dispatcher.get());
176
163
int PIECE_LENGTH = 16*1024*2;
177
SharedHandle<Piece> piece1(new Piece(0, PIECE_LENGTH));
178
SharedHandle<Piece> piece2(new Piece(1, PIECE_LENGTH));
164
auto piece1 = std::make_shared<Piece>(0, PIECE_LENGTH);
165
auto piece2 = std::make_shared<Piece>(1, PIECE_LENGTH);
179
166
requestFactory_->addTargetPiece(piece1);
180
167
requestFactory_->addTargetPiece(piece2);
182
std::vector<SharedHandle<BtMessage> > msgs;
183
requestFactory_->createRequestMessagesOnEndGame(msgs, 3);
185
std::vector<SharedHandle<MockBtRequestMessage> > mmsgs;
186
for(std::vector<SharedHandle<BtMessage> >::iterator i = msgs.begin();
187
i != msgs.end(); ++i) {
188
mmsgs.push_back(dynamic_pointer_cast<MockBtRequestMessage>(*i));
191
std::sort(mmsgs.begin(), mmsgs.end(), SortMockBtRequestMessage());
193
CPPUNIT_ASSERT_EQUAL((size_t)3, mmsgs.size());
194
std::vector<SharedHandle<MockBtRequestMessage> >::iterator itr =mmsgs.begin();
195
MockBtRequestMessage* msg = (*itr).get();
196
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->index);
197
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->blockIndex);
200
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->index);
201
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->blockIndex);
204
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->index);
205
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->blockIndex);
169
auto msgs = requestFactory_->createRequestMessages(3, true);
170
std::sort(std::begin(msgs), std::end(msgs), BtRequestMessageSorter());
172
CPPUNIT_ASSERT_EQUAL((size_t)3, msgs.size());
173
auto msg = msgs[0].get();
174
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getIndex());
175
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getBlockIndex());
177
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getIndex());
178
CPPUNIT_ASSERT_EQUAL((size_t)0, msg->getBlockIndex());
180
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getIndex());
181
CPPUNIT_ASSERT_EQUAL((size_t)1, msg->getBlockIndex());
208
void DefaultBtRequestFactoryTest::testRemoveTargetPiece() {
209
SharedHandle<Piece> piece1(new Piece(0, 16*1024));
184
void DefaultBtRequestFactoryTest::testRemoveTargetPiece()
186
auto piece1 = std::make_shared<Piece>(0, 16*1024);
211
188
requestFactory_->addTargetPiece(piece1);
226
203
void DefaultBtRequestFactoryTest::testGetTargetPieceIndexes()
228
SharedHandle<Piece> piece1(new Piece(1, 16*1024));
229
SharedHandle<Piece> piece3(new Piece(3, 16*1024));
230
SharedHandle<Piece> piece5(new Piece(5, 16*1024));
205
auto piece1 = std::make_shared<Piece>(1, 16*1024);
206
auto piece3 = std::make_shared<Piece>(3, 16*1024);
207
auto piece5 = std::make_shared<Piece>(5, 16*1024);
232
209
requestFactory_->addTargetPiece(piece3);
233
210
requestFactory_->addTargetPiece(piece1);
234
211
requestFactory_->addTargetPiece(piece5);
236
std::vector<size_t> indexes;
237
requestFactory_->getTargetPieceIndexes(indexes);
213
auto indexes = requestFactory_->getTargetPieceIndexes();
238
214
CPPUNIT_ASSERT_EQUAL((size_t)3, indexes.size());
239
215
CPPUNIT_ASSERT_EQUAL((size_t)3, indexes[0]);
240
216
CPPUNIT_ASSERT_EQUAL((size_t)1, indexes[1]);