mirror of https://github.com/scrapy/scrapy.git
61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import pytest
|
|
|
|
from scrapy.sessions import Session
|
|
from scrapy.utils.test import get_crawler
|
|
|
|
|
|
def test_get() -> None:
|
|
sessions = get_crawler().sessions
|
|
session = sessions["foo"]
|
|
assert isinstance(session, Session)
|
|
assert session.id == "foo"
|
|
assert sessions["foo"] is session
|
|
assert "foo" in sessions
|
|
assert "bar" not in sessions
|
|
|
|
|
|
def test_non_string_id() -> None:
|
|
sessions = get_crawler().sessions
|
|
assert sessions[1].id == "1"
|
|
assert sessions[1] is sessions["1"]
|
|
assert 1 in sessions
|
|
sessions.retire(1)
|
|
assert "1" not in sessions
|
|
|
|
|
|
def test_create() -> None:
|
|
sessions = get_crawler().sessions
|
|
session = sessions.create()
|
|
assert sessions[session.id] is session
|
|
assert sessions.create().id != session.id
|
|
|
|
|
|
def test_retire() -> None:
|
|
crawler = get_crawler()
|
|
sessions = crawler.sessions
|
|
sessions["foo"].meta["a"] = 1
|
|
sessions.retire("foo")
|
|
assert "foo" not in sessions
|
|
assert sessions["foo"].meta == {}
|
|
sessions.retire("bar") # unknown IDs are ignored
|
|
assert crawler.stats.get_value("sessions/retired") == 1
|
|
|
|
|
|
def test_max(caplog: pytest.LogCaptureFixture) -> None:
|
|
crawler = get_crawler(settings_dict={"SESSIONS_MAX": 2})
|
|
sessions = crawler.sessions
|
|
a = sessions["a"]
|
|
sessions["b"]
|
|
assert sessions["a"] is a
|
|
caplog.clear()
|
|
sessions["c"]
|
|
assert "b" not in sessions
|
|
assert "a" in sessions
|
|
assert crawler.stats.get_value("sessions/created") == 3
|
|
assert crawler.stats.get_value("sessions/dropped") == 1
|
|
assert "Dropped session 'b'" in caplog.text
|
|
caplog.clear()
|
|
sessions["d"]
|
|
assert crawler.stats.get_value("sessions/dropped") == 2
|
|
assert not caplog.text
|