def test_PackageRequestForReleng(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Package') }) helper.add_input_file('/ws/gromacs/admin/builds/get-version-info.py', 'def do_build(context):\n context.set_version_info("2017", "1234567890abcdef")\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual(result, { 'builds': [ { 'type': 'source-package' }, { 'type': 'regtest-package', 'version': '2017', 'md5sum': '1234567890abcdef' } ], 'revisions': commits.expected_build_revisions })
def test_CrossVerifyRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, change_number=3456, patch_number=3) commits.set_commit(Project.REGRESSIONTESTS, change_number=1234, patch_number=5) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'BUILD_URL': 'http://build', 'GERRIT_PROJECT': 'gromacs', 'GERRIT_REFSPEC': commits.gromacs.refspec, 'GERRIT_CHANGE_URL': 'http://gerrit', 'GERRIT_PATCHSET_NUMBER': commits.gromacs.patch_number, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Cross-verify 1234'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual(result, { 'builds': [ { 'type': 'matrix', 'desc': 'cross-verify', 'matrix': self._MATRIX_EXPECTED_RESULT } ], 'revisions': commits.expected_build_revisions, 'gerrit_info': { 'change': commits.regressiontests.change_number, 'patchset': commits.regressiontests.patch_number } }) helper.assertCommandInvoked(['ssh', '-p', '29418', '*****@*****.**', 'gerrit', 'review', '1234,5', '-m', '"Cross-verify with http://gerrit (patch set 3) running at http://build"'])
def test_CrossVerifyRequestReleng(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, change_number=1234) commits.set_commit(Project.REGRESSIONTESTS) commits.set_commit(Project.RELENG, change_number=3456) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'BUILD_URL': 'http://build', 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_CHANGE_URL': 'http://gerrit', 'GERRIT_PATCHSET_NUMBER': commits.releng.patch_number, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Cross-verify 1234 quiet'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual(result, { 'builds': [ { 'type': 'matrix', 'desc': 'cross-verify', 'matrix': self._MATRIX_EXPECTED_RESULT }, { 'type': 'clang-analyzer', 'desc': 'cross-verify' }, { 'type': 'documentation', 'desc': 'cross-verify' }, { 'type': 'uncrustify', 'desc': 'cross-verify' } ], 'revisions': commits.expected_build_revisions })
class TestBuildScript(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_EmptyScript(self): executor = self.helper.executor self.helper.add_input_file( 'build.py', """\ def do_build(context): pass """) script = BuildScript(executor, 'build.py') self.assertEqual(script.settings.build_opts, []) self.assertFalse(script.settings.build_out_of_source) self.assertEqual(script.settings.extra_projects, []) def test_SetGlobals(self): executor = self.helper.executor self.helper.add_input_file( 'build.py', """\ build_options = ['foo', 'bar'] build_out_of_source = True extra_projects = [Project.REGRESSIONTESTS] use_stdlib_through_env_vars = False def do_build(context): pass """) script = BuildScript(executor, 'build.py') self.assertEqual(script.settings.build_opts, ['foo', 'bar']) self.assertTrue(script.settings.build_out_of_source) self.assertEqual(script.settings.extra_projects, [Project.REGRESSIONTESTS]) self.assertFalse(script.settings.use_stdlib_through_env_vars)
def test_ReleaseBranchRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, branch='release-2016') commits.set_commit(Project.REGRESSIONTESTS, branch='release-2016') commits.set_commit(Project.RELENG, change_number=1234) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] release-2016'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual(result, { 'builds': [ { 'type': 'matrix', 'desc': 'release-2016', 'matrix': self._MATRIX_EXPECTED_RESULT }, { 'type': 'clang-analyzer', 'desc': 'release-2016' }, { 'type': 'documentation', 'desc': 'release-2016' }, { 'type': 'uncrustify', 'desc': 'release-2016' } ], 'revisions': commits.expected_build_revisions })
def test_CrossVerifyRequestQuiet(self): helper = TestHelper(self, workspace='ws', env={ 'BUILD_URL': 'http://build', 'GERRIT_PROJECT': 'gromacs', 'GERRIT_CHANGE_URL': 'http://gerrit', 'GERRIT_PATCHSET_NUMBER': '3', 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Cross-verify 1234 quiet') }) input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'msvc-2013' ] helper.add_input_file('ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(input_lines) + '\n') factory = helper.factory executor = helper.executor get_actions_from_triggering_comment(factory, 'actions.json') helper.assertOutputJsonFile('ws/build/actions.json', { 'builds': [ { 'type': 'matrix', 'desc': 'cross-verify', 'options': '"{0} host=bs_nix1310" "{1} host=bs-win2012r2"'.format(*[x.strip() for x in input_lines]) } ], 'env': { 'REGRESSIONTESTS_REFSPEC': 'refs/changes/34/1234/5', 'REGRESSIONTESTS_HASH': '1234567890abcdef0123456789abcdef01234567' } })
class TestReadBuildScriptConfig(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_ClangAnalyzer(self): self.helper.add_input_file( 'script/build.py', """\ build_options = ['clang-3.8', 'clang-static-analyzer-3.8'] def do_build(context): pass """) result = BuildContext._read_build_script_config( self.helper.factory, 'script/build.py') self.assertEqual( result, { 'opts': ['clang-3.8', 'clang-static-analyzer-3.8'], 'host': 'bs_nix-static_analyzer', 'labels': 'clang-3.8 && clang-static-analyzer-3.8' }) def test_CudaGpuBuild(self): self.helper.add_input_file( 'script/build.py', """\ build_options = [ 'gcc-4.9', 'cuda-9.0', 'gpuhw=nvidia' ] def do_build(context): pass """) result = BuildContext._read_build_script_config( self.helper.factory, 'script/build.py') self.assertEqual( result, { 'opts': ['gcc-4.9', 'cuda-9.0', 'gpuhw=nvidia'], 'host': 'bs_nix1310', 'labels': 'cuda-9.0 && gcc-4.9 && nvidia' })
class TestReadBuildScriptConfig(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_ClangAnalyzer(self): self.helper.add_input_file('script/build.py', """\ build_options = ['clang-3.8', 'clang-static-analyzer-3.8'] def do_build(context): pass """) result = BuildContext._read_build_script_config(self.helper.factory, 'script/build.py') self.assertEqual(result, { 'opts': ['clang-3.8', 'clang-static-analyzer-3.8'], 'host': 'bs_nix-static_analyzer', 'labels': 'clang-3.8 && clang-static-analyzer-3.8' }) def test_CudaGpuBuild(self): self.helper.add_input_file('script/build.py', """\ build_options = [ 'gcc-4.9', 'cuda-9.0', 'gpuhw=nvidia' ] def do_build(context): pass """) result = BuildContext._read_build_script_config(self.helper.factory, 'script/build.py') self.assertEqual(result, { 'opts': [ 'gcc-4.9', 'cuda-9.0', 'gpuhw=nvidia' ], 'host': 'bs_nix1310', 'labels': 'cuda-9.0 && gcc-4.9 && nvidia' })
def test_ReleaseBranchRequest(self): helper = TestHelper(self, workspace='ws', env={ 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] release-2016') }) input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'msvc-2013' ] helper.add_input_file('ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(input_lines) + '\n') factory = helper.factory executor = helper.executor get_actions_from_triggering_comment(factory, 'actions.json') self.maxDiff = None helper.assertOutputJsonFile('ws/build/actions.json', { 'builds': [ { 'type': 'matrix', 'desc': 'release-2016', 'options': '"{0} host=bs_nix1310" "{1} host=bs-win2012r2"'.format(*[x.strip() for x in input_lines]) }, { 'type': 'clang-analyzer', 'desc': 'release-2016' }, { 'type': 'cppcheck', 'desc': 'release-2016' }, { 'type': 'documentation', 'desc': 'release-2016' }, { 'type': 'uncrustify', 'desc': 'release-2016' } ], 'env': { 'GROMACS_REFSPEC': 'refs/heads/release-2016', 'GROMACS_HASH': '1234567890abcdef0123456789abcdef01234567', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/release-2016', 'REGRESSIONTESTS_HASH': '1234567890abcdef0123456789abcdef01234567' } })
def test_PackageRequestForReleng(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Package') }) helper.add_input_file( '/ws/gromacs/admin/builds/get-version-info.py', 'def do_build(context):\n context.set_version_info("2017", "1234567890abcdef")\n' ) factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual( result, { 'builds': [{ 'type': 'source-package' }, { 'type': 'regtest-package', 'version': '2017', 'md5sum': '1234567890abcdef' }], 'revisions': commits.expected_build_revisions })
class TestPrepareBuildMatrix(unittest.TestCase): def setUp(self): self.helper = TestHelper(self, workspace='/ws') def test_PrepareBuildMatrix(self): factory = self.helper.factory executor = self.helper.executor input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'msvc-2013' ] self.helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(input_lines) + '\n') result = prepare_build_matrix(factory, 'pre-submit-matrix') self.assertEqual(result, { "configs": [ { "host": "bs_nix1310", "labels": "cuda-5.0 && gcc-4.6", "opts": ["gcc-4.6", "gpu", "cuda-5.0"] }, { "host": "bs-win2012r2", "labels": "msvc-2013", "opts": ["msvc-2013"] } ], "as_axis": '"{0} host=bs_nix1310" "{1} host=bs-win2012r2"'.format(*[x.strip() for x in input_lines]) })
class TestBuildScript(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_EmptyScript(self): executor = self.helper.executor self.helper.add_input_file('build.py', """\ def do_build(context): pass """); script = BuildScript(executor, 'build.py') self.assertEqual(script.build_opts, []) self.assertFalse(script.build_out_of_source) self.assertEqual(script.extra_projects, []) def test_SetGlobals(self): executor = self.helper.executor self.helper.add_input_file('build.py', """\ build_options = ['foo', 'bar'] build_out_of_source = True extra_projects = [Project.REGRESSIONTESTS] def do_build(context): pass """); script = BuildScript(executor, 'build.py') self.assertEqual(script.build_opts, ['foo', 'bar']) self.assertTrue(script.build_out_of_source) self.assertEqual(script.extra_projects, [Project.REGRESSIONTESTS])
def test_PostSubmitRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Post-submit') }) helper.add_input_file( '/ws/gromacs/admin/builds/post-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual( result, { 'builds': [{ 'type': 'matrix', 'desc': 'post-submit', 'matrix': self._MATRIX_EXPECTED_RESULT }], 'revisions': commits.expected_build_revisions })
class TestRunBuild(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_NoOptions(self): self.helper.add_input_file( 'script/build.py', """\ def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None) def test_ScriptOptions(self): self.helper.add_input_file( 'script/build.py', """\ build_options = ['gcc-4.8'] def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None) def test_MixedOptions(self): self.helper.add_input_file( 'script/build.py', """\ build_options = ['gcc-4.8'] def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, ['build-jobs=3']) def test_ExtraOptions(self): self.helper.add_input_file( 'script/build.py', """\ TestEnum = Enum.create('TestEnum', 'foo', 'bar') extra_options = { 'extra': Option.simple, 'enum': Option.enum(TestEnum) } def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, ['extra', 'enum=foo']) def test_Parameters(self): self.helper.add_input_file( 'script/build.py', """\ def do_build(context): context.params.get('PARAM', Parameter.bool) """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None)
class TestRunBuild(unittest.TestCase): def setUp(self): self.helper = TestHelper(self, workspace='/ws') def test_NoOptions(self): self.helper.add_input_file('script/build.py', """\ def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None) def test_ScriptOptions(self): self.helper.add_input_file('script/build.py', """\ build_options = ['gcc-4.8'] def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None) def test_MixedOptions(self): self.helper.add_input_file('script/build.py', """\ build_options = ['gcc-4.8'] def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, ['build-jobs=3']) def test_ExtraOptions(self): self.helper.add_input_file('script/build.py', """\ TestEnum = Enum.create('TestEnum', 'foo', 'bar') extra_options = { 'extra': Option.simple, 'enum': Option.enum(TestEnum) } def do_build(context): pass """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, ['extra', 'enum=foo']) def test_Parameters(self): self.helper.add_input_file('script/build.py', """\ def do_build(context): context.params.get('PARAM', Parameter.bool) """) BuildContext._run_build(self.helper.factory, 'script/build.py', JobType.GERRIT, None)
def test_TarballRef(self): helper = TestHelper(self) helper.add_input_file('tarballs/gromacs/package-info.log', """\ PACKAGE_FILE_NAME = gromacs-xyz-dev.tar.gz HEAD_HASH = 1234abcd """) refspec = RefSpec('tarballs/gromacs', executor=helper.executor) self.assertFalse(refspec.is_no_op) self.assertTrue(refspec.is_tarball) self.assertFalse(refspec.is_static) self.assertEqual(refspec.tarball_path, 'tarballs/gromacs/gromacs-xyz-dev.tar.gz') self.assertEqual(str(refspec), 'tarballs/gromacs')
def test_TarballRef(self): helper = TestHelper(self) helper.add_input_file('tarballs/gromacs/package-info.log', """\ PACKAGE_FILE_NAME = gromacs-xyz-dev.tar.gz HEAD_HASH = 1234abcd """) refspec = RefSpec('tarballs/gromacs', executor=helper.executor) self.assertFalse(refspec.is_no_op) self.assertTrue(refspec.is_tarball) self.assertFalse(refspec.is_static) self.assertEqual(refspec.tarball_path, 'tarballs/gromacs/gromacs-xyz-dev.tar.gz') self.assertEqual(str(refspec), 'tarballs/gromacs')
def test_CrossVerifyRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, change_number=3456, patch_number=3) commits.set_commit(Project.REGRESSIONTESTS, change_number=1234, patch_number=5) commits.set_commit(Project.RELENG) helper = TestHelper( self, commits=commits, workspace='/ws', env={ 'BUILD_URL': 'http://build', 'GERRIT_PROJECT': 'gromacs', 'GERRIT_REFSPEC': commits.gromacs.refspec, 'GERRIT_CHANGE_URL': 'http://gerrit', 'GERRIT_PATCHSET_NUMBER': commits.gromacs.patch_number, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Cross-verify 1234'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual( result, { 'builds': [{ 'type': 'matrix', 'desc': 'cross-verify', 'matrix': self._MATRIX_EXPECTED_RESULT }], 'revisions': commits.expected_build_revisions, 'gerrit_info': { 'change': commits.regressiontests.change_number, 'patchset': commits.regressiontests.patch_number } }) helper.assertCommandInvoked([ 'ssh', '-p', '29418', '*****@*****.**', 'gerrit', 'review', '1234,5', '-m', '"Cross-verify with http://gerrit (patch set 3) running at http://build"' ])
class TestReadCmakeVariableFile(unittest.TestCase): def setUp(self): self.helper = TestHelper(self, workspace='/ws') def test_ReadFile(self): self.helper.add_input_file('Test.cmake', """\ set(FOO "1") set(BAR "2") """) context = self.helper.factory.create_context(JobType.GERRIT, None, None) result = context.read_cmake_variable_file('Test.cmake') self.assertEqual(result, { 'FOO': '1', 'BAR': '2' })
def test_TarballsWithManualTrigger(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, env={ 'GROMACS_REFSPEC': 'tarballs/gromacs', 'RELENG_REFSPEC': 'refs/heads/master' }) helper.add_input_file('tarballs/gromacs/package-info.log', """\ HEAD_HASH = 1234abcd """) projects = helper.factory.projects self.verifyProjectInfo(projects, commits, tarball=Project.GROMACS)
class TestPrepareBuildMatrix(unittest.TestCase): def setUp(self): self.helper = TestHelper(self, workspace='ws') def test_PrepareBuildMatrix(self): factory = self.helper.factory executor = self.helper.executor input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'clang-3.4 no-openmp asan', 'msvc-2013', 'msvc-2015 icc-16.0' ] self.helper.add_input_file('ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(input_lines) + '\n') prepare_build_matrix(factory, 'pre-submit-matrix', 'matrix.txt') self.assertEqual(executor.method_calls, [ mock.call.ensure_dir_exists('ws/build', ensure_empty=True), mock.call.read_file('ws/gromacs/admin/builds/pre-submit-matrix.txt'), mock.call.write_file('ws/build/matrix.txt', 'OPTIONS "{0} host=bs_nix1310" "{1} host=bs_nix-amd" "{2} host=bs-win2012r2" "{3} host=bs-win2012r2"\n'.format(*[x.strip() for x in input_lines])) ]) def test_PrepareBuildMatrixJson(self): factory = self.helper.factory executor = self.helper.executor input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'msvc-2013' ] self.helper.add_input_file('ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(input_lines) + '\n') prepare_build_matrix(factory, 'pre-submit-matrix', 'matrix.json') self.helper.assertOutputJsonFile('ws/build/matrix.json', [ { "host": "bs_nix1310", "labels": "cuda-5.0 && gcc-4.6", "opts": ["gcc-4.6", "gpu", "cuda-5.0"] }, { "host": "bs-win2012r2", "labels": "msvc-2013", "opts": ["msvc-2013"] } ]) self.assertEqual(executor.method_calls, [ mock.call.ensure_dir_exists('ws/build', ensure_empty=True), mock.call.read_file('ws/gromacs/admin/builds/pre-submit-matrix.txt'), mock.call.write_file('ws/build/matrix.json', mock.ANY) ])
def test_TarballsWithManualTrigger(self): helper = TestHelper(self, env={ 'CHECKOUT_PROJECT': 'releng', 'CHECKOUT_REFSPEC': 'refs/heads/master', 'GROMACS_REFSPEC': 'tarballs/gromacs', 'RELENG_REFSPEC': 'refs/heads/master' }) helper.add_input_file('tarballs/gromacs/package-info.log', """\ HEAD_HASH = 1234abcd """) gerrit = helper.factory.gerrit self.assertEqual(gerrit.checked_out_project, Project.RELENG) self.assertTrue(gerrit.get_refspec(Project.GROMACS).is_tarball) self.assertEqual(gerrit.get_refspec(Project.RELENG).fetch, 'refs/heads/master')
def test_CrossVerifyRequestReleng(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, change_number=1234) commits.set_commit(Project.REGRESSIONTESTS) commits.set_commit(Project.RELENG, change_number=3456) helper = TestHelper( self, commits=commits, workspace='/ws', env={ 'BUILD_URL': 'http://build', 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_CHANGE_URL': 'http://gerrit', 'GERRIT_PATCHSET_NUMBER': commits.releng.patch_number, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Cross-verify 1234 quiet'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual( result, { 'builds': [{ 'type': 'matrix', 'desc': 'cross-verify', 'matrix': self._MATRIX_EXPECTED_RESULT }, { 'type': 'clang-analyzer', 'desc': 'cross-verify' }, { 'type': 'documentation', 'desc': 'cross-verify' }, { 'type': 'uncrustify', 'desc': 'cross-verify' }], 'revisions': commits.expected_build_revisions })
class TestReadCmakeVariableFile(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) def test_ReadFile(self): self.helper.add_input_file( 'Test.cmake', """\ set(FOO "1") set(BAR "2") """) context = self.helper.factory.create_context(JobType.GERRIT, None, None) result = context.read_cmake_variable_file('Test.cmake') self.assertEqual(result, {'FOO': '1', 'BAR': '2'})
class TestReadBuildScriptConfig(unittest.TestCase): def setUp(self): self.helper = TestHelper(self, workspace='/ws') def test_ClangAnalyzer(self): self.helper.add_input_file('script/build.py', """\ build_options = ['clang-3.8', 'clang-static-analyzer-3.8'] def do_build(context): pass """) BuildContext._read_build_script_config(self.helper.factory, 'script/build.py', 'config.json') self.helper.assertOutputJsonFile('/ws/build/config.json', { 'opts': ['clang-3.8', 'clang-static-analyzer-3.8'], 'host': 'bs_nix-static_analyzer', 'labels': 'clang-3.8 && clang-static-analyzer-3.8' })
def test_ReleaseBranchRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS, branch='release-2016') commits.set_commit(Project.REGRESSIONTESTS, branch='release-2016') commits.set_commit(Project.RELENG, change_number=1234) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_PROJECT': 'releng', 'GERRIT_REFSPEC': commits.releng.refspec, 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] release-2016'), 'GROMACS_REFSPEC': 'refs/heads/master', 'REGRESSIONTESTS_REFSPEC': 'refs/heads/master' }) helper.add_input_file('/ws/gromacs/admin/builds/pre-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual( result, { 'builds': [{ 'type': 'matrix', 'desc': 'release-2016', 'matrix': self._MATRIX_EXPECTED_RESULT }, { 'type': 'clang-analyzer', 'desc': 'release-2016' }, { 'type': 'documentation', 'desc': 'release-2016' }, { 'type': 'uncrustify', 'desc': 'release-2016' }], 'revisions': commits.expected_build_revisions })
def test_PostSubmitRequest(self): commits = RepositoryTestState() commits.set_commit(Project.GROMACS) commits.set_commit(Project.RELENG) helper = TestHelper(self, commits=commits, workspace='/ws', env={ 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Post-submit') }) helper.add_input_file('/ws/gromacs/admin/builds/post-submit-matrix.txt', '\n'.join(self._MATRIX_INPUT_LINES) + '\n') factory = helper.factory result = get_actions_from_triggering_comment(factory) self.assertEqual(result, { 'builds': [ { 'type': 'matrix', 'desc': 'post-submit', 'matrix': self._MATRIX_EXPECTED_RESULT } ], 'revisions': commits.expected_build_revisions })
def test_PostSubmitRequest(self): helper = TestHelper(self, workspace='ws', env={ 'GERRIT_EVENT_COMMENT_TEXT': base64.b64encode('[JENKINS] Post-submit') }) input_lines = [ 'gcc-4.6 gpu cuda-5.0', 'msvc-2013' ] helper.add_input_file('ws/gromacs/admin/builds/post-submit-matrix.txt', '\n'.join(input_lines) + '\n') factory = helper.factory executor = helper.executor get_actions_from_triggering_comment(factory, 'actions.json') helper.assertOutputJsonFile('ws/build/actions.json', { 'builds': [ { 'type': 'matrix', 'desc': 'post-submit', 'options': '"{0} host=bs_nix1310" "{1} host=bs-win2012r2"'.format(*[x.strip() for x in input_lines]) } ] })
class TestRunBuild(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) self.helper.add_input_file("Testing/TAG", """\ YYYYMMDD-HHMM Experimental """) def test_CTestSuccess(self): self.helper.add_input_file("Testing/YYYYMMDD-HHMM/Test.xml", """\ <Site> <Testing> <Test Status="passed"> <Name>Test1</Name> <Results> <NamedMeasurement name="Execution Time"> <Value>0.1</Value> </NamedMeasurement> <Measurement> <Value>some output</Value> </Measurement> </Results> </Test> </Testing> </Site> """) process_ctest_xml(self.helper.executor, memcheck=False) self.helper.assertOutputFile("Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest"><testcase classname="CTest" name="Test1" time="0.1"><system-out>some output</system-out></testcase></testsuite></testsuites>""") def test_CTestFailure(self): self.helper.add_input_file("Testing/YYYYMMDD-HHMM/Test.xml", """\ <Site> <Testing> <Test Status="failed"> <Name>Test1</Name> <Results> <NamedMeasurement name="Exit Code"> <Value>Failed</Value> </NamedMeasurement> <NamedMeasurement name="Execution Time"> <Value>0.1</Value> </NamedMeasurement> <Measurement> <Value>some output</Value> </Measurement> </Results> </Test> </Testing> </Site> """) process_ctest_xml(self.helper.executor, memcheck=False) self.helper.assertOutputFile("Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest"><testcase classname="CTest" name="Test1" time="0.1"><failure message="Failed" /><system-out>some output</system-out></testcase></testsuite></testsuites>""") def test_CTestAsanFailure(self): self.helper.add_input_file("Testing/YYYYMMDD-HHMM/DynamicAnalysis.xml", """\ <Site> <DynamicAnalysis> <Test Status="failed"> <Name>Test1</Name> <Results> <Defect type="SEGV">1</Defect> </Results> <Log>some output</Log> </Test> </DynamicAnalysis> </Site> """) process_ctest_xml(self.helper.executor, memcheck=True) self.helper.assertOutputFile("Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest_MemCheck"><testcase classname="CTest_MemCheck" name="Test1"><failure message="SEGV" /><system-out>some output</system-out></testcase></testsuite></testsuites>""")
class TestRunBuild(unittest.TestCase): def setUp(self): self.helper = TestHelper(self) self.helper.add_input_file( "Testing/TAG", """\ YYYYMMDD-HHMM Experimental """) def test_CTestSuccess(self): self.helper.add_input_file( "Testing/YYYYMMDD-HHMM/Test.xml", """\ <Site> <Testing> <Test Status="passed"> <Name>Test1</Name> <Results> <NamedMeasurement name="Execution Time"> <Value>0.1</Value> </NamedMeasurement> <Measurement> <Value>some output</Value> </Measurement> </Results> </Test> </Testing> </Site> """) process_ctest_xml(self.helper.executor, memcheck=False) self.helper.assertOutputFile( "Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest"><testcase classname="CTest" name="Test1" time="0.1"><system-out>some output</system-out></testcase></testsuite></testsuites>""" ) def test_CTestFailure(self): self.helper.add_input_file( "Testing/YYYYMMDD-HHMM/Test.xml", """\ <Site> <Testing> <Test Status="failed"> <Name>Test1</Name> <Results> <NamedMeasurement name="Exit Code"> <Value>Failed</Value> </NamedMeasurement> <NamedMeasurement name="Execution Time"> <Value>0.1</Value> </NamedMeasurement> <Measurement> <Value>some output</Value> </Measurement> </Results> </Test> </Testing> </Site> """) process_ctest_xml(self.helper.executor, memcheck=False) self.helper.assertOutputFile( "Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest"><testcase classname="CTest" name="Test1" time="0.1"><failure message="Failed" /><system-out>some output</system-out></testcase></testsuite></testsuites>""" ) def test_CTestAsanFailure(self): self.helper.add_input_file( "Testing/YYYYMMDD-HHMM/DynamicAnalysis.xml", """\ <Site> <DynamicAnalysis> <Test Status="failed"> <Name>Test1</Name> <Results> <Defect type="SEGV">1</Defect> </Results> <Log>some output</Log> </Test> </DynamicAnalysis> </Site> """) process_ctest_xml(self.helper.executor, memcheck=True) self.helper.assertOutputFile( "Testing/Temporary/CTest.xml", """\ <testsuites><testsuite name="CTest_MemCheck"><testcase classname="CTest_MemCheck" name="Test1"><failure message="SEGV" /><system-out>some output</system-out></testcase></testsuite></testsuites>""" )