From: Andrew Schoen Date: Tue, 25 Nov 2014 22:22:20 +0000 (-0600) Subject: adding tests for teuthology.ls, coverage now at 88% X-Git-Tag: 1.1.0~1061^2~25^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=871a84bb1c7944164a388808058e331e2d643bb2;p=teuthology.git adding tests for teuthology.ls, coverage now at 88% Signed-off-by: Andrew Schoen --- diff --git a/teuthology/ls.py b/teuthology/ls.py index 3b15efbc3f..e78d5c8533 100644 --- a/teuthology/ls.py +++ b/teuthology/ls.py @@ -21,30 +21,7 @@ def ls(archive_dir, verbose): summary.update(new) except IOError as e: if e.errno == errno.ENOENT: - print '%s ' % j, - - # pid - try: - pidfile = os.path.join(job_dir, 'pid') - found = False - if os.path.isfile(pidfile): - pid = open(pidfile, 'r').read() - if os.path.isdir("/proc/%s" % pid): - cmdline = open('/proc/%s/cmdline' % pid, - 'r').read() - if cmdline.find(archive_dir) >= 0: - print '(pid %s)' % pid, - found = True - if not found: - print '(no process or summary.yaml)', - # tail - tail = os.popen( - 'tail -1 %s/%s/teuthology.log' % (archive_dir, j) - ).read().rstrip() - print tail, - except IOError as e: - continue - print '' + print_debug_info(j, job_dir, archive_dir) continue else: raise @@ -71,3 +48,29 @@ def get_jobs(archive_dir): jobs = [job for job in dir_contents if is_job_dir(archive_dir, job)] return sorted(jobs) + + +def print_debug_info(job, job_dir, archive_dir): + print '%s ' % job, + + try: + pidfile = os.path.join(job_dir, 'pid') + found = False + if os.path.isfile(pidfile): + pid = open(pidfile, 'r').read() + if os.path.isdir("/proc/%s" % pid): + cmdline = open('/proc/%s/cmdline' % pid, + 'r').read() + if cmdline.find(archive_dir) >= 0: + print '(pid %s)' % pid, + found = True + if not found: + print '(no process or summary.yaml)', + # tail + tail = os.popen( + 'tail -1 %s/%s/teuthology.log' % (archive_dir, job) + ).read().rstrip() + print tail, + except IOError: + pass + print '' diff --git a/teuthology/test/test_ls.py b/teuthology/test/test_ls.py new file mode 100644 index 0000000000..98475ff0fb --- /dev/null +++ b/teuthology/test/test_ls.py @@ -0,0 +1,46 @@ +import pytest + +from mock import patch, Mock + +from teuthology import ls + + +class TestLs(object): + """ Tests for teuthology.ls """ + + @patch('os.path.isdir') + @patch('os.listdir') + def test_get_jobs(self, m_listdir, m_isdir): + m_listdir.return_value = ["1", "a", "3"] + m_isdir.return_value = True + results = ls.get_jobs("some/archive/dir") + assert results == ["1", "3"] + + @patch("yaml.safe_load_all") + @patch("__builtin__.file") + @patch("teuthology.ls.get_jobs") + def test_ls(self, m_get_jobs, m_file, m_safe_load_all): + m_get_jobs.return_value = ["1", "2"] + m_safe_load_all.return_value = [{"failure_reason": "reasons"}] + ls.ls("some/archive/div", True) + + @patch("__builtin__.file") + @patch("teuthology.ls.get_jobs") + def test_ls_ioerror(self, m_get_jobs, m_file): + m_get_jobs.return_value = ["1", "2"] + m_file.side_effect = IOError() + with pytest.raises(IOError): + ls.ls("some/archive/dir", True) + + @patch("__builtin__.open") + @patch("os.popen") + @patch("os.path.isdir") + @patch("os.path.isfile") + def test_print_debug_info(self, m_isfile, m_isdir, m_popen, m_open): + m_isfile.return_value = True + m_isdir.return_value = True + m_popen.return_value = Mock() + cmdline = Mock() + cmdline.find.return_value = True + m_open.return_value = cmdline + ls.print_debug_info("the_job", "job/dir", "some/archive/dir")