def createValidator(self): if self.v == None: self.v = Validator()
class TestValidator(unittest.TestCase): v = None # Create the validator context only once def createValidator(self): if self.v == None: self.v = Validator() # Check that internal definitions are consistent with library def test_fmtStatusValues(self): self.createValidator() self.assertEqual(self.v.fmtValStatus(0x80), 'VAL_SUCCESS') self.assertEqual(self.v.fmtValStatus(1), 'VAL_BOGUS') self.assertEqual(self.v.fmtValStatus(0x88), 'VAL_PINSECURE') self.assertEqual(self.v.fmtAcStatus(VAL_AC_VERIFIED), 'VAL_AC_VERIFIED') # Convenience function for checking resolveAndCheck results def common_resolveAndCheck(self, nameval, classval, typeval, pResults): rrset = pResults.contents.val_rc_rrset.contents self.assertEqual(rrset.val_rrset_rcode, 0) self.assertEqual(rrset.val_rrset_name, nameval) self.assertEqual(rrset.val_rrset_class, classval) self.assertEqual(rrset.val_rrset_type, typeval) # test for the resolveAndCheck function def test_resolveAndCheck(self): self.createValidator() # test of a validatable name pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) if pResults: self.assertEqual(pResults.contents.val_rc_status, VAL_SUCCESS) self.common_resolveAndCheck(VAL_NAME, 1, 1, pResults) self.v.freeResultChain(pResults) # check if result details are returned pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, VAL_QUERY_AC_DETAIL) if pResults: self.assertEqual(pResults.contents.val_rc_status, VAL_SUCCESS) self.common_resolveAndCheck(VAL_NAME, 1, 1, pResults) self.assertTrue(pResults.contents.val_rc_answer) self.assertEqual(pResults.contents.val_rc_answer.contents.val_ac_status, VAL_AC_VERIFIED) self.v.freeResultChain(pResults) # check if query flags work pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, VAL_QUERY_DONT_VALIDATE) if pResults: self.assertEqual(pResults.contents.val_rc_status, VAL_IGNORE_VALIDATION) self.common_resolveAndCheck(VAL_NAME, 1, 1, pResults) self.v.freeResultChain(pResults) # test the setFlags function def test_setFlags(self): self.createValidator() # Disable validation self.v.setFlags(VAL_CTX_FLAG_SET, VAL_QUERY_DONT_VALIDATE) pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) if pResults: self.assertEqual(pResults.contents.val_rc_status, VAL_IGNORE_VALIDATION) self.v.freeResultChain(pResults) # Enable validation self.v.setFlags(VAL_CTX_FLAG_RESET, VAL_QUERY_DONT_VALIDATE) if pResults: pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) self.assertEqual(pResults.contents.val_rc_status, VAL_SUCCESS) self.v.freeResultChain(pResults) # test the isTrusted function def test_isTrusted(self): self.createValidator() # Check if secure name is trusted pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) if pResults: self.assertTrue(self.v.isTrusted(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # Check if bogus name is not trusted pResults = self.v.resolveAndCheck(BOGUS_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.isTrusted(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # Check if provably insecure name is trusted pResults = self.v.resolveAndCheck(PI_NAME, 1, 1, 0) if pResults: self.assertTrue(self.v.isTrusted(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # test the isTrusted function def test_isValdated(self): self.createValidator() # Check if secure name is validated pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) if pResults: self.assertTrue(self.v.isValidated(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # Check if bogus name is not validated pResults = self.v.resolveAndCheck(BOGUS_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.isValidated(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # Check if provably insecure name is not validated pResults = self.v.resolveAndCheck(PI_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.isValidated(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) def test_doesNotExist(self): self.createValidator() # Non-Existence condition - bogus answers should not work, others should pResults = self.v.resolveAndCheck(VAL_DOE, 1, 1, 0) if pResults: self.assertTrue(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # NULL result pResults = self.v.resolveAndCheck(BOGUS_DOE, 1, 1, 0) if pResults: self.assertFalse(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) pResults = self.v.resolveAndCheck(PI_DOE, 1, 1, 0) if pResults: self.assertTrue(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) # Existence conditions - none of these should be true pResults = self.v.resolveAndCheck(VAL_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) pResults = self.v.resolveAndCheck(BOGUS_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults) pResults = self.v.resolveAndCheck(PI_NAME, 1, 1, 0) if pResults: self.assertFalse(self.v.doesNotExist(pResults.contents.val_rc_status)) self.v.freeResultChain(pResults)