summaryrefslogtreecommitdiff
path: root/test/BtRequestMessageTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-10-19 14:53:30 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-10-19 14:53:30 +0000
commit2040d64fe59f7a4865caa9d58d3f9fb27d0837f2 (patch)
tree09cd0d60977c0d8bc5a307d4f4fc96d25e60e287 /test/BtRequestMessageTest.cc
parentff20aefa516f5d6a06bf9f8742974ec274d3491f (diff)
2008-10-19 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that aria2 aborts when a request larger than 16KiB is recieved. In this fix, if a request larger than 16KiB length is received, aria2 disconnects the peer. * src/BtConstants.h * src/PeerMessageUtil.cc * src/PeerMessageUtil.h * test/BtRequestMessageTest.cc
Diffstat (limited to 'test/BtRequestMessageTest.cc')
-rw-r--r--test/BtRequestMessageTest.cc37
1 files changed, 35 insertions, 2 deletions
diff --git a/test/BtRequestMessageTest.cc b/test/BtRequestMessageTest.cc
index 99d4d85c..c6d990cb 100644
--- a/test/BtRequestMessageTest.cc
+++ b/test/BtRequestMessageTest.cc
@@ -1,4 +1,9 @@
#include "BtRequestMessage.h"
+
+#include <cstring>
+
+#include <cppunit/extensions/HelperMacros.h>
+
#include "PeerMessageUtil.h"
#include "MockBtContext.h"
#include "MockBtMessage.h"
@@ -16,8 +21,7 @@
#include "ExtensionMessageFactory.h"
#include "FileEntry.h"
#include "BtHandshakeMessage.h"
-#include <cstring>
-#include <cppunit/extensions/HelperMacros.h>
+#include "BtRequestMessageValidator.h"
namespace aria2 {
@@ -36,6 +40,8 @@ class BtRequestMessageTest:public CppUnit::TestFixture {
CPPUNIT_TEST(testHandleAbortRequestEvent_alreadyInvalidated);
CPPUNIT_TEST(testHandleAbortRequestEvent_sendingInProgress);
CPPUNIT_TEST(testToString);
+ CPPUNIT_TEST(testValidate);
+ CPPUNIT_TEST(testValidate_lengthTooLong);
CPPUNIT_TEST_SUITE_END();
private:
@@ -52,6 +58,8 @@ public:
void testHandleAbortRequestEvent_alreadyInvalidated();
void testHandleAbortRequestEvent_sendingInProgress();
void testToString();
+ void testValidate();
+ void testValidate_lengthTooLong();
class MockPieceStorage2 : public MockPieceStorage {
public:
@@ -283,4 +291,29 @@ void BtRequestMessageTest::testToString() {
msg->toString());
}
+void BtRequestMessageTest::testValidate() {
+ BtRequestMessage msg(0, 0, 16*1024);
+ msg.setBtMessageValidator
+ (SharedHandle<BtMessageValidator>
+ (new BtRequestMessageValidator(&msg, 1024, 256*1024)));
+ std::deque<std::string> errors;
+
+ msg.validate(errors);
+}
+
+void BtRequestMessageTest::testValidate_lengthTooLong() {
+ BtRequestMessage msg(0, 0, 16*1024+1);
+ msg.setBtMessageValidator
+ (SharedHandle<BtMessageValidator>
+ (new BtRequestMessageValidator(&msg, 1024, 256*1024)));
+ std::deque<std::string> errors;
+ try {
+ msg.validate(errors);
+ CPPUNIT_FAIL("exception must be thrown.");
+ } catch(DlAbortEx& e) {
+ CPPUNIT_ASSERT_EQUAL(std::string("Length too long: 16385 > 16KB"),
+ std::string(e.what()));
+ }
+}
+
} // namespace aria2