فهرست منبع

Add some missing test mocks that were masking lack of unit coverage.

Dan Helfman 5 سال پیش
والد
کامیت
3bcef72050
2فایلهای تغییر یافته به همراه20 افزوده شده و 6 حذف شده
  1. 6 6
      borgmatic/execute.py
  2. 14 0
      tests/integration/test_execute.py

+ 6 - 6
borgmatic/execute.py

@@ -22,7 +22,7 @@ def exit_code_indicates_error(exit_code, error_on_warnings=True):
     return bool(exit_code >= BORG_ERROR_EXIT_CODE)
 
 
-def process_command(process):
+def command_for_process(process):
     '''
     Given a process as an instance of subprocess.Popen, return the command string that was used to
     invoke it.
@@ -32,9 +32,9 @@ def process_command(process):
 
 def output_buffer_for_process(process, exclude_stdouts):
     '''
-    Given an instance of subprocess.Popen and a sequence of stdouts to exclude, return either the
-    process's stdout or stderr. The idea is that if stdout is excluded for a process, we still have
-    stderr to log.
+    Given a process as an instance of subprocess.Popen and a sequence of stdouts to exclude, return
+    either the process's stdout or stderr. The idea is that if stdout is excluded for a process, we
+    still have stderr to log.
     '''
     return process.stderr if process.stdout in exclude_stdouts else process.stdout
 
@@ -100,7 +100,7 @@ def log_outputs(processes, exclude_stdouts, output_log_level, error_on_warnings)
                 last_lines.insert(0, '...')
 
             raise subprocess.CalledProcessError(
-                exit_code, process_command(process), '\n'.join(last_lines)
+                exit_code, command_for_process(process), '\n'.join(last_lines)
             )
 
 
@@ -170,7 +170,7 @@ def execute_command(
         exit_code = process.wait()
 
         if exit_code_indicates_error(exit_code, error_on_warnings):
-            raise subprocess.CalledProcessError(exit_code, process_command(process))
+            raise subprocess.CalledProcessError(exit_code, command_for_process(process))
 
         return None
 

+ 14 - 0
tests/integration/test_execute.py

@@ -13,11 +13,19 @@ def test_log_outputs_logs_each_line_separately():
     flexmock(module).should_receive('exit_code_indicates_error').and_return(False)
 
     hi_process = subprocess.Popen(['echo', 'hi'], stdout=subprocess.PIPE)
+    flexmock(module).should_receive('output_buffer_for_process').with_args(
+        hi_process, ()
+    ).and_return(hi_process.stdout)
+
     module.log_outputs(
         (hi_process,), exclude_stdouts=(), output_log_level=logging.INFO, error_on_warnings=False
     )
 
     there_process = subprocess.Popen(['echo', 'there'], stdout=subprocess.PIPE)
+    flexmock(module).should_receive('output_buffer_for_process').with_args(
+        there_process, ()
+    ).and_return(there_process.stdout)
+
     module.log_outputs(
         (there_process,), exclude_stdouts=(), output_log_level=logging.INFO, error_on_warnings=False
     )
@@ -26,8 +34,10 @@ def test_log_outputs_logs_each_line_separately():
 def test_log_outputs_includes_error_output_in_exception():
     flexmock(module.logger).should_receive('log')
     flexmock(module).should_receive('exit_code_indicates_error').and_return(True)
+    flexmock(module).should_receive('command_for_process').and_return('grep')
 
     process = subprocess.Popen(['grep'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    flexmock(module).should_receive('output_buffer_for_process').and_return(process.stdout)
 
     with pytest.raises(subprocess.CalledProcessError) as error:
         module.log_outputs(
@@ -42,8 +52,10 @@ def test_log_outputs_truncates_long_error_output():
     flexmock(module).ERROR_OUTPUT_MAX_LINE_COUNT = 0
     flexmock(module.logger).should_receive('log')
     flexmock(module).should_receive('exit_code_indicates_error').and_return(True)
+    flexmock(module).should_receive('command_for_process').and_return('grep')
 
     process = subprocess.Popen(['grep'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    flexmock(module).should_receive('output_buffer_for_process').and_return(process.stdout)
 
     with pytest.raises(subprocess.CalledProcessError) as error:
         module.log_outputs(
@@ -59,6 +71,8 @@ def test_log_outputs_with_no_output_logs_nothing():
     flexmock(module).should_receive('exit_code_indicates_error').and_return(False)
 
     process = subprocess.Popen(['true'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+    flexmock(module).should_receive('output_buffer_for_process').and_return(process.stdout)
+
     module.log_outputs(
         (process,), exclude_stdouts=(), output_log_level=logging.INFO, error_on_warnings=False
     )