mirror of https://github.com/aria2/aria2
Set old cookie's creation-time to new cookie on replacement
As described in http://tools.ietf.org/html/rfc6265#section-5.3pull/128/merge
parent
c6eb970173
commit
9e7579b475
|
@ -126,6 +126,7 @@ bool DomainNode::addCookie(std::unique_ptr<Cookie> cookie, time_t now)
|
||||||
cookies_->erase(i);
|
cookies_->erase(i);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
cookie->setCreationTime((*i)->getCreationTime());
|
||||||
*i = std::move(cookie);
|
*i = std::move(cookie);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,10 +66,12 @@ std::vector<const Cookie*> dumpCookie(const CookieStorage& st)
|
||||||
|
|
||||||
void CookieStorageTest::testStore()
|
void CookieStorageTest::testStore()
|
||||||
{
|
{
|
||||||
time_t now = 1000;
|
time_t now = 999;
|
||||||
auto st = CookieStorage{};
|
auto st = CookieStorage{};
|
||||||
auto goodCookie = []() {
|
auto goodCookie = [&]() {
|
||||||
return createCookie("k", "v", "localhost", true, "/", false);
|
auto c = createCookie("k", "v", "localhost", true, "/", false);
|
||||||
|
c->setCreationTime(now);
|
||||||
|
return c;
|
||||||
};
|
};
|
||||||
CPPUNIT_ASSERT(st.store(goodCookie(), now));
|
CPPUNIT_ASSERT(st.store(goodCookie(), now));
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, st.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)1, st.size());
|
||||||
|
@ -83,13 +85,21 @@ void CookieStorageTest::testStore()
|
||||||
CPPUNIT_ASSERT(st.contains(*anotherCookie()));
|
CPPUNIT_ASSERT(st.contains(*anotherCookie()));
|
||||||
CPPUNIT_ASSERT(st.contains(*goodCookie()));
|
CPPUNIT_ASSERT(st.contains(*goodCookie()));
|
||||||
|
|
||||||
auto updateGoodCookie = []() {
|
++now;
|
||||||
return createCookie("k", "v2", "localhost", true, "/", false);
|
auto updateGoodCookie = [&]() {
|
||||||
|
auto c = createCookie("k", "v2", "localhost", true, "/", false);
|
||||||
|
c->setCreationTime(now);
|
||||||
|
return c;
|
||||||
};
|
};
|
||||||
CPPUNIT_ASSERT(st.store(updateGoodCookie(), now));
|
CPPUNIT_ASSERT(st.store(updateGoodCookie(), now));
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)2, st.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)2, st.size());
|
||||||
CPPUNIT_ASSERT(st.contains(*updateGoodCookie()));
|
CPPUNIT_ASSERT(st.contains(*updateGoodCookie()));
|
||||||
CPPUNIT_ASSERT(st.contains(*anotherCookie()));
|
CPPUNIT_ASSERT(st.contains(*anotherCookie()));
|
||||||
|
auto cookies = st.criteriaFind("localhost", "/", now, false);
|
||||||
|
CPPUNIT_ASSERT_EQUAL((size_t)1, cookies.size());
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("v2"), cookies[0]->getValue());
|
||||||
|
// New cookie's creation time must match old cookie's creation time.
|
||||||
|
CPPUNIT_ASSERT_EQUAL((time_t)999, cookies[0]->getCreationTime());
|
||||||
|
|
||||||
auto expireGoodCookie = []() {
|
auto expireGoodCookie = []() {
|
||||||
return createCookie("k", "v3", 0, "localhost", true, "/", false);
|
return createCookie("k", "v3", 0, "localhost", true, "/", false);
|
||||||
|
|
Loading…
Reference in New Issue