diff options
Diffstat (limited to 'include_server/include_server_test.py')
-rwxr-xr-x | include_server/include_server_test.py | 251 |
1 files changed, 126 insertions, 125 deletions
diff --git a/include_server/include_server_test.py b/include_server/include_server_test.py index c115106..c1309ec 100755 --- a/include_server/include_server_test.py +++ b/include_server/include_server_test.py @@ -25,6 +25,8 @@ ultimately the notion of an AssertionError. __author__ = "Nils Klarlund" import os +import sys +import traceback import unittest import basics @@ -57,131 +59,130 @@ class IncludeServerTest(unittest.TestCase): return set([ self.include_analyzer.realpath_map.string[f] for f in files ]) def test_IncludeHandler_handle(self): + self_test = self + client_root_keeper = basics.ClientRootKeeper() + old_RWcd = distcc_pump_c_extensions.RCwd + distcc_pump_c_extensions.RCwd = None # to be set below + old_RArgv = distcc_pump_c_extensions.RArgv + distcc_pump_c_extensions.RArgv = None # to be set below + old_XArgv = distcc_pump_c_extensions.XArgv + distcc_pump_c_extensions.XArgv = lambda _, __: None + old_StreamRequestHandler = ( + include_server.SocketServer.StreamRequestHandler) + + class Mock_StreamRequestHandler(object): + def __init__(self): + self.rfile = lambda: None + self.rfile.fileno = lambda: 27 + self.wfile = lambda: None + self.wfile.fileno = lambda: 27 + + include_server.SocketServer.StreamRequestHandler = ( + Mock_StreamRequestHandler) + + include_analyzer = ( + include_analyzer_memoizing_node. + IncludeAnalyzerMemoizingNode(client_root_keeper)) + + class Mock_EmailSender(object): + + def __init(self): + self.expect = lambda: None + + def MaybeSendEmail(self, fd, force=False, never=False): + fd.seek(0) + text = fd.read() + self.expect(text, force, never) + fd.close() + raise + + mock_email_sender = include_analyzer.email_sender = Mock_EmailSender() + + include_handler = ( + include_server.DistccIncludeHandlerGenerator(include_analyzer)()) + + # Wow, that was a lot of set-up. Now exercise the include server and + # analyzer with an emphasis on triggering exceptions. + + # Exercise 1: non-existent translation unit. + + distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", "parse.c" ] + distcc_pump_c_extensions.RCwd = lambda self: os.getcwd() + + def Expect1(txt, force, never): + self_test.assert_( + "Include server not covering: " + + "Could not find translation unit 'parse.c'" in txt) + self_test.assertEqual(never, True) + + mock_email_sender.expect = Expect1 try: - self_test = self - basics.InitializeClientTmp() - old_RWcd = distcc_pump_c_extensions.RCwd - distcc_pump_c_extensions.RCwd = None # to be set below - old_RArgv = distcc_pump_c_extensions.RArgv - distcc_pump_c_extensions.RArgv = None # to be set below - old_XArgv = distcc_pump_c_extensions.XArgv - distcc_pump_c_extensions.XArgv = lambda _, __: None - old_StreamRequestHandler = ( - include_server.SocketServer.StreamRequestHandler) - - class Mock_StreamRequestHandler(object): - def __init__(self): - self.rfile = lambda: None - self.rfile.fileno = lambda: 27 - self.wfile = lambda: None - self.wfile.fileno = lambda: 27 - - include_server.SocketServer.StreamRequestHandler = ( - Mock_StreamRequestHandler) - - include_analyzer = ( - include_analyzer_memoizing_node.IncludeAnalyzerMemoizingNode()) - - class Mock_EmailSender(object): - - def __init(self): - self.expect = lambda: None - - def MaybeSendEmail(self, fd, force=False, never=False): - fd.seek(0) - text = fd.read() - self.expect(text, force, never) - fd.close() - raise - - mock_email_sender = include_analyzer.email_sender = Mock_EmailSender() - - include_handler = ( - include_server.DistccIncludeHandlerGenerator(include_analyzer)()) - - # Wow, that was a lot of set-up. Now exercise the include server and - # analyzer with an emphasis on triggering exceptions. - - # Exercise 1: non-existent translation unit. - - distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", "parse.c" ] - distcc_pump_c_extensions.RCwd = lambda self: os.getcwd() - - def Expect1(txt, force, never): - self_test.assert_( - "Include server not covering: " + - "Could not find translation unit 'parse.c'" in txt) - self_test.assertEqual(never, True) - - mock_email_sender.expect = Expect1 - try: - include_handler.handle() - except NotCoveredError: - pass - else: - raise AssertionError - - # Exercise 2: provoke assertion error in cache_basics by providing an - # entirely false value of current directory as provided in RCwd. - - distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", "parse.c" ] - distcc_pump_c_extensions.RCwd = lambda self: "/" - # The cwd will be changed because of false value. - oldcwd = os.getcwd() - - # We must distinguish between provoked and erroneous exceptions. So, we - # mock out, in a sense, the provoked assertion exception that we - # expect. The variable got_here allows us to filter the provoked exception - # away from unexpected ones. - got_here = [] - - def Expect2(txt, force, never): - - self_test.assert_( - "Include server internal error: 'exceptions.AssertionError" in txt) - - self_test.assert_("""for translation unit 'parse.c'""" in txt) - - # This email should be sent. - self_test.assertEqual(never, False) - - got_here.append(True) - - mock_email_sender.expect = Expect2 - try: - include_handler.handle() - except AssertionError: - os.chdir(oldcwd) - # Make sure that we're catching the induced AssertionError, not one - # produced in Except2. - self.assert_(got_here) - else: - raise AssertionError - - # Exercise 3: provoke a NotCoveredError due to an absolute #include. - - distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", - "test_data/contains_abs_include.c" ] - distcc_pump_c_extensions.RCwd = lambda self: os.getcwd() - - def Expect3(txt, force, never): - self_test.assert_( - "Filepath must be relative but isn't: '/love/of/my/life'." - in txt) - # Now check that this email is scheduled to not be sent. - self_test.assertEqual(never, True) - - mock_email_sender.expect = Expect3 - try: - include_handler.handle() - except NotCoveredError: - pass - - finally: - distcc_pump_c_extensions.RWcd = old_RWcd - distcc_pump_c_extensions.RArgv = old_RArgv - distcc_pump_c_extensions.XArgv = old_XArgv - include_server.SocketServer.StreamRequestHandler = ( - old_StreamRequestHandler) + include_handler.handle() + except NotCoveredError: + pass + else: + raise AssertionError + + # Exercise 2: provoke assertion error in cache_basics by providing an + # entirely false value of current directory as provided in RCwd. + + distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", "parse.c" ] + distcc_pump_c_extensions.RCwd = lambda self: "/" + # The cwd will be changed because of false value. + oldcwd = os.getcwd() + + # We must distinguish between provoked and erroneous exceptions. So, we + # mock out, in a sense, the provoked assertion exception that we + # expect. The variable got_here allows us to filter the provoked exception + # away from unexpected ones. + got_here = [] + + def Expect2(txt, force, never): + + self_test.assert_( + "Include server internal error: 'exceptions.AssertionError" in txt) + + self_test.assert_("""for translation unit 'parse.c'""" in txt) + + # This email should be sent. + self_test.assertEqual(never, False) + + got_here.append(True) + + mock_email_sender.expect = Expect2 + try: + include_handler.handle() + except AssertionError: + os.chdir(oldcwd) + # Make sure that we're catching the induced AssertionError, not one + # produced in Except2. + self.assert_(got_here) + else: + raise AssertionError + + # Exercise 3: provoke a NotCoveredError due to an absolute #include. + + distcc_pump_c_extensions.RArgv = lambda self: [ "gcc", + "test_data/contains_abs_include.c" ] + distcc_pump_c_extensions.RCwd = lambda self: os.getcwd() + + def Expect3(txt, force, never): + self_test.assert_( + "Filepath must be relative but isn't: '/love/of/my/life'." + in txt) + # Now check that this email is scheduled to not be sent. + self_test.assertEqual(never, True) + + mock_email_sender.expect = Expect3 + try: + include_handler.handle() + except NotCoveredError: + pass + + distcc_pump_c_extensions.RWcd = old_RWcd + distcc_pump_c_extensions.RArgv = old_RArgv + distcc_pump_c_extensions.XArgv = old_XArgv + include_server.SocketServer.StreamRequestHandler = ( + old_StreamRequestHandler) unittest.main() |