summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-08-27 16:04:36 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-08-27 16:04:36 +0000
commit9cdcbf32ff69afc4c2c8f220df90aabed62dafde (patch)
tree0388730a58d56f83b829c193f3a44fcc5b98c52e /test
parent58ad225655b27370e0a3ebe5f603ec9890360b90 (diff)
2008-08-28 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added CookieStorage class which is based on RFC2109 and manages cookies more strictly than CookieBox and CookieBoxFactory class. * src/CookieStorage.cc * src/CookieStorage.h * src/Cookie.cc * src/Cookie.h * test/CookieStorageTest.cc * test/CookieTest.cc
Diffstat (limited to 'test')
-rw-r--r--test/CookieStorageTest.cc128
-rw-r--r--test/CookieTest.cc142
-rw-r--r--test/Makefile.am4
-rw-r--r--test/Makefile.in13
4 files changed, 282 insertions, 5 deletions
diff --git a/test/CookieStorageTest.cc b/test/CookieStorageTest.cc
new file mode 100644
index 00000000..9f1a156b
--- /dev/null
+++ b/test/CookieStorageTest.cc
@@ -0,0 +1,128 @@
+#include "CookieStorage.h"
+#include "Exception.h"
+#include "Util.h"
+#include "TimeA2.h"
+#include "CookieParser.h"
+#include <iostream>
+#include <algorithm>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace aria2 {
+
+class CookieStorageTest:public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE(CookieStorageTest);
+ CPPUNIT_TEST(testStore);
+ CPPUNIT_TEST(testParseAndStore);
+ CPPUNIT_TEST(testCriteriaFind);
+ CPPUNIT_TEST_SUITE_END();
+public:
+ void setUp() {}
+
+ void tearDown() {}
+
+ void testStore();
+ void testParseAndStore();
+ void testCriteriaFind();
+};
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION(CookieStorageTest);
+
+void CookieStorageTest::testStore()
+{
+ CookieStorage st;
+ Cookie goodCookie("k", "v", "/", "localhost", false);
+ CPPUNIT_ASSERT(st.store(goodCookie));
+ CPPUNIT_ASSERT_EQUAL((size_t)1, st.size());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), goodCookie) != st.end());
+
+ Cookie anotherCookie("k", "v", "/", "mirror", true);
+ CPPUNIT_ASSERT(st.store(anotherCookie));
+ CPPUNIT_ASSERT_EQUAL((size_t)2, st.size());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), anotherCookie) != st.end());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), goodCookie) != st.end());
+
+ Cookie updateGoodCookie("k", "v2", "/", "localhost", false);
+ CPPUNIT_ASSERT(st.store(goodCookie));
+ CPPUNIT_ASSERT_EQUAL((size_t)2, st.size());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), updateGoodCookie) != st.end());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), anotherCookie) != st.end());
+
+ Cookie expireGoodCookie("k", "v3", 0, "/", "localhost", false);
+ CPPUNIT_ASSERT(!st.store(expireGoodCookie));
+ CPPUNIT_ASSERT_EQUAL((size_t)1, st.size());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), anotherCookie) != st.end());
+
+ Cookie badCookie("", "", "/", "localhost", false);
+ CPPUNIT_ASSERT(!st.store(badCookie));
+ CPPUNIT_ASSERT_EQUAL((size_t)1, st.size());
+ CPPUNIT_ASSERT(std::find(st.begin(), st.end(), anotherCookie) != st.end());
+}
+
+void CookieStorageTest::testParseAndStore()
+{
+ CookieStorage st;
+
+ std::string localhostCookieStr = "k=v;"
+ " expires=Fri, 2038-01-01 00:00:00 GMT; path=/; domain=localhost;";
+
+ CPPUNIT_ASSERT(st.parseAndStore(localhostCookieStr,
+ "localhost", "/downloads"));
+ CPPUNIT_ASSERT(!st.parseAndStore(localhostCookieStr,
+ "mirror", "/downloads"));
+
+ CPPUNIT_ASSERT(!st.parseAndStore(localhostCookieStr,
+ "127.0.0.1", "/downloads"));
+}
+
+void CookieStorageTest::testCriteriaFind()
+{
+ CookieStorage st;
+
+ Cookie alpha("alpha", "ALPHA", "/", ".aria2.org", false);
+ Cookie bravo("bravo", "BRAVO", Time().getTime()+60, "/foo", ".aria2.org",
+ false);
+ Cookie charlie("charlie", "CHARLIE", "/", ".aria2.org", true);
+ Cookie delta("delta", "DELTA", "/foo/bar", ".aria2.org", false);
+ Cookie echo("echo", "ECHO", "/", "www.aria2.org", false);
+ Cookie foxtrot("foxtrot", "FOXTROT", "/", ".sf.net", false);
+ CPPUNIT_ASSERT(st.store(alpha));
+ CPPUNIT_ASSERT(st.store(bravo));
+ CPPUNIT_ASSERT(st.store(charlie));
+ CPPUNIT_ASSERT(st.store(delta));
+ CPPUNIT_ASSERT(st.store(echo));
+ CPPUNIT_ASSERT(st.store(foxtrot));
+
+ std::deque<Cookie> aria2Slash = st.criteriaFind("www.aria2.org", "/",
+ 0, false);
+ CPPUNIT_ASSERT_EQUAL((size_t)2, aria2Slash.size());
+ CPPUNIT_ASSERT(std::find(aria2Slash.begin(), aria2Slash.end(), alpha)
+ != aria2Slash.end());
+ CPPUNIT_ASSERT(std::find(aria2Slash.begin(), aria2Slash.end(), echo)
+ != aria2Slash.end());
+
+ std::deque<Cookie> aria2SlashFoo = st.criteriaFind("www.aria2.org", "/foo",
+ 0, false);
+ CPPUNIT_ASSERT_EQUAL((size_t)3, aria2SlashFoo.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("bravo"), aria2SlashFoo[0].name);
+ CPPUNIT_ASSERT(std::find(aria2SlashFoo.begin(), aria2SlashFoo.end(), alpha)
+ != aria2SlashFoo.end());
+ CPPUNIT_ASSERT(std::find(aria2SlashFoo.begin(), aria2SlashFoo.end(), echo)
+ != aria2SlashFoo.end());
+
+ std::deque<Cookie> aria2Expires = st.criteriaFind("www.aria2.org", "/foo",
+ Time().getTime()+120,
+ false);
+ CPPUNIT_ASSERT_EQUAL((size_t)2, aria2Expires.size());
+ CPPUNIT_ASSERT(std::find(aria2Expires.begin(), aria2Expires.end(), alpha)
+ != aria2Expires.end());
+ CPPUNIT_ASSERT(std::find(aria2Expires.begin(), aria2Expires.end(), echo)
+ != aria2Expires.end());
+
+ std::deque<Cookie> dlAria2 = st.criteriaFind("dl.aria2.org", "/", 0, false);
+ CPPUNIT_ASSERT_EQUAL((size_t)1, dlAria2.size());
+ CPPUNIT_ASSERT_EQUAL(std::string("alpha"), dlAria2[0].name);
+}
+
+} // namespace aria2
diff --git a/test/CookieTest.cc b/test/CookieTest.cc
new file mode 100644
index 00000000..0221ae05
--- /dev/null
+++ b/test/CookieTest.cc
@@ -0,0 +1,142 @@
+#include "Cookie.h"
+#include "Exception.h"
+#include "Util.h"
+#include "TimeA2.h"
+#include <iostream>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace aria2 {
+
+class CookieTest:public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE(CookieTest);
+ CPPUNIT_TEST(testValidate);
+ CPPUNIT_TEST(testOperatorEqual);
+ CPPUNIT_TEST(testMatch);
+ CPPUNIT_TEST(testIsExpired);
+ CPPUNIT_TEST_SUITE_END();
+public:
+ void setUp() {}
+
+ void tearDown() {}
+
+ void testValidate();
+ void testOperatorEqual();
+ void testMatch();
+ void testIsExpired();
+};
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION(CookieTest);
+
+void CookieTest::testValidate()
+{
+ {
+ Cookie defaultDomainPath("k", "v", "/", "localhost", false);
+ CPPUNIT_ASSERT(defaultDomainPath.validate("localhost", "/"));
+ }
+ {
+ Cookie domainStartsWithDot("k", "v", "/", "aria2.org", false);
+ CPPUNIT_ASSERT(!domainStartsWithDot.validate("www.aria2.org", "/"));
+ Cookie success("k", "v", "/", ".aria2.org", false);
+ CPPUNIT_ASSERT(success.validate("www.aria2.org", "/"));
+ }
+ {
+ Cookie domainWithoutEmbeddedDot("k", "v", "/", ".org", false);
+ CPPUNIT_ASSERT(!domainWithoutEmbeddedDot.validate("aria2.org", "/"));
+ }
+ {
+ Cookie domainEndsWithDot("k", "v", "/", ".aria2.org.", false);
+ CPPUNIT_ASSERT(!domainEndsWithDot.validate("www.aria2.org", "/"));
+ }
+ {
+ Cookie domainHD("k", "v", "/", ".aria2.org", false);
+ CPPUNIT_ASSERT(!domainHD.validate("aria2.www.aria2.org", "/"));
+ }
+ {
+ Cookie pathNotStartsWith("k", "v", "/downloads", "localhost", false);
+ CPPUNIT_ASSERT(!pathNotStartsWith.validate("localhost", "/examples"));
+ }
+ {
+ Cookie pathStartsWith("k", "v", "/downloads", "localhost", false);
+ CPPUNIT_ASSERT(pathStartsWith.validate("localhost", "/downloads/latest/"));
+ }
+ {
+ Cookie pathSlash("k", "v", "/downloads", "localhost", false);
+ CPPUNIT_ASSERT(pathSlash.validate("localhost", "/downloads/"));
+ }
+ {
+ Cookie pathSlash("k", "v", "/downloads/", "localhost", false);
+ CPPUNIT_ASSERT(pathSlash.validate("localhost", "/downloads"));
+ }
+ {
+ Cookie pathNotMatch("k", "v", "/downloads", "localhost", false);
+ CPPUNIT_ASSERT(!pathNotMatch.validate("localhost", "/downloadss"));
+ }
+ {
+ Cookie pathNotMatch("k", "v", "/downloads/", "localhost", false);
+ CPPUNIT_ASSERT(!pathNotMatch.validate("localhost", "/downloadss"));
+ }
+ {
+ Cookie pathNotMatch("k", "v", "/downloads", "localhost", false);
+ CPPUNIT_ASSERT(!pathNotMatch.validate("localhost", "/downloadss/"));
+ }
+ {
+ Cookie nameEmpty("", "v", "/", "localhost", false);
+ CPPUNIT_ASSERT(!nameEmpty.validate("localhost", "/"));
+ }
+}
+
+void CookieTest::testOperatorEqual()
+{
+ Cookie a("k", "v", "/", "localhost", false);
+ Cookie b("k", "v", "/", "LOCALHOST", true);
+ Cookie wrongPath("k", "v", "/a", "localhost", false);
+ Cookie wrongDomain("k", "v", "/", "mydomain", false);
+ Cookie wrongName("h", "v", "/a", "localhost", false);
+ Cookie caseSensitiveName("K", "v", "/a", "localhost", false);
+ CPPUNIT_ASSERT(a == b);
+ CPPUNIT_ASSERT(!(a == wrongPath));
+ CPPUNIT_ASSERT(!(a == wrongDomain));
+ CPPUNIT_ASSERT(!(a == wrongName));
+ CPPUNIT_ASSERT(!(a == caseSensitiveName));
+}
+
+void CookieTest::testMatch()
+{
+ Cookie c("k", "v", "/downloads", ".aria2.org", false);
+ Cookie c2("k", "v", "/downloads/", ".aria2.org", false);
+ CPPUNIT_ASSERT(c.match("www.aria2.org", "/downloads", 0, false));
+ CPPUNIT_ASSERT(c.match("www.aria2.org", "/downloads/", 0, false));
+ CPPUNIT_ASSERT(c2.match("www.aria2.org", "/downloads", 0, false));
+ CPPUNIT_ASSERT(c.match("WWW.ARIA2.ORG", "/downloads", 0, false));
+ CPPUNIT_ASSERT(!c.match("www.aria.org", "/downloads", 0, false));
+ CPPUNIT_ASSERT(!c.match("www.aria2.org", "/examples", 0, false));
+ CPPUNIT_ASSERT(c.match("www.aria2.org", "/downloads", 0, true));
+ CPPUNIT_ASSERT(c.match("www.aria2.org", "/downloads/latest", 0, false));
+ CPPUNIT_ASSERT(!c.match("www.aria2.org", "/downloadss/latest", 0, false));
+ CPPUNIT_ASSERT(!c.match("www.aria2.org", "/DOWNLOADS", 0, false));
+
+ Cookie secureCookie("k", "v", "/", "secure.aria2.org", true);
+ CPPUNIT_ASSERT(secureCookie.match("secure.aria2.org", "/", 0, true));
+ CPPUNIT_ASSERT(!secureCookie.match("secure.aria2.org", "/", 0, false));
+ CPPUNIT_ASSERT(!secureCookie.match("ssecure.aria2.org", "/", 0, true));
+ CPPUNIT_ASSERT(!secureCookie.match("www.secure.aria2.org", "/", 0, true));
+
+ Cookie expireTest("k", "v", 1000, "/", ".aria2.org", false);
+ CPPUNIT_ASSERT(expireTest.match("www.aria2.org", "/", 999, false));
+ CPPUNIT_ASSERT(!expireTest.match("www.aria2.org", "/", 1000, false));
+ CPPUNIT_ASSERT(!expireTest.match("www.aria2.org", "/", 1001, false));
+}
+
+void CookieTest::testIsExpired()
+{
+ Cookie expiredCookie("k", "v", 1000, "/", "localhost", false);
+ CPPUNIT_ASSERT(expiredCookie.isExpired());
+ Cookie validCookie("k", "v", Time().getTime()+60, "/", "localhost", false);
+ CPPUNIT_ASSERT(!validCookie.isExpired());
+ Cookie sessionCookie("k", "v", "/", "localhost", false);
+ CPPUNIT_ASSERT(!sessionCookie.isExpired());
+}
+
+} // namespace aria2
diff --git a/test/Makefile.am b/test/Makefile.am
index c68c7a64..2d6b528f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -60,7 +60,9 @@ aria2c_SOURCES = AllTest.cc\
InOrderURISelectorTest.cc\
ServerStatTest.cc\
NsCookieParserTest.cc\
- DirectDiskAdaptorTest.cc
+ DirectDiskAdaptorTest.cc\
+ CookieTest.cc\
+ CookieStorageTest.cc
if HAVE_LIBZ
aria2c_SOURCES += GZipDecoderTest.cc
diff --git a/test/Makefile.in b/test/Makefile.in
index d85eb075..279b31b2 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -193,8 +193,9 @@ am__aria2c_SOURCES_DIST = AllTest.cc TestUtil.cc TestUtil.h \
SignatureTest.cc ServerStatManTest.cc \
ServerStatURISelectorTest.cc InOrderURISelectorTest.cc \
ServerStatTest.cc NsCookieParserTest.cc \
- DirectDiskAdaptorTest.cc GZipDecoderTest.cc \
- Sqlite3MozCookieParserTest.cc MessageDigestHelperTest.cc \
+ DirectDiskAdaptorTest.cc CookieTest.cc CookieStorageTest.cc \
+ GZipDecoderTest.cc Sqlite3MozCookieParserTest.cc \
+ MessageDigestHelperTest.cc \
IteratableChunkChecksumValidatorTest.cc \
IteratableChecksumValidatorTest.cc BtAllowedFastMessageTest.cc \
BtBitfieldMessageTest.cc BtCancelMessageTest.cc \
@@ -365,6 +366,7 @@ am_aria2c_OBJECTS = AllTest.$(OBJEXT) TestUtil.$(OBJEXT) \
ServerStatURISelectorTest.$(OBJEXT) \
InOrderURISelectorTest.$(OBJEXT) ServerStatTest.$(OBJEXT) \
NsCookieParserTest.$(OBJEXT) DirectDiskAdaptorTest.$(OBJEXT) \
+ CookieTest.$(OBJEXT) CookieStorageTest.$(OBJEXT) \
$(am__objects_1) $(am__objects_2) $(am__objects_3) \
$(am__objects_4) $(am__objects_5)
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
@@ -587,8 +589,9 @@ aria2c_SOURCES = AllTest.cc TestUtil.cc TestUtil.h SocketCoreTest.cc \
SignatureTest.cc ServerStatManTest.cc \
ServerStatURISelectorTest.cc InOrderURISelectorTest.cc \
ServerStatTest.cc NsCookieParserTest.cc \
- DirectDiskAdaptorTest.cc $(am__append_1) $(am__append_2) \
- $(am__append_3) $(am__append_4) $(am__append_5)
+ DirectDiskAdaptorTest.cc CookieTest.cc CookieStorageTest.cc \
+ $(am__append_1) $(am__append_2) $(am__append_3) \
+ $(am__append_4) $(am__append_5)
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
@@ -710,6 +713,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxFactoryTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieParserTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieStorageTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHKeyExchangeTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTAnnouncePeerMessageTest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DHTAnnouncePeerReplyMessageTest.Po@am__quote@