diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-27 16:04:36 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-08-27 16:04:36 +0000 |
| commit | 9cdcbf32ff69afc4c2c8f220df90aabed62dafde (patch) | |
| tree | 0388730a58d56f83b829c193f3a44fcc5b98c52e /test | |
| parent | 58ad225655b27370e0a3ebe5f603ec9890360b90 (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.cc | 128 | ||||
| -rw-r--r-- | test/CookieTest.cc | 142 | ||||
| -rw-r--r-- | test/Makefile.am | 4 | ||||
| -rw-r--r-- | test/Makefile.in | 13 |
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@ |
