--- a/Allura/allura/tests/unit/test_repo.py
+++ b/Allura/allura/tests/unit/test_repo.py
@@ -288,15 +288,40 @@
         commit.get_tree.assert_called_with(create=True)
 
 
-@patch('allura.model.repository.Popen')
-@patch('allura.model.repository.tg')
-def test_zipdir(tg, popen):
-    tg.config = {'scm.repos.tarball.zip_binary': '/bin/zip'}
-    src = '/fake/path/to/repo'
-    zipfile = '/fake/zip/file.tmp'
-    zipdir(src, zipfile)
-    popen.assert_called_once_with(['/bin/zip', '-r', zipfile, 'repo'], cwd='/fake/path/to')
-    popen.reset_mock()
-    src = '/fake/path/to/repo/'
-    zipdir(src, zipfile, exclude='file.txt')
-    popen.assert_called_once_with(['/bin/zip', '-r', zipfile, 'repo', '-x', 'file.txt'], cwd='/fake/path/to')
+class TestZipDir(unittest.TestCase):
+    @patch('allura.model.repository.Popen')
+    @patch('allura.model.repository.tg')
+    def test_popen_called(self, tg, popen):
+        from subprocess import PIPE
+        popen.return_value.communicate.return_value = 1, 2
+        popen.return_value.returncode = 0
+        tg.config = {'scm.repos.tarball.zip_binary': '/bin/zip'}
+        src = '/fake/path/to/repo'
+        zipfile = '/fake/zip/file.tmp'
+        zipdir(src, zipfile)
+        popen.assert_called_once_with(['/bin/zip', '-r', zipfile, 'repo'],
+                cwd='/fake/path/to', stdout=PIPE, stderr=PIPE)
+        popen.reset_mock()
+        src = '/fake/path/to/repo/'
+        zipdir(src, zipfile, exclude='file.txt')
+        popen.assert_called_once_with(
+                ['/bin/zip', '-r', zipfile, 'repo', '-x', 'file.txt'],
+                cwd='/fake/path/to', stdout=PIPE, stderr=PIPE)
+
+    @patch('allura.model.repository.Popen')
+    @patch('allura.model.repository.tg')
+    def test_exception_logged(self, tg, popen):
+        tg.config = {'scm.repos.tarball.zip_binary': '/bin/zip'}
+        popen.return_value.communicate.return_value = 1, 2
+        popen.return_value.returncode = 1
+        src = '/fake/path/to/repo'
+        zipfile = '/fake/zip/file.tmp'
+        with self.assertRaises(Exception) as cm:
+            zipdir(src, zipfile)
+        emsg = str(cm.exception)
+        self.assertTrue(
+                "Command: "
+                "['/bin/zip', '-r', '/fake/zip/file.tmp', 'repo'] "
+                "returned non-zero exit code 1" in emsg)
+        self.assertTrue("STDOUT: 1" in emsg)
+        self.assertTrue("STDERR: 2" in emsg)