Co-exist peacefully with the fakesshagent variant of the stubbed SSH agent
Marco Ricci

Marco Ricci commited on 2026-08-29 20:24:09
Zeige 1 geänderte Dateien mit 38 Einfügungen und 15 Löschungen.


`fakesshagent` is the name of the planned package into which our stubbed
SSH agent will be extracted, and which `derivepassphrase` will depend on
in the future.

If we can load the stubbed SSH agent from that package, then deactivate
our own stub agent, do not register it, and provide compatibility links
for the rest of the test suite.  We also mark it as conditionally not
covered, using two new provisional coverage pragmas.
... ...
@@ -42,7 +42,7 @@ if TYPE_CHECKING:
42 42
     from contextlib import AbstractContextManager
43 43
     from typing import IO, Literal, NotRequired
44 44
 
45
-    from typing_extensions import Any, Buffer, Self
45
+    from typing_extensions import Any, Buffer, Self, TypeAlias
46 46
 
47 47
 
48 48
 # Test suite settings
... ...
@@ -394,10 +394,7 @@ class AgentProtocolResponseQueue:
394 394
 # ------------
395 395
 
396 396
 
397
-@socketprovider.SocketProvider.register(
398
-    _types.BuiltinSSHAgentSocketProvider.STUB_AGENT
399
-)
400
-class StubbedSSHAgentSocket:
397
+class StubbedSSHAgentSocket_:  # pragma: unless fakesshagent no cover  # noqa: N801
401 398
     """A stubbed SSH agent presenting an [`_types.SSHAgentSocket`][].
402 399
 
403 400
     On the network protocol side, the agent implements the full
... ...
@@ -725,10 +722,9 @@ class StubbedSSHAgentSocket:
725 722
 # ----------------
726 723
 
727 724
 
728
-@socketprovider.SocketProvider.register(
729
-    _types.BuiltinSSHAgentSocketProvider.STUB_AGENT_WITH_ADDRESS
730
-)
731
-class StubbedSSHAgentSocketWithAddress(StubbedSSHAgentSocket):
725
+class StubbedSSHAgentSocketWithAddress_(  # noqa: N801
726
+    StubbedSSHAgentSocket_
727
+):  # pragma: unless fakesshagent no cover
732 728
     """A [`StubbedSSHAgentSocket`][] requiring a specific address."""
733 729
 
734 730
     ADDRESS = "stub-ssh-agent:"
... ...
@@ -772,12 +768,9 @@ class StubbedSSHAgentSocketWithAddress(StubbedSSHAgentSocket):
772 768
 # ---------------------
773 769
 
774 770
 
775
-@socketprovider.SocketProvider.register(
776
-    _types.BuiltinSSHAgentSocketProvider.STUB_AGENT_WITH_ADDRESS_AND_DETERMINISTIC_DSA
777
-)
778
-class StubbedSSHAgentSocketWithAddressAndDeterministicDSA(
779
-    StubbedSSHAgentSocketWithAddress
780
-):
771
+class StubbedSSHAgentSocketWithAddressAndDeterministicDSA_(  # noqa: N801
772
+    StubbedSSHAgentSocketWithAddress_
773
+):  # pragma: unless fakesshagent no cover
781 774
     """A [`StubbedSSHAgentSocketWithAddress`][] supporting deterministic DSA."""
782 775
 
783 776
     def __init__(self) -> None:
... ...
@@ -796,3 +789,33 @@ class StubbedSSHAgentSocketWithAddressAndDeterministicDSA(
796 789
         super().__init__("query", "list-extended@putty.projects.tartarus.org")
797 790
         self.try_rfc6979 = True
798 791
         self.try_pageant_068_080 = True
792
+
793
+
794
+try:  # pragma: unless internalsshagent no cover [external]
795
+    from fakesshagent.machinery import (
796
+        StubbedSSHAgentSocket as StubbedSSHAgentSocket,
797
+    )
798
+    from fakesshagent.machinery import (
799
+        StubbedSSHAgentSocketWithAddress as StubbedSSHAgentSocketWithAddress,
800
+    )
801
+    from fakesshagent.machinery import (
802
+        StubbedSSHAgentSocketWithAddressAndDeterministicDSA as StubbedSSHAgentSocketWithAddressAndDeterministicDSA,
803
+    )
804
+except ModuleNotFoundError:  # pragma: unless fakesshagent no cover [external]
805
+    StubbedSSHAgentSocket: TypeAlias = StubbedSSHAgentSocket_  # type: ignore[no-redef]
806
+    StubbedSSHAgentSocketWithAddress: TypeAlias = (  # type: ignore[no-redef]
807
+        StubbedSSHAgentSocketWithAddress_
808
+    )
809
+    StubbedSSHAgentSocketWithAddressAndDeterministicDSA: TypeAlias = (  # type: ignore[no-redef]
810
+        StubbedSSHAgentSocketWithAddressAndDeterministicDSA_
811
+    )
812
+
813
+    socketprovider.SocketProvider.register(
814
+        _types.BuiltinSSHAgentSocketProvider.STUB_AGENT
815
+    )(StubbedSSHAgentSocket)
816
+    socketprovider.SocketProvider.register(
817
+        _types.BuiltinSSHAgentSocketProvider.STUB_AGENT_WITH_ADDRESS
818
+    )(StubbedSSHAgentSocketWithAddress)
819
+    socketprovider.SocketProvider.register(
820
+        _types.BuiltinSSHAgentSocketProvider.STUB_AGENT_WITH_ADDRESS_AND_DETERMINISTIC_DSA
821
+    )(StubbedSSHAgentSocketWithAddressAndDeterministicDSA)
799 822