]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/test_process.py
2 from ceph_volume
.tests
.conftest
import Factory
3 from ceph_volume
import process
7 def mock_call(monkeypatch
):
9 Monkeypatches process.call, so that a caller can add behavior to the response
11 def apply(stdout
=None, stderr
=None, returncode
=0):
12 stdout_stream
= Factory(read
=lambda: stdout
)
13 stderr_stream
= Factory(read
=lambda: stderr
)
14 return_value
= Factory(
17 wait
=lambda: returncode
,
18 communicate
=lambda x
: (stdout
, stderr
, returncode
)
22 'ceph_volume.process.subprocess.Popen',
23 lambda *a
, **kw
: return_value
)
28 class TestCall(object):
30 def test_stderr_terminal_and_logfile(self
, mock_call
, caplog
, capsys
):
31 mock_call(stdout
='stdout\n', stderr
='some stderr message\n')
32 process
.call(['ls'], terminal_verbose
=True)
33 out
, err
= capsys
.readouterr()
34 log_lines
= [line
[-1] for line
in caplog
.record_tuples
]
35 assert 'Running command: ' in log_lines
[0]
36 assert 'ls' in log_lines
[0]
37 assert 'stderr some stderr message' in log_lines
[-1]
38 assert 'some stderr message' in out
40 def test_stderr_terminal_and_logfile_off(self
, mock_call
, caplog
, capsys
):
41 mock_call(stdout
='stdout\n', stderr
='some stderr message\n')
42 process
.call(['ls'], terminal_verbose
=False)
43 out
, err
= capsys
.readouterr()
44 log_lines
= [line
[-1] for line
in caplog
.record_tuples
]
45 assert 'Running command: ' in log_lines
[0]
46 assert 'ls' in log_lines
[0]
47 assert 'stderr some stderr message' in log_lines
[-1]
50 def test_verbose_on_failure(self
, mock_call
, caplog
, capsys
):
51 mock_call(stdout
='stdout\n', stderr
='stderr\n', returncode
=1)
52 process
.call(['ls'], terminal_verbose
=False, logfile_verbose
=False)
53 out
, err
= capsys
.readouterr()
54 log_lines
= '\n'.join([line
[-1] for line
in caplog
.record_tuples
])
55 assert 'Running command: ' in log_lines
56 assert 'ls' in log_lines
57 assert 'stderr' in log_lines
58 assert 'stdout: stdout' in out
60 def test_silent_verbose_on_failure(self
, mock_call
, caplog
, capsys
):
61 mock_call(stdout
='stdout\n', stderr
='stderr\n', returncode
=1)
62 process
.call(['ls'], verbose_on_failure
=False)
63 out
, err
= capsys
.readouterr()
64 log_lines
= '\n'.join([line
[-1] for line
in caplog
.record_tuples
])
65 assert 'Running command: ' in log_lines
66 assert 'ls' in log_lines
67 assert 'stderr' in log_lines
71 class TestFunctionalCall(object):
74 process
.call(['xargs', 'ls'], stdin
="echo '/'")
76 def test_unicode_encoding(self
):
77 process
.call(['echo', u
'\xd0'])
79 def test_unicode_encoding_stdin(self
):
80 process
.call(['echo'], stdin
=u
'\xd0'.encode('utf-8'))
83 class TestFunctionalRun(object):
85 def test_log_descriptors(self
):
86 process
.run(['ls', '-l'])