HttpHeaderTest.cc 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #include "HttpHeader.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "Range.h"
  4. #include "DlAbortEx.h"
  5. namespace aria2 {
  6. class HttpHeaderTest:public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(HttpHeaderTest);
  8. CPPUNIT_TEST(testGetRange);
  9. CPPUNIT_TEST(testFindAll);
  10. CPPUNIT_TEST(testClearField);
  11. CPPUNIT_TEST(testFieldContains);
  12. CPPUNIT_TEST_SUITE_END();
  13. public:
  14. void testGetRange();
  15. void testFindAll();
  16. void testClearField();
  17. void testFieldContains();
  18. };
  19. CPPUNIT_TEST_SUITE_REGISTRATION( HttpHeaderTest );
  20. void HttpHeaderTest::testGetRange()
  21. {
  22. {
  23. HttpHeader httpHeader;
  24. httpHeader.put("content-range",
  25. "9223372036854775800-9223372036854775801/9223372036854775807");
  26. SharedHandle<Range> range = httpHeader.getRange();
  27. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775800LL, range->getStartByte());
  28. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775801LL, range->getEndByte());
  29. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775807LL, range->getEntityLength());
  30. }
  31. {
  32. HttpHeader httpHeader;
  33. httpHeader.put("content-range",
  34. "9223372036854775800-9223372036854775801/9223372036854775807");
  35. SharedHandle<Range> range = httpHeader.getRange();
  36. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775800LL, range->getStartByte());
  37. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775801LL, range->getEndByte());
  38. CPPUNIT_ASSERT_EQUAL((int64_t)9223372036854775807LL, range->getEntityLength());
  39. }
  40. {
  41. HttpHeader httpHeader;
  42. httpHeader.put("content-range", "bytes */1024");
  43. SharedHandle<Range> range = httpHeader.getRange();
  44. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getStartByte());
  45. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEndByte());
  46. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEntityLength());
  47. }
  48. {
  49. HttpHeader httpHeader;
  50. httpHeader.put("content-range", "bytes 0-9/*");
  51. SharedHandle<Range> range = httpHeader.getRange();
  52. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getStartByte());
  53. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEndByte());
  54. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEntityLength());
  55. }
  56. {
  57. HttpHeader httpHeader;
  58. httpHeader.put("content-range", "bytes */*");
  59. SharedHandle<Range> range = httpHeader.getRange();
  60. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getStartByte());
  61. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEndByte());
  62. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEntityLength());
  63. }
  64. {
  65. HttpHeader httpHeader;
  66. httpHeader.put("content-range", "bytes 0");
  67. SharedHandle<Range> range = httpHeader.getRange();
  68. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getStartByte());
  69. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEndByte());
  70. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEntityLength());
  71. }
  72. {
  73. HttpHeader httpHeader;
  74. httpHeader.put("content-range", "bytes 0/");
  75. SharedHandle<Range> range = httpHeader.getRange();
  76. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getStartByte());
  77. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEndByte());
  78. CPPUNIT_ASSERT_EQUAL((int64_t)0, range->getEntityLength());
  79. }
  80. {
  81. HttpHeader httpHeader;
  82. httpHeader.put("content-range", "bytes 0-/3");
  83. try {
  84. httpHeader.getRange();
  85. CPPUNIT_FAIL("Exception must be thrown");
  86. } catch(const DlAbortEx& e) {
  87. // success
  88. }
  89. }
  90. {
  91. HttpHeader httpHeader;
  92. httpHeader.put("content-range", "bytes -0/3");
  93. try {
  94. httpHeader.getRange();
  95. CPPUNIT_FAIL("Exception must be thrown");
  96. } catch(const DlAbortEx& e) {
  97. // success
  98. }
  99. }
  100. }
  101. void HttpHeaderTest::testFindAll()
  102. {
  103. HttpHeader h;
  104. h.put("A", "100");
  105. h.put("A", "101");
  106. h.put("B", "200");
  107. std::vector<std::string> r(h.findAll("A"));
  108. CPPUNIT_ASSERT_EQUAL((size_t)2, r.size());
  109. CPPUNIT_ASSERT_EQUAL(std::string("100"), r[0]);
  110. CPPUNIT_ASSERT_EQUAL(std::string("101"), r[1]);
  111. }
  112. void HttpHeaderTest::testClearField()
  113. {
  114. HttpHeader h;
  115. h.setStatusCode(200);
  116. h.setVersion(HttpHeader::HTTP_1_1);
  117. h.put("Foo", "Bar");
  118. CPPUNIT_ASSERT_EQUAL(std::string("Bar"), h.find("Foo"));
  119. h.clearField();
  120. CPPUNIT_ASSERT_EQUAL(std::string(""), h.find("Foo"));
  121. CPPUNIT_ASSERT_EQUAL(200, h.getStatusCode());
  122. CPPUNIT_ASSERT_EQUAL(std::string(HttpHeader::HTTP_1_1), h.getVersion());
  123. }
  124. void HttpHeaderTest::testFieldContains()
  125. {
  126. HttpHeader h;
  127. h.put("connection", "Keep-Alive, Upgrade");
  128. h.put("upgrade", "WebSocket");
  129. h.put("sec-websocket-version", "13");
  130. h.put("sec-websocket-version", "8, 7");
  131. CPPUNIT_ASSERT(h.fieldContains("connection", "upgrade"));
  132. CPPUNIT_ASSERT(h.fieldContains("connection", "keep-alive"));
  133. CPPUNIT_ASSERT(!h.fieldContains("connection", "close"));
  134. CPPUNIT_ASSERT(h.fieldContains("upgrade", "websocket"));
  135. CPPUNIT_ASSERT(!h.fieldContains("upgrade", "spdy"));
  136. CPPUNIT_ASSERT(h.fieldContains("sec-websocket-version", "13"));
  137. CPPUNIT_ASSERT(h.fieldContains("sec-websocket-version", "8"));
  138. CPPUNIT_ASSERT(!h.fieldContains("sec-websocket-version", "6"));
  139. }
  140. } // namespace aria2