return searchval == val
-def sh(command, log_limit=1024):
+def sh(command, log_limit=1024, include_stderr=False):
"""
- Run the shell command and return the output in ascii (stderr and
- stdout). If the command fails, raise an exception. The command
- and its output are logged, on success and on error.
+ Run the shell command and return the output in ascii (stdout and optionally
+ stderr). If the command fails, raise an exception. The command and its
+ output are logged, on success and on error.
"""
log.debug(":sh: " + command)
proc = subprocess.Popen(
args=command,
stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
+ stderr=subprocess.STDOUT if include_stderr else subprocess.PIPE,
shell=True,
bufsize=1)
+ if include_stderr is False:
+ log.debug("stderr: %s", proc.stderr.read())
lines = []
truncated = False
with proc.stdout:
assert ('replay full' in record.message or
'ABC\n' == record.message)
+
def test_sh_progress(caplog):
- misc.sh("echo AB ; sleep 5 ; /bin/echo C", 2) == "ABC\n"
+ misc.sh("echo AB ; sleep 5 ; /bin/echo C", 2, include_stderr=True) == "ABC\n"
records = caplog.records()
assert ':sh: ' in records[0].message
assert 'AB' == records[1].message
t2 = datetime.strptime(records[2].asctime.split(',')[0], "%Y-%m-%d %H:%M:%S")
assert (t2 - t1).total_seconds() > 2
+
def test_wait_until_osds_up():
ctx = argparse.Namespace()
remote = FakeRemote()