Commit 7a87432e authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[trac914] added some utilities for further testing:

 - allow pydnspp.TSIGContext to act as a base class so that we can define
   a mock class for easier testing
 - define MockTSIGContext (for now) as a transparent wrapper, and use this
   class in existing tests to confirm it doesn't change the behavior.
parent 03fd4333
......@@ -15,6 +15,7 @@
import unittest
import socket
from isc.testutils.tsigctx_mock import MockTSIGContext
from xfrin import *
#
......@@ -225,7 +226,7 @@ class TestXfrinConnection(unittest.TestCase):
self.assertEqual(self.conn.query_data, b'\x00\x1d\x105\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x07example\x03com\x00\x00\xfc\x00\x01')
# soa request with tsig
self.conn._tsig_ctx = TSIGContext(TSIG_KEY)
self.conn._tsig_ctx = MockTSIGContext(TSIG_KEY)
self.conn._send_query(RRType.SOA())
tsig_soa_data = strip_mutable_tsig_data(self.conn.query_data)
self.assertEqual(tsig_soa_data, b'\x00n\x105\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x07example\x03com\x00\x00\x06\x00\x01\x07example\x03com\x00\x00\xfa\x00\xff\x00\x00\x00\x00\x00:\x08hmac-md5\x07sig-alg\x03reg\x03int\x00\x01,\x00\x10\x105\x00\x00\x00\x00')
......@@ -240,7 +241,7 @@ class TestXfrinConnection(unittest.TestCase):
self.assertRaises(XfrinTestException, self._handle_xfrin_response)
def test_response_with_tsig(self):
self.conn._tsig_ctx = TSIGContext(TSIG_KEY)
self.conn._tsig_ctx = MockTSIGContext(TSIG_KEY)
# server tsig check fail, return with RCODE 9 (NOTAUTH)
self.conn._send_query(RRType.SOA())
self.conn.reply_data = self.conn.create_response_data(rcode=Rcode.NOTAUTH())
......
......@@ -270,7 +270,14 @@ PyTypeObject tsigcontext_type = {
NULL, // tp_getattro
NULL, // tp_setattro
NULL, // tp_as_buffer
Py_TPFLAGS_DEFAULT, // tp_flags
// We allow the python version of TSIGContext to act as a base class.
// From pure design point of view, this is wrong because it's not intended
// to be inherited. However, cryptographic operations are generally
// difficult to test, so it would be very advantageous if we can define
// a mock context class.
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, // tp_flags
"The TSIGContext class objects is...(COMPLETE THIS)",
NULL, // tp_traverse
NULL, // tp_clear
......
# Copyright (C) 2011 Internet Systems Consortium.
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
from pydnspp import *
class MockTSIGContext(TSIGContext):
"""Tthis is a mock of TSIGContext class for testing"""
def __init__(self, tsig_key):
super().__init__(tsig_key)
def sign(self, qid, data):
"""Transparently delegate the processing to the super class.
It doesn't matter much anyway because normal applications that would
be implemented in Python normally won't call TSIGContext.sign()
directly.
"""
return super().sign(qid, data)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment