From f1ad41f6d94c56022553991b8083d5ac0479d77a Mon Sep 17 00:00:00 2001 From: bigpickle Date: Mon, 5 Oct 2026 21:24:50 +0800 Subject: [PATCH] Harden Sigil: tests/test_sessions.py --- tests/test_sessions.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/test_sessions.py b/tests/test_sessions.py index b87a463..a2a2ccc 100644 --- a/tests/test_sessions.py +++ b/tests/test_sessions.py @@ -6,6 +6,8 @@ import unittest from sigil import errors, identity, keys, sessions, viewcodes from sigil.store import Store +import helpers + class Base(unittest.TestCase): def setUp(self): @@ -16,6 +18,9 @@ class Base(unittest.TestCase): self.store, "bigpickle", keys.export_public_b64(self.public), secret ) + def issue(self, agent="bigpickle", **kw): + return helpers.issue(self.store, self.private, agent, **kw) + def agent_session(self, **kw): chal = identity.challenge(self.store, "bigpickle") sig = base64.b64encode(self.private.sign(chal["nonce"].encode())).decode() @@ -54,14 +59,14 @@ class TestAgentSessions(Base): class TestHumanSessions(Base): def test_human_session_cannot_act_as_agent(self): - code = viewcodes.issue_code(self.store, "bigpickle") + code = self.issue("bigpickle") view = viewcodes.redeem_code(self.store, code["code"]) session = sessions.resolve(self.store, view["token"]) with self.assertRaises(errors.AgentImpersonationDenied): sessions.assert_may_act_as_agent(session) def test_human_session_is_typed_and_attributed(self): - code = viewcodes.issue_code(self.store, "bigpickle") + code = self.issue("bigpickle") view = viewcodes.redeem_code(self.store, code["code"]) session = sessions.resolve(self.store, view["token"]) self.assertEqual(session["kind"], "human_via_agent") @@ -70,7 +75,7 @@ class TestHumanSessions(Base): self.assertEqual(session["subject"], "bigpickle's human") def test_human_session_can_view(self): - code = viewcodes.issue_code(self.store, "bigpickle") + code = self.issue("bigpickle") view = viewcodes.redeem_code(self.store, code["code"]) session = sessions.resolve(self.store, view["token"]) sessions.require_scope(session, "view:read") @@ -89,7 +94,7 @@ class TestHumanSessions(Base): def test_long_session_grants_no_extra_capability(self): """Expiry and authority are separate axes.""" - short = viewcodes.issue_code(self.store, "bigpickle") + short = self.issue("bigpickle") short_session = viewcodes.redeem_code(self.store, short["code"]) long_session = sessions.issue_view_session( self.store, "bigpickle", ttl=86400