Parcourir la source

[trac914] added some more knobs to MockTSIGContext

JINMEI Tatuya il y a 14 ans
Parent
commit
43f5888605
1 fichiers modifiés avec 24 ajouts et 1 suppressions
  1. 24 1
      src/lib/python/isc/testutils/tsigctx_mock.py

+ 24 - 1
src/lib/python/isc/testutils/tsigctx_mock.py

@@ -16,10 +16,19 @@
 from pydnspp import *
 
 class MockTSIGContext(TSIGContext):
-    """Tthis is a mock of TSIGContext class for testing"""
+    """Tthis is a mock of TSIGContext class for testing.
+    Via its "error" attribute, you can fake the result of verify(), thereby
+    you can test many of TSIG related tests without requiring actual crypto
+    setups.  "error" should be either a TSIGError type value or a callable
+    object (typically a function).  In the latter case, the callable object
+    will take the context as a parameter, and is expected to return a
+    TSIGError object.
+    """
 
     def __init__(self, tsig_key):
         super().__init__(tsig_key)
+        self.error = None
+        self.verify_called = 0  # number of verify() called
 
     def sign(self, qid, data):
         """Transparently delegate the processing to the super class.
@@ -28,3 +37,17 @@ class MockTSIGContext(TSIGContext):
         directly.
         """
         return super().sign(qid, data)
+
+    def verify(self, tsig_record, data):
+        self.verify_called += 1
+        # call real "verify" so that we can notice any misue (which would
+        # result in exception.
+        super().verify(tsig_record, data)
+        return self.get_error()
+
+    def get_error(self):
+        if self.error is None:
+            return super().get_error()
+        if hasattr(self.error, '__call__'):
+            return self.error(self)
+        return self.error