]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
adding tests for teuthology.ls, coverage now at 88% 360/head
authorAndrew Schoen <aschoen@redhat.com>
Tue, 25 Nov 2014 22:22:20 +0000 (16:22 -0600)
committerAndrew Schoen <aschoen@redhat.com>
Tue, 25 Nov 2014 22:22:20 +0000 (16:22 -0600)
Signed-off-by: Andrew Schoen <aschoen@redhat.com>
teuthology/ls.py
teuthology/test/test_ls.py [new file with mode: 0644]

index 3b15efbc3fcd5020dba7b95812c9434634f21819..e78d5c85338675b192c253417ead5a4d9e2a128e 100644 (file)
@@ -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 (file)
index 0000000..98475ff
--- /dev/null
@@ -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")