Bug 1291643 - Test cleanup after running (possibly empty) manifest; r?whimboo draft
authorAnjana Vakil <anjanavakil@gmail.com>
Fri, 05 Aug 2016 19:40:07 +0200
changeset 397370 4ca17eed4a92820ff1f56c2ad8fb79be723ee8db
parent 396555 1576e7bc1bec7232e9e4ba78cce62526b1a6380b
child 527437 a104ea9157b3caecbfd56cee1ed016dea078b9fd
push id25277
push useranjanavakil@gmail.com
push dateFri, 05 Aug 2016 18:39:43 +0000
reviewerswhimboo
bugs1291643
milestone51.0a1
Bug 1291643 - Test cleanup after running (possibly empty) manifest; r?whimboo Add tests to make sure that if an empty or nonempty manifest is run, Marionette/Firefox are shut down as expected (previous behavior was that the Marionette cleanup was never reached in this scenario). MozReview-Commit-ID: 5hlUd0GQAQR
testing/marionette/harness/marionette/tests/harness_unit/test_marionette_runner.py
--- a/testing/marionette/harness/marionette/tests/harness_unit/test_marionette_runner.py
+++ b/testing/marionette/harness/marionette/tests/harness_unit/test_marionette_runner.py
@@ -395,16 +395,40 @@ def test_add_test_manifest(runner):
     for test in runner.tests:
         assert test['filepath'].endswith(('test_expected_pass.py', 'test_expected_fail.py'))
         if test['filepath'].endswith('test_expected_fail.py'):
             assert test['expected'] == 'fail'
         else:
             assert test['expected'] == 'pass'
 
 
+def test_cleanup_with_manifest(mock_runner):
+    mock_runner._appName = 'fake_app'
+    with patch.multiple('marionette.runner.base.TestManifest',
+                        read=DEFAULT, active_tests=DEFAULT) as mocks:
+        mocks['active_tests'].return_value = [{'expected':'pass', 'path':'test_something.py'}]
+        with patch('marionette.runner.base.mozversion.get_version'):
+            with patch('marionette.runner.base.os.path.exists', return_value=True):
+                mock_runner.run_tests(['fake_manifest.ini'])
+    assert mock_runner.marionette is None
+    assert mock_runner.httpd is None
+
+def test_cleanup_empty_manifest(mock_runner):
+    mock_runner._appName = 'fake_app'
+    with patch.multiple('marionette.runner.base.TestManifest',
+                        read=DEFAULT, active_tests=DEFAULT) as mocks:
+        mocks['active_tests'].return_value = []
+        with patch('marionette.runner.base.mozversion.get_version'):
+            with pytest.raises(Exception) as exc:
+                mock_runner.run_tests(['fake_empty_manifest.ini'])
+    assert "no tests to run" in exc.value.message
+    assert mock_runner.marionette is None
+    assert mock_runner.httpd is None
+
+
 def test_reset_test_stats(runner):
     def reset_successful(runner):
         stats = ['passed', 'failed', 'unexpected_successes', 'todo', 'skipped', 'failures']
         return all([((s in vars(runner)) and (not vars(runner)[s])) for s in stats])
     assert reset_successful(runner)
     runner.passed = 1
     runner.failed = 1
     runner.failures.append(['TEST-UNEXPECTED-FAIL'])