Пример #1
0
def test_on_succeeded_login(user_id: UserId, zero_uuid: None) -> None:
    now = datetime.now()
    assert active_config.single_user_session is None

    # Never logged in before
    assert not userdb._load_session_infos(user_id)
    assert userdb._load_failed_logins(user_id) == 0

    session_id = userdb.on_succeeded_login(user_id, now)
    assert session_id != ""

    # Verify the session was initialized
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos == {
        session_id:
        userdb.SessionInfo(
            session_id=session_id,
            started_at=int(now.timestamp()),
            last_activity=int(now.timestamp()),
            flashes=[],
            csrf_token="00000000-0000-0000-0000-000000000000",
        )
    }

    # Ensure the failed login count is 0
    assert userdb._load_failed_logins(user_id) == 0
Пример #2
0
def test_cleanup_old_sessions_too_many(request_context: None) -> None:
    sessions = {
        f"keep_{num}": userdb.SessionInfo(
            session_id=f"keep_{num}",
            started_at=int(time.time()) - (86400 * 10),
            last_activity=int(time.time()) - (86400 * 5) + num,
            flashes=[],
        )
        for num in range(21)
    }

    assert (sorted([
        "keep_1",
        "keep_2",
        "keep_3",
        "keep_4",
        "keep_5",
        "keep_6",
        "keep_7",
        "keep_8",
        "keep_9",
        "keep_10",
        "keep_11",
        "keep_12",
        "keep_13",
        "keep_14",
        "keep_15",
        "keep_16",
        "keep_17",
        "keep_18",
        "keep_19",
        "keep_20",
    ]) == sorted(userdb._cleanup_old_sessions(sessions).keys()))
Пример #3
0
def test_cleanup_old_sessions_remove_outdated():
    assert list(
        userdb._cleanup_old_sessions({
            "outdated":
            userdb.SessionInfo(
                session_id="outdated",
                started_at=int(time.time()) - (86400 * 10),
                last_activity=int(time.time()) - (86400 * 8),
            ),
            "keep":
            userdb.SessionInfo(
                session_id="keep",
                started_at=int(time.time()) - (86400 * 10),
                last_activity=int(time.time()) - (86400 * 5),
            ),
        }).keys()) == ["keep"]
Пример #4
0
def test_cleanup_old_sessions_remove_outdated(request_context: None) -> None:
    assert (list(
        userdb._cleanup_old_sessions({
            "outdated":
            userdb.SessionInfo(
                session_id="outdated",
                started_at=int(time.time()) - (86400 * 10),
                last_activity=int(time.time()) - (86400 * 8),
                flashes=[],
            ),
            "keep":
            userdb.SessionInfo(
                session_id="keep",
                started_at=int(time.time()) - (86400 * 10),
                last_activity=int(time.time()) - (86400 * 5),
                flashes=[],
            ),
        }).keys()) == ["keep"])
Пример #5
0
def test_initialize_session_single_user_session(user_id):
    session_id = userdb._initialize_session(user_id)
    assert session_id != ""
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos[session_id] == userdb.SessionInfo(
        session_id=session_id,
        started_at=int(time.time()),
        last_activity=int(time.time()),
    )
Пример #6
0
def test_cleanup_old_sessions_too_many():
    sessions = {
        f"keep_{num}": userdb.SessionInfo(
            session_id=f"keep_{num}",
            started_at=int(time.time()) - (86400 * 10),
            last_activity=int(time.time()) - (86400 * 5) + num,
        )
        for num in range(20)
    }

    assert "keep_20" not in list(userdb._cleanup_old_sessions(sessions).keys())
Пример #7
0
def fixture_session_valid(monkeypatch, user_id, fix_time):
    session_id = "sess2"
    now = int(time.time()) - 5
    userdb._save_session_infos(
        user_id, {
            session_id:
            userdb.SessionInfo(
                session_id,
                started_at=now,
                last_activity=now,
            )
        })
    return session_id
Пример #8
0
def test_initialize_session_single_user_session(user_id: UserId,
                                                zero_uuid: None) -> None:
    now = datetime.now()
    session_id = userdb._initialize_session(user_id, now)
    assert session_id != ""
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos[session_id] == userdb.SessionInfo(
        session_id=session_id,
        started_at=int(now.timestamp()),
        last_activity=int(now.timestamp()),
        flashes=[],
        csrf_token="00000000-0000-0000-0000-000000000000",
    )
Пример #9
0
def fixture_session_timed_out(monkeypatch, user_id, fix_time):
    session_id = "sess1"
    now = int(time.time()) - 20
    userdb._save_session_infos(
        user_id, {
            session_id:
            userdb.SessionInfo(
                session_id,
                started_at=now,
                last_activity=now,
                flashes=[],
            )
        })
    return session_id
Пример #10
0
def test_refresh_session_success(user_id: UserId, session_valid: str) -> None:
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos
    old_session = userdb.SessionInfo(**asdict(session_infos[session_valid]))

    with on_time("2019-09-05 00:00:30", "UTC"):
        userdb._set_session(user_id, session_infos[session_valid])
        userdb._refresh_session(user_id, session_infos[session_valid])
        userdb.on_end_of_request(user_id)

        new_session_infos = userdb._load_session_infos(user_id)

        new_session = new_session_infos[session_valid]
        assert old_session.session_id == new_session.session_id
        assert new_session.last_activity > old_session.last_activity
Пример #11
0
def make_valid_session(user_id: UserId, now: datetime) -> SessionId:
    session_id = "sess2"
    timestamp = int(now.timestamp()) - 5
    userdb._save_session_infos(
        user_id,
        {
            session_id:
            userdb.SessionInfo(
                session_id,
                started_at=timestamp,
                last_activity=timestamp,
                flashes=[],
            )
        },
    )
    return session_id
Пример #12
0
def fixture_session_valid(monkeypatch: MonkeyPatch, user_id: UserId,
                          fix_time: None) -> str:
    session_id = "sess2"
    now = int(time.time()) - 5
    userdb._save_session_infos(
        user_id,
        {
            session_id:
            userdb.SessionInfo(
                session_id,
                started_at=now,
                last_activity=now,
                flashes=[],
            )
        },
    )
    return session_id
Пример #13
0
def test_cleanup_old_sessions_too_many():
    sessions = {
        f"keep_{num}": userdb.SessionInfo(
            session_id=f"keep_{num}",
            started_at=int(time.time()) - (86400 * 10),
            last_activity=int(time.time()) - (86400 * 5) + num,
            flashes=[],
        )
        for num in range(21)
    }

    assert sorted([
        'keep_1', 'keep_2', 'keep_3', 'keep_4', 'keep_5', 'keep_6', 'keep_7',
        'keep_8', 'keep_9', 'keep_10', 'keep_11', 'keep_12', 'keep_13',
        'keep_14', 'keep_15', 'keep_16', 'keep_17', 'keep_18', 'keep_19',
        'keep_20'
    ]) == sorted(userdb._cleanup_old_sessions(sessions).keys())
Пример #14
0
def test_refresh_session_success(user_id: UserId) -> None:
    now = datetime.now()
    session_valid = make_valid_session(user_id, now)
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos
    old_session = userdb.SessionInfo(**asdict(session_infos[session_valid]))

    now += timedelta(minutes=30)
    userdb._set_session(user_id, session_infos[session_valid])
    userdb._refresh_session(session_infos[session_valid], now)
    userdb.on_end_of_request(user_id, now)

    new_session_infos = userdb._load_session_infos(user_id)

    new_session = new_session_infos[session_valid]
    assert old_session.session_id == new_session.session_id
    assert new_session.last_activity > old_session.last_activity
Пример #15
0
def test_on_succeeded_login(user_id):
    assert config.single_user_session is None

    # Never logged in before
    assert not userdb._load_session_infos(user_id)
    assert userdb._load_failed_logins(user_id) == 0

    session_id = userdb.on_succeeded_login(user_id)
    assert session_id != ""

    # Verify the session was initialized
    session_infos = userdb._load_session_infos(user_id)
    assert session_infos == {
        session_id:
        userdb.SessionInfo(
            session_id=session_id,
            started_at=int(time.time()),
            last_activity=int(time.time()),
        )
    }

    # Ensure the failed login count is 0
    assert userdb._load_failed_logins(user_id) == 0