fix another bug in _check:cookies (#2160)
regression introduced in ed317bfc Added a couple of tests to hopefully catch such bugs before they land in a release.
This commit is contained in:
parent
c8414c9d95
commit
f5b2b9333f
@ -371,20 +371,25 @@ class Extractor():
|
||||
for cookie in self._cookiejar:
|
||||
if cookie.name in names and (
|
||||
not domain or cookie.domain == domain):
|
||||
|
||||
if cookie.expires:
|
||||
diff = int(cookie.expires - now)
|
||||
|
||||
if diff <= 0:
|
||||
self.log.warning(
|
||||
"Cookie '%s' has expired", cookie.name)
|
||||
continue
|
||||
|
||||
elif diff <= 86400:
|
||||
hours = diff // 3600
|
||||
self.log.warning(
|
||||
"Cookie '%s' will expire in less than %s hour%s",
|
||||
cookie.name, hours + 1, "s" if hours else "")
|
||||
else:
|
||||
names.discard(cookie.name)
|
||||
if not names:
|
||||
return True
|
||||
continue
|
||||
|
||||
names.discard(cookie.name)
|
||||
if not names:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _prepare_ddosguard_cookies(self):
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2017-2020 Mike Fährmann
|
||||
# Copyright 2017-2022 Mike Fährmann
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
@ -12,6 +12,7 @@ import sys
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
import time
|
||||
import logging
|
||||
import tempfile
|
||||
from os.path import join
|
||||
@ -118,6 +119,86 @@ class TestCookieLogin(unittest.TestCase):
|
||||
mock_login.assert_not_called()
|
||||
|
||||
|
||||
class TestCookieUtils(unittest.TestCase):
|
||||
|
||||
def test_check_cookies(self):
|
||||
extr = extractor.find("test:")
|
||||
self.assertFalse(extr._cookiejar, "empty")
|
||||
self.assertFalse(extr.cookiedomain, "empty")
|
||||
|
||||
# always returns False when checking for empty cookie list
|
||||
self.assertFalse(extr._check_cookies(()))
|
||||
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
self.assertFalse(extr._check_cookies(("a", "b")))
|
||||
self.assertFalse(extr._check_cookies(("a", "b", "c")))
|
||||
|
||||
extr._cookiejar.set("a", "1")
|
||||
self.assertTrue(extr._check_cookies(("a",)))
|
||||
self.assertFalse(extr._check_cookies(("a", "b")))
|
||||
self.assertFalse(extr._check_cookies(("a", "b", "c")))
|
||||
|
||||
extr._cookiejar.set("b", "2")
|
||||
self.assertTrue(extr._check_cookies(("a",)))
|
||||
self.assertTrue(extr._check_cookies(("a", "b")))
|
||||
self.assertFalse(extr._check_cookies(("a", "b", "c")))
|
||||
|
||||
def test_check_cookies_domain(self):
|
||||
extr = extractor.find("test:")
|
||||
self.assertFalse(extr._cookiejar, "empty")
|
||||
extr.cookiedomain = ".example.org"
|
||||
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
self.assertFalse(extr._check_cookies(("a", "b")))
|
||||
|
||||
extr._cookiejar.set("a", "1")
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
|
||||
extr._cookiejar.set("a", "1", domain=extr.cookiedomain)
|
||||
self.assertTrue(extr._check_cookies(("a",)))
|
||||
|
||||
extr._cookiejar.set("a", "1", domain="www" + extr.cookiedomain)
|
||||
self.assertEqual(len(extr._cookiejar), 3)
|
||||
self.assertTrue(extr._check_cookies(("a",)))
|
||||
|
||||
extr._cookiejar.set("b", "2", domain=extr.cookiedomain)
|
||||
extr._cookiejar.set("c", "3", domain=extr.cookiedomain)
|
||||
self.assertTrue(extr._check_cookies(("a", "b", "c")))
|
||||
|
||||
def test_check_cookies_expires(self):
|
||||
extr = extractor.find("test:")
|
||||
self.assertFalse(extr._cookiejar, "empty")
|
||||
self.assertFalse(extr.cookiedomain, "empty")
|
||||
|
||||
now = int(time.time())
|
||||
log = logging.getLogger("test")
|
||||
|
||||
extr._cookiejar.set("a", "1", expires=now-100)
|
||||
with mock.patch.object(log, "warning") as mw:
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
self.assertEqual(mw.call_count, 1)
|
||||
self.assertEqual(mw.call_args[0], ("Cookie '%s' has expired", "a"))
|
||||
|
||||
extr._cookiejar.set("a", "1", expires=now+100)
|
||||
with mock.patch.object(log, "warning") as mw:
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
self.assertEqual(mw.call_count, 1)
|
||||
self.assertEqual(mw.call_args[0], (
|
||||
"Cookie '%s' will expire in less than %s hour%s", "a", 1, ""))
|
||||
|
||||
extr._cookiejar.set("a", "1", expires=now+100+7200)
|
||||
with mock.patch.object(log, "warning") as mw:
|
||||
self.assertFalse(extr._check_cookies(("a",)))
|
||||
self.assertEqual(mw.call_count, 1)
|
||||
self.assertEqual(mw.call_args[0], (
|
||||
"Cookie '%s' will expire in less than %s hour%s", "a", 3, "s"))
|
||||
|
||||
extr._cookiejar.set("a", "1", expires=now+100+24*3600)
|
||||
with mock.patch.object(log, "warning") as mw:
|
||||
self.assertTrue(extr._check_cookies(("a",)))
|
||||
self.assertEqual(mw.call_count, 0)
|
||||
|
||||
|
||||
def _get_extractor(category):
|
||||
for extr in extractor.extractors():
|
||||
if extr.category == category and hasattr(extr, "_login_impl"):
|
||||
|
Loading…
x
Reference in New Issue
Block a user