[tor-commits] [stem/master] Using mock for authentication unit tests

atagar at torproject.org atagar at torproject.org
Thu Jun 13 16:50:53 UTC 2013


commit 1007a0a2d1963f350444c3b762cab6be8bda6eda
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Jun 10 08:30:16 2013 -0700

    Using mock for authentication unit tests
    
    Mostly sorting out another thorny test that exhaustively exercises all
    authentication use cases.
---
 test/unit/connection/authentication.py |   47 +++++++++++++++-----------------
 1 file changed, 22 insertions(+), 25 deletions(-)

diff --git a/test/unit/connection/authentication.py b/test/unit/connection/authentication.py
index bc0b44d..2157a5b 100644
--- a/test/unit/connection/authentication.py
+++ b/test/unit/connection/authentication.py
@@ -13,44 +13,41 @@ import unittest
 
 import stem.connection
 
+from mock import Mock, patch
+
 from stem.util import log
 from test import mocking
 
 
 class TestAuthenticate(unittest.TestCase):
-  def setUp(self):
-    mocking.mock(stem.connection.get_protocolinfo, mocking.no_op())
-    mocking.mock(stem.connection.authenticate_none, mocking.no_op())
-    mocking.mock(stem.connection.authenticate_password, mocking.no_op())
-    mocking.mock(stem.connection.authenticate_cookie, mocking.no_op())
-    mocking.mock(stem.connection.authenticate_safecookie, mocking.no_op())
-
-  def tearDown(self):
-    mocking.revert_mocking()
-
-  def test_with_get_protocolinfo(self):
+  @patch('stem.connection.get_protocolinfo')
+  @patch('stem.connection.authenticate_none', Mock())
+  def test_with_get_protocolinfo(self, get_protocolinfo_mock):
     """
     Tests the authenticate() function when it needs to make a get_protocolinfo.
     """
 
     # tests where get_protocolinfo succeeds
-    protocolinfo_response = mocking.get_protocolinfo_response(
+
+    get_protocolinfo_mock.return_value = mocking.get_protocolinfo_response(
       auth_methods = (stem.connection.AuthMethod.NONE, ),
     )
 
-    mocking.mock(stem.connection.get_protocolinfo, mocking.return_value(protocolinfo_response))
     stem.connection.authenticate(None)
 
     # tests where get_protocolinfo raises an exception
-    raised_exc = stem.ProtocolError(None)
-    mocking.mock(stem.connection.get_protocolinfo, mocking.raise_exception(raised_exc))
+
+    get_protocolinfo_mock.side_effect = stem.ProtocolError
     self.assertRaises(stem.connection.IncorrectSocketType, stem.connection.authenticate, None)
 
-    raised_exc = stem.SocketError(None)
-    mocking.mock(stem.connection.get_protocolinfo, mocking.raise_exception(raised_exc))
+    get_protocolinfo_mock.side_effect = stem.SocketError
     self.assertRaises(stem.connection.AuthenticationFailure, stem.connection.authenticate, None)
 
-  def test_all_use_cases(self):
+  @patch('stem.connection.authenticate_none')
+  @patch('stem.connection.authenticate_password')
+  @patch('stem.connection.authenticate_cookie')
+  @patch('stem.connection.authenticate_safecookie')
+  def test_all_use_cases(self, authenticate_safecookie_mock, authenticate_cookie_mock, authenticate_password_mock, authenticate_none_mock):
     """
     Does basic validation that all valid use cases for the PROTOCOLINFO input
     and dependent functions result in either success or a AuthenticationFailed
@@ -127,26 +124,26 @@ class TestAuthenticate(unittest.TestCase):
             expect_success = False
             auth_mocks = {
               stem.connection.AuthMethod.NONE:
-                (stem.connection.authenticate_none, auth_none_exc),
+                (authenticate_none_mock, auth_none_exc),
               stem.connection.AuthMethod.PASSWORD:
-                (stem.connection.authenticate_password, auth_password_exc),
+                (authenticate_password_mock, auth_password_exc),
               stem.connection.AuthMethod.COOKIE:
-                (stem.connection.authenticate_cookie, auth_cookie_exc),
+                (authenticate_cookie_mock, auth_cookie_exc),
               stem.connection.AuthMethod.SAFECOOKIE:
-                (stem.connection.authenticate_safecookie, auth_cookie_exc),
+                (authenticate_safecookie_mock, auth_cookie_exc),
             }
 
             for auth_method in auth_mocks:
-              auth_function, raised_exc = auth_mocks[auth_method]
+              auth_mock, raised_exc = auth_mocks[auth_method]
 
               if not raised_exc:
                 # Mocking this authentication method so it will succeed. If
                 # it's among the protocolinfo methods then expect success.
 
-                mocking.mock(auth_function, mocking.no_op())
+                auth_mock.side_effect = None
                 expect_success |= auth_method in protocolinfo_auth_methods
               else:
-                mocking.mock(auth_function, mocking.raise_exception(raised_exc))
+                auth_mock.side_effect = raised_exc
 
             if expect_success:
               stem.connection.authenticate(None, "blah", None, protocolinfo_arg)





More information about the tor-commits mailing list