File: C:/Users/fred/anaconda3/Lib/site-packages/anaconda_project/internal/test/test_logged_subprocess.py
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2016, Anaconda, Inc. All rights reserved.
#
# Licensed under the terms of the BSD 3-Clause License.
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------
from __future__ import absolute_import, print_function
import logging
from anaconda_project import verbose
from anaconda_project.internal import logged_subprocess
class ArrayHandler(logging.Handler):
def __init__(self):
super(ArrayHandler, self).__init__(level=logging.DEBUG)
self.messages = []
def emit(self, record):
self.messages.append(record.msg % record.args)
def _test_logger():
logger = (logging.getLoggerClass())(name="test_logged_subprocess")
logger.setLevel(logging.DEBUG)
handler = ArrayHandler()
logger.addHandler(handler)
logger.messages = handler.messages
return logger
def test_log_subprocess_call(monkeypatch):
recorded = dict(args=(), kwargs=())
def mock_call(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.call', mock_call)
logged_subprocess.call(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
def test_log_subprocess_call_with_logging(monkeypatch):
logger = _test_logger()
verbose.push_verbose_logger(logger)
try:
recorded = dict(args=(), kwargs=())
def mock_call(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.call', mock_call)
logged_subprocess.call(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
assert logger.messages == ['$ a b']
finally:
verbose.pop_verbose_logger()
def test_log_subprocess_Popen(monkeypatch):
recorded = dict(args=(), kwargs=())
def mock_Popen(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.Popen', mock_Popen)
logged_subprocess.Popen(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
def test_log_subprocess_Popen_with_logging(monkeypatch):
logger = _test_logger()
verbose.push_verbose_logger(logger)
try:
recorded = dict(args=(), kwargs=())
def mock_Popen(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.Popen', mock_Popen)
logged_subprocess.Popen(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
assert logger.messages == ['$ a b']
finally:
verbose.pop_verbose_logger()
def test_log_subprocess_check_output(monkeypatch):
recorded = dict(args=(), kwargs=())
def mock_check_output(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.check_output', mock_check_output)
logged_subprocess.check_output(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
def test_log_subprocess_check_output_with_logging(monkeypatch):
logger = _test_logger()
verbose.push_verbose_logger(logger)
try:
recorded = dict(args=(), kwargs=())
def mock_check_output(*args, **kwargs):
recorded['args'] = args
recorded['kwargs'] = kwargs
monkeypatch.setattr('subprocess.check_output', mock_check_output)
logged_subprocess.check_output(['a', 'b'], foo='bar')
assert recorded == dict(args=(), kwargs=dict(args=['a', 'b'], foo='bar'))
assert logger.messages == ['$ a b']
finally:
verbose.pop_verbose_logger()