From 95bd3c2c54312417b132ddb91c89fdbe63b01fd0 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 8 Sep 2015 12:33:44 -0700 Subject: [PATCH] test: Fix failure test to find message anywhere in stderr Consolidate test_failure() and test_failure_tty() Signed-off-by: David Zafman --- src/test/ceph_objectstore_tool.py | 55 ++++++++++++------------------- 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/src/test/ceph_objectstore_tool.py b/src/test/ceph_objectstore_tool.py index 40b3568cc20..7f616b7d94c 100755 --- a/src/test/ceph_objectstore_tool.py +++ b/src/test/ceph_objectstore_tool.py @@ -142,51 +142,38 @@ def vstart(new, opt=""): print "DONE" -def test_failure_tty(cmd, errmsg): - try: - ttyfd = open("/dev/tty", "rw") - except Exception, e: - logging.info(str(e)) - logging.info("SKIP " + cmd) - return 0 +def test_failure(cmd, errmsg, tty=False): + if tty: + try: + ttyfd = open("/dev/tty", "rw") + except Exception, e: + logging.info(str(e)) + logging.info("SKIP " + cmd) + return 0 TMPFILE = r"/tmp/tmp.{pid}".format(pid=os.getpid()) tmpfd = open(TMPFILE, "w") logging.debug(cmd) - ret = call(cmd, shell=True, stdin=ttyfd, stdout=ttyfd, stderr=tmpfd) - ttyfd.close() + if tty: + ret = call(cmd, shell=True, stdin=ttyfd, stdout=ttyfd, stderr=tmpfd) + ttyfd.close() + else: + ret = call(cmd, shell=True, stderr=tmpfd) tmpfd.close() if ret == 0: logging.error(cmd) logging.error("Should have failed, but got exit 0") return 1 lines = get_lines(TMPFILE) - line = lines[0] - if line == errmsg: - logging.info("Correctly failed with message \"" + line + "\"") + matched = [ l for l in lines if errmsg in l ] + if any(matched): + logging.info("Correctly failed with message \"" + matched[0] + "\"") return 0 else: - logging.error("Bad message to stderr \"" + line + "\"") + logging.error("Bad messages to stderr \"" + str(lines) + "\"") return 1 -def test_failure(cmd, errmsg): - logging.debug(cmd) - try: - check_output(cmd, stderr=subprocess.STDOUT, shell=True) - logging.error(cmd) - logging.error("Should have failed, but got exit 0") - return 1 - except subprocess.CalledProcessError, e: - if errmsg in e.output: - logging.info("Correctly failed with message \"" + errmsg + "\"") - return 0 - else: - errmsg = e.output.split('\n')[0] - logging.error("Bad message to stderr \"" + errmsg + "\"") - return 1 - - def get_nspace(num): if num == 0: return "" @@ -730,11 +717,11 @@ def main(argv): print "Test invalid parameters" # On export can't use stdout to a terminal cmd = (CFSD_PREFIX + "--op export --pgid {pg}").format(osd=ONEOSD, pg=ONEPG) - ERRORS += test_failure_tty(cmd, "stdout is a tty and no --file filename specified") + ERRORS += test_failure(cmd, "stdout is a tty and no --file filename specified", tty=True) # On export can't use stdout to a terminal cmd = (CFSD_PREFIX + "--op export --pgid {pg} --file -").format(osd=ONEOSD, pg=ONEPG) - ERRORS += test_failure_tty(cmd, "stdout is a tty and no --file filename specified") + ERRORS += test_failure(cmd, "stdout is a tty and no --file filename specified", tty=True) # Prep a valid ec export file for import failure tests ONEECPG = ALLECPGS[0] @@ -777,11 +764,11 @@ def main(argv): # On import can't use stdin from a terminal cmd = (CFSD_PREFIX + "--op import --pgid {pg}").format(osd=ONEOSD, pg=ONEPG) - ERRORS += test_failure_tty(cmd, "stdin is a tty and no --file filename specified") + ERRORS += test_failure(cmd, "stdin is a tty and no --file filename specified", tty=True) # On import can't use stdin from a terminal cmd = (CFSD_PREFIX + "--op import --pgid {pg} --file -").format(osd=ONEOSD, pg=ONEPG) - ERRORS += test_failure_tty(cmd, "stdin is a tty and no --file filename specified") + ERRORS += test_failure(cmd, "stdin is a tty and no --file filename specified", tty=True) # Specify a bad --type cmd = (CFSD_PREFIX + "--type foobar --op list --pgid {pg}").format(osd=ONEOSD, pg=ONEPG) -- 2.47.3