From e1e291e35cec6097a89e8113d72447aa7ed6d04e Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Thu, 26 Feb 2015 09:49:49 -0800 Subject: [PATCH] Bug 1132771 - Add a test for reading all moz.build files in filesystem traversal mode; r=glandium moz.build files should execute in filesystem traversal mode. Add a test that verifies this is true. This test performs a brute force filesystem scan to find relevant moz.build files. This can be a little slow. That's unfortunate. But it's a price we need to pay in order to ensure metadata extraction mode continues to work. --HG-- extra : rebase_source : 1b8a7110505a9b196b9b349103b581d2aeb8ddbe --- config/moz.build | 1 + config/tests/test_mozbuild_reading.py | 44 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 config/tests/test_mozbuild_reading.py diff --git a/config/moz.build b/config/moz.build index 9e6ab581bc6f..b165e7f430c0 100644 --- a/config/moz.build +++ b/config/moz.build @@ -30,6 +30,7 @@ if CONFIG['MOZ_SHARED_ICU']: DEFINES['MOZ_SHARED_ICU'] = True PYTHON_UNIT_TESTS += [ + 'tests/test_mozbuild_reading.py', 'tests/unit-expandlibs.py', 'tests/unit-mozunit.py', 'tests/unit-nsinstall.py', diff --git a/config/tests/test_mozbuild_reading.py b/config/tests/test_mozbuild_reading.py new file mode 100644 index 000000000000..c323711d0309 --- /dev/null +++ b/config/tests/test_mozbuild_reading.py @@ -0,0 +1,44 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +from __future__ import unicode_literals + +import os +import unittest + +from mozunit import main + +from mozbuild.base import MozbuildObject +from mozbuild.frontend.reader import BuildReader + + +class TestMozbuildReading(unittest.TestCase): + # This hack is needed to appease running in automation. + def setUp(self): + self._old_env = dict(os.environ) + os.environ.pop('MOZCONFIG', None) + os.environ.pop('MOZ_OBJDIR', None) + + def tearDown(self): + os.environ.clear() + os.environ.update(self._old_env) + + def test_filesystem_traversal_reading(self): + """Reading moz.build according to filesystem traversal works. + + We attempt to read every known moz.build file via filesystem traversal. + + If this test fails, it means that metadata extraction will fail. + """ + mb = MozbuildObject.from_environment(detect_virtualenv_mozinfo=False) + config = mb.config_environment + reader = BuildReader(config) + all_paths = set(reader.all_mozbuild_paths()) + paths, contexts = reader.read_relevant_mozbuilds(all_paths) + self.assertEqual(set(paths), all_paths) + self.assertGreaterEqual(len(contexts), len(paths)) + + +if __name__ == '__main__': + main()