Example #1
0
 def test_jobs_incorrect(self):
     self.jmake_ci_jobs(Mock(job_name = ['NONEXISTINGJOB']), self.executor)
     self.assertEqual(len(self.executor), 1)
     allowed_jobs_info_closure = self.executor[0]
     logger = Mock()
     allowed_jobs_info_closure(logger)
     self.assertTrue(logger.verify_error('The only allowed jobs are COMPILE FUNCxx FUNCUNIT UALINT'))
Example #2
0
 def test_mock_expect_when_ordered_used_before(self):
     m = Mock()
     m.ordered_exec('first', toReturn='first result')
     try:
         m.expect_exec('second', toReturn='second result')
     except InvalidStateException as e:
         message = e.args[0]
         self.assertEqual('Cannot use ordered method with non-ordered!', message)
Example #3
0
    def test_using_developer_connection(self):
        scm_header = 'scm:git:'
        myserver = 'bitbucket.wonderland.universe.com'

        pom_parser = Mock()
        pom_parser.expect_get_developer_connection(toReturn=(scm_header + myserver))

        self.ehmetrics.set_remote(Mock(), pom_parser=pom_parser)
        self.assertTrue(self.git.verify_set_remote('origin', myserver))
Example #4
0
    def test_members(self):

        m = Mock(member1 = 10, member2 = 'abc')
        m.another_member = []
        setattr(m, 'set_member', True)

        self.assertEqual(m.member1, 10)
        self.assertEqual(m.member2, 'abc')
        self.assertListEqual(m.another_member, [])
        self.assertEqual(m.set_member, True)
    def test_findbugs_switch(self):
        process_utils = Mock()
        process_utils.default_check_output(b'Apache Maven: 3.0.5')
        self.jmake_ut = UnitTest(Mock(), process_utils=process_utils)
        self.jmake_ut(Mock(vdep=False, skip_bp=False, findbugs=True), self.executor)

        self.assertEqual(len(self.executor), 2)
        maven = self.executor[1]
        self.assertIn('verifyDependencies', maven.properties)
        self.assertIsInstance(maven.maven_version, Maven3)
        self.assertIn('findbugs', maven.profiles)
    def setUp(self):
        self.build_name = 'PROJ-ABUILD'
        self.build_number = '1234'
        self.url = Mock()
        self.xml = Mock()

        self.obj = JbacFailures(Mock(),
                                self.build_name,
                                self.build_number,
                                urlutils = self.url,
                                xml = self.xml,
                                auth = Mock(login = '******', password = '******'))
Example #7
0
    def test_default(self):

        m = Mock().default_is_prime(False)
        m.expect_primes(toReturn=[2, 3, 5, 7, 11, 13, 17, 19])
        for num in m.primes():
            m.expect_is_prime(num, toReturn=True)

        for num in range(20):
            self.assertEqual(m.is_prime(num), num in m.primes())
 def test_with_message_complex(self):
     metric = JunitAssertWithoutMessage('junit.assert.without.message',
                                        'junit assert test',
                                        metrics_logger=Mock()).configure(
                                            Mock(), False)
     metric.pre_files_scan('tests')
     self.assertTrue(metric.wants_file('foo.java'), 'Wants a java file')
     metric.on_read_line(
         'assertTrue(methodcall(with, multiple, parameters), true)')
     metric.on_read_line(
         'assertFalse(methodcall(foo, bar).build(woo, hoo), false)')
     self.assertEqual(0, metric.value, 'Should have no hits')
     metric.post_files_scan('tests')
Example #9
0
class TestJbacFailureDetection(TestCase):

    def setUp(self):
        self.build_name = 'PROJ-ABUILD'
        self.build_number = '1234'
        self.url = Mock()
        self.xml = Mock()

        self.obj = JbacFailures(Mock(),
                                self.build_name,
                                self.build_number,
                                urlutils = self.url,
                                xml = self.xml,
                                auth = Mock(login = '******', password = '******'))

    def test_extract_plan_name_from_stacktrace(self):

        name = self.obj._JbacFailures__extract_plan_name('Exception: something very $*#(@-3$*()#@-$#@ MY-JBAC-BUILD-4432: %$#*(%')
        self.assertEqual(name, 'MY-JBAC-BUILD-4432')

        name = self.obj._JbacFailures__extract_plan_name('THIS IS A JUST-ONE-PLAN-1111 \n MULTILINE \n STACKTRACE \n AND-WITH-PLAN-3333')
        self.assertEqual(name, 'JUST-ONE-PLAN-1111')

        name = self.obj._JbacFailures__extract_plan_name('SECOND LINE IS  \n NOT-ACTUALLY-VALID-3213 ')
        self.assertEqual(name, None)

        name = self.obj._JbacFailures__extract_plan_name('TEST-WITH-JUST-WORDS no-lower-case-323 TOO-MANY-TOKENS-DUDE-233 A-B-C-4')
        self.assertEqual(name, 'A-B-C-4')

    def test_url_contains_buildname_and_number(self):

        url = self.obj._JbacFailures__build_url()
        self.assertIn(self.build_name, url)
        self.assertIn(self.build_number, url)

    def test_detect_failures(self):

        datafile = os.sep.join(['.', 'jmake_src', 'testdata', 'bamboo-reply-01.xml'])
        try:
            with open(datafile, 'r') as f:
                text = f.read()
                self.url.expect_read(self.obj._JbacFailures__build_url(), 'login', 'pass', toReturn = text)
                self.xml.expect_parse_string(text, toReturn = XML.fromstring(text))
        except IOError:
            self.fail('Failed to access test data: ' + datafile)

        # run the test by invoking iterator on the object:
        results = [ tpl for tpl in self.obj ]

        self.assertIn( ('SPECIAL-BAMBOO-AGENT-9000', 'com.atlassian.my.class.failedTest'), results )
        self.assertIn( ('NOT-QUITE-SURE-2134', 'com.atlassian.not.my.class.anotherFail'), results )
    def test_execution_is_suppressed_when_jrebel_not_discovered(self):
        #having
        self.args.jrebel = True
        tomcat_starter = MockTomcatStarter(self.args, False, MockFileUtils().expect_possible_idea_plugin_dirs(toReturn=[]))
        log = Mock()
        #when
        return_code = tomcat_starter(log)

        #then
        self.assertEqual(return_code, Callable.do_not_proceed, 'Expected successful return code')

        self.assertTrue(log.callcount_error() > 0)
        # verify, that jrebel related error message was logged:
        self.assertTrue(reduce(lambda r, e: r or 'jrebel' in e, log.error.made_calls, False))
Example #11
0
    def test_java_imports_gives_up_on_class_def(self):
        obj = JavaPackageImports('test',
                                 'description',
                                 'util',
                                 metrics_logger=Mock()).configure(
                                     Mock(), False)

        obj.pre_files_scan('test-module')
        self.assertTrue(obj.wants_file(TestMetrics.hello_date_file))
        lastline = self.read_file(TestMetrics.hello_date_file, obj)
        obj.post_files_scan('test-module')

        self.assertIn('//marker', lastline)
        self.assertEqual(1, self.valueof(obj))
Example #12
0
    def test_file_count(self):
        filter = lambda x: 'teen' in x
        obj = FileCount('test', filter,
                        metrics_logger=Mock()).configure(Mock(), False)

        obj.pre_files_scan('test-module')
        for word, size in TestMetrics.numbers:
            self.assertFalse(obj.wants_file(word),
                             'File Count metrics cannot ask to open files.')
        obj.post_files_scan('test-module')

        self.assertEqual(
            sum(1 for word, size in TestMetrics.numbers if filter(word)),
            self.valueof(obj))
    def test_check_values_with_unchecked(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()

        git.expect_latest_annotated_commit_with_details(
            STATS_REF_NAME,
            toReturn={
                'note':
                '{"metrics":{"key1": {"value": 10, "description": ""}, '
                '"key2": {"value": 10, "description": ""}}}',
                'hash': '123456',
                'commiter': 'me'
            })
        git.expect_generate_annotated_commits_with_details(
            STATS_EXCLUSION_REF_NAME, commit_range='123456..HEAD', toReturn=[])

        metrics = DataBean()
        metrics.metrics = {
            'key1':
            DataBean(value=12,
                     description='',
                     checked=False,
                     direction=FALLING)
        }
        metrics.metrics = {
            'key1':
            DataBean(value=8, description='', checked=False, direction=RISING)
        }

        self.assertEqual(
            Callable.success,
            processor.check_values(args, metrics, git,
                                   MockFileUtils())(Mock()))
Example #14
0
    def test_mock_ordered(self):
        m = Mock()
        m.ordered_exec('first', toReturn='first result')
        m.ordered_exec('second', toReturn='second result')

        self.assertEqual('first result', m.exec('first'))
        self.assertEqual('second result', m.exec('second'))
    def test_check_values_rising(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()

        git.expect_latest_annotated_commit_with_details(
            STATS_REF_NAME,
            toReturn={
                'note':
                '{"metrics":{"key1": {"value": 20, "description": ""}}}',
                'hash': 'abcdef',
                'commiter': 'me'
            })
        git.expect_generate_annotated_commits_with_details(
            STATS_EXCLUSION_REF_NAME, commit_range='abcdef..HEAD', toReturn=[])

        metrics = DataBean()
        metrics.metrics = {
            'key1':
            DataBean(value=10, description='', checked=True, direction=RISING)
        }

        self.assertEqual(
            Callable.do_not_proceed,
            processor.check_values(args, metrics, git,
                                   MockFileUtils())(Mock()))
    def test_check_values_respects_other_violations(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()

        git.expect_latest_annotated_commit_with_details(
            STATS_REF_NAME,
            toReturn={
                'note': '{"metrics":{"key1": {"value": 10, "description": ""},'
                '"key2": {"value": 10, "description": ""}}}',
                'hash': '123456',
                'commiter': 'me'
            })
        exclusion = {
            'note':
            '{"committer": "testbot", "reason": "none", "exclusion": {"key1": 15}}'
        }
        git.expect_generate_annotated_commits_with_details(
            STATS_EXCLUSION_REF_NAME,
            commit_range='123456..HEAD',
            toReturn=[exclusion])

        metrics = DataBean()
        metrics.metrics = {
            'key1':
            DataBean(value=8, description='', checked=True, direction=FALLING),
            'key2':
            DataBean(value=12, description='', checked=True, direction=FALLING)
        }

        self.assertEqual(
            Callable.do_not_proceed,
            processor.check_values(args, metrics, git,
                                   MockFileUtils())(Mock()))
Example #17
0
 def test_horde_skeleton_is_not_copied_when_directory_exists(self):
     file_utils = MockFileUtils()
     process_utils = Mock().default_check_output(
         'Maven:3.3.2\nJava home:jdk_home\n:Java version 1.2.3_123'.encode(
         ))
     horde_runner = MockHordeRunner(self.args, file_utils, process_utils,
                                    self.horde_status_checker.not_running())
     horde_runner(Mock())
     self.assertTrue(
         file_utils.verify_copy_tree(
             self.horde_layout.horde_skeleton_dir(),
             self.horde_layout.horde_home_dir(False)))
     self.assertFalse(
         file_utils.verify_remove_dir(
             self.horde_layout.horde_home_dir(False)))
    def test_check_values_rising(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()

        git.expect_latest_annotated_commit_with_details(STATS_REF_NAME, toReturn={'note': '{"metrics":{"key1": {"value": 20, "description": ""}}}',
                                                                                  'hash': 'abcdef',
                                                                                  'commiter': 'me'})
        git.expect_generate_annotated_commits_with_details(STATS_EXCLUSION_REF_NAME, commit_range='abcdef..HEAD', toReturn=[])

        metrics = DataBean()
        metrics.metrics = {'key1': DataBean(value=10, description='', checked=True, direction=RISING)}

        self.assertEqual(Callable.do_not_proceed, processor.check_values(args, metrics, git, MockFileUtils())(Mock()))
 def test_with_message_simple(self):
     metric = JunitAssertWithoutMessage('junit.assert.without.message',
                                        'junit assert test',
                                        metrics_logger=Mock()).configure(
                                            Mock(), False)
     metric.pre_files_scan('tests')
     self.assertTrue(metric.wants_file('foo.java'), 'Wants a java file')
     metric.on_read_line(
         'assertTrue("This message will be useful when this assertion fails.", true)'
     )
     metric.on_read_line(
         'assertFalse("This message will be useful when this assertion fails.", false)'
     )
     self.assertEqual(0, metric.value, 'Should have no hits')
     metric.post_files_scan('tests')
    def test_check_values_with_exclusions(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()

        git.expect_latest_annotated_commit_with_details(STATS_REF_NAME, toReturn={'note': '{"metrics":{"key1": {"value": 10, "description": ""}}}',
                                                                                  'hash': '123456',
                                                                                  'commiter': 'me'})
        exclusion = {'note': '{"committer": "testbot", "reason": "none", "exclusion": {"key1": 15}}'}
        git.expect_generate_annotated_commits_with_details(STATS_EXCLUSION_REF_NAME, commit_range='123456..HEAD', toReturn=[exclusion])

        metrics = DataBean()
        metrics.metrics = {'key1': DataBean(value=12, description='', checked=True, direction=FALLING)}

        self.assertEqual(Callable.success, processor.check_values(args, metrics, git, MockFileUtils())(Mock()))
Example #21
0
    def test_simple_startup_without_options(self):
        #having
        tomcat_starter = MockTomcatStarter(self.args, False, MockFileUtils())
        #when
        tomcat_starter(Mock())
        #then

        #noinspection PyUnresolvedReferences
        self.assertEqual(tomcat_starter._SystemCallable__command,
                         self.layout.tomcat_executable() + ' run')
        self.assertTrue(tomcat_starter.executed,
                        'Process should have been executed')
        opts = self.__get_opts_dict(tomcat_starter)
        self.__assertParameter(opts, '-Djira.home', self.layout.jira_home())
        self.__assertParameter(opts, '-Djira.plugins.bundled.disable', 'false')
        self.__assertParameter(
            opts, '-Djira.dev.bundledplugins.url',
            'file://' + BundledPluginsUtility.BUNDLED_PLUGINS_LIST)
        self.__assertParameter(opts, '-Xms128m')
        self.__assertParameter(opts, '-Xmx1024m')
        self.__assertParameter(opts, '-XX:MaxPermSize', '384m')
        self.assertNotIn('-Djira.rebel.root', opts)
        self.assertNotIn('-javaagent:', opts)
        self.assertNotIn('-agentlib:jdwp:', opts)
        #now check tomcat environment variables
        self.__assertParameter(tomcat_starter.env, 'CATALINA_HOME',
                               self.layout.tomcat_dir(False))
        self.__assertParameter(tomcat_starter.env, 'CATALINA_TMPDIR',
                               self.layout.tomcat_temp_dir())
        self.__assertParameter(tomcat_starter.env, 'CATALINA_BASE',
                               self.layout.tomcat_work_dir())
Example #22
0
    def test_webtest_looks_for_junit4_in_webdriver(self):

        tested_metric = WebTestFinder(metrics_logger=Mock())

        self.assertTrue(
            tested_metric.wants_file(
                '/jira-tests-legacy/tested/class/Webdriver.java'))
        self.assertTrue(
            tested_metric.on_read_line('@WebTest({Category.WEBDRIVER_TEST})'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public class Webdriver extends SomeClassWillBeInferredJunit4 {'
            ))
        self.assertTrue(tested_metric.on_read_line('@Test'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public void shouldFallIfNotSupported() {'))
        self.assertTrue(tested_metric.on_read_line('@Test'))
        self.assertTrue(
            tested_metric.on_read_line('public void testFalling() {'))
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.webtests.func'].value)
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.webtests.rest'].value)
        self.assertEqual(
            2,
            tested_metric.get_values()['tests.webtests.webdriver'].value)
Example #23
0
    def test_webtest_distinguishes_func_and_rest(self):

        tested_metric = WebTestFinder(metrics_logger=Mock())

        self.assertTrue(
            tested_metric.wants_file(
                '/jira-tests-legacy/tested/class/FuncTest.java'))
        self.assertTrue(
            tested_metric.on_read_line('@WebTest({Category.FUNC_TEST})'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public class FuncTest extends Something {'))
        self.assertTrue(
            tested_metric.on_read_line('public void testBehavior1() {'))

        self.assertTrue(
            tested_metric.wants_file(
                '/jira-tests-legacy/tested/class/RestTest.java'))
        self.assertTrue(
            tested_metric.on_read_line(
                '@WebTest({Category.FUNC_TEST, Category.REST})'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public class RestTest extends SomethingElse {'))
        self.assertTrue(tested_metric.on_read_line('public void testRest() {'))

        self.assertEqual(
            1,
            tested_metric.get_values()['tests.webtests.func'].value)
        self.assertEqual(
            1,
            tested_metric.get_values()['tests.webtests.rest'].value)
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.webtests.webdriver'].value)
Example #24
0
    def test_junit3_legacy(self):

        tested_metric = JUnitFinder(metrics_logger=Mock())

        self.assertTrue(
            tested_metric.wants_file(
                '/jira-tests-legacy/tested/class/Class3.java'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public class Class3 extends AbstractTestViewIssueColumns {'))
        self.assertTrue(
            tested_metric.on_read_line('public void testBehavior1() {'))
        self.assertTrue(
            tested_metric.on_read_line('public void shouldDoSomething() {'))
        self.assertTrue(tested_metric.on_read_line('@Test'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public void shouldFallIfNotSupported() {'))
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.junit.4.count'].value)
        self.assertEqual(
            1,
            tested_metric.get_values()['tests.junit.3.count'].value)
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.junit.3.nonlegacy'].value)
Example #25
0
    def test_junit3_finder(self):

        tested_metric = JUnitFinder(metrics_logger=Mock())

        self.assertTrue(tested_metric.wants_file('tested/class/Class2.java'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public class Class2 extends TestCase {'))
        self.assertTrue(
            tested_metric.on_read_line('public void testBehavior1() {'))
        self.assertTrue(tested_metric.on_read_line('@Test'))
        self.assertTrue(
            tested_metric.on_read_line('public void testSomething() {'))
        self.assertTrue(tested_metric.on_read_line('@Test'))
        self.assertTrue(
            tested_metric.on_read_line(
                'public void shouldFallIfNotSupported() {'))
        self.assertEqual(
            0,
            tested_metric.get_values()['tests.junit.4.count'].value)
        self.assertEqual(
            2,
            tested_metric.get_values()['tests.junit.3.count'].value)
        self.assertEqual(
            2,
            tested_metric.get_values()['tests.junit.3.nonlegacy'].value)
Example #26
0
    def test_java_imports_releases_file_on_wrong_package(self):
        obj = JavaPackageImports('test',
                                 'description',
                                 'util',
                                 'some.other.package',
                                 metrics_logger=Mock()).configure(
                                     Mock(), False)

        self.assertTrue(obj.wants_file(TestMetrics.hello_date_file))
        lastline = self.read_file(TestMetrics.hello_date_file, obj)

        self.assertIn(
            'package',
            lastline,
            msg='parser should release the file after mismatched package.')
        self.assertEqual(0, self.valueof(obj))
Example #27
0
 def setUp(self):
     LOG.set_none()
     self.stale_plugins = Mock()
     self.stale_plugins.expect_get_bundled_plugins_module(toReturn=['bundled_plugins'])
     self.stale_plugins.default_find_plugins_to_recompile([])
     self.module = Run(self.stale_plugins)
     self.module._Run__build_tomcat_layout = lambda args: None
Example #28
0
    def test_process_local_test_settings(self):
        fileutils = MockFileUtils()

        xml_location_key = '${test.xml.location}'
        file1 = os.sep.join(['.', 'jira-func-tests', 'src', 'main', 'resources', 'localtest.properties'])
        file2 = os.sep.join(['.', 'jira-webdriver-tests', 'src', 'main', 'resources', 'localtest.properties'])
        file3 = os.sep.join(
            ['.', 'jira-distribution', 'jira-integration-tests', 'src', 'main', 'resources', 'localtest.properties'])
        template = os.sep.join(['jira-func-tests', 'src', 'main', 'resources', 'localtest.template'])
        fileutils.expect_file_exists(file2, toReturn=True)
        fileutils.expect_file_exists(file3, toReturn=True)

        args = MocArgs()
        args.port = 98765
        args.jira_context = 'substituteThis'
        process_local_test_settings(args, fileutils)(Mock())

        # overwrite all each time:
        filtered_files = fileutils.filtered_files
        self.assertEqual(3, len(filtered_files))

        for f in [file1, file2, file3]:
            rpl = fileutils.verify_filter_file(template, f)
            self.assertIsNotNone(rpl)
            self.assertIn('${jira.port}', rpl)
            self.assertEqual(str(args.port), rpl['${jira.port}'])
            self.assertIn("${jira.context}", rpl)
            self.assertEqual(args.jira_context, rpl['${jira.context}'])
            self.assertIn(xml_location_key, rpl)

        self.assertIn('jira-func-tests', fileutils.verify_filter_file(template, file1)[xml_location_key])
        self.assertIn('jira-webdriver-tests', fileutils.verify_filter_file(template, file2)[xml_location_key])
        self.assertIn('jira-func-tests', fileutils.verify_filter_file(template, file3)[xml_location_key])
Example #29
0
    def test_validate_workspace_params_fails_without_workspace(self):
        fileutils = MockFileUtils()

        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        jira_project_dir = 'jira-project'
        pom_xml = 'pom.xml'

        fileutils.expect_getcwd(toReturn=os.sep.join([workspace_dir, jira_project_dir]))
        fileutils.expect_file_exists(os.sep.join([workspace_dir, pom_xml]), toReturn=False)
        fileutils.expect_get_parent_dir_path(toReturn=workspace_dir)
        logger = Mock()

        callable_status = WorkspaceValidator(fileutils)(logger)

        self.assertEqual(logger.callcount_error(), 1)
        self.assertEqual(callable_status, Callable.failure)
Example #30
0
    def test_verify_dependencies_is_added_always(self):
        self.jmake_ut(Mock(vdep=False, skip_bp=False, findbugs=False),
                      self.executor)

        self.assertEqual(len(self.executor), 2)
        maven = self.executor[1]
        self.assertIn('verifyDependencies', maven.properties)
Example #31
0
    def test_calling_command_forwards_system_return_code(self):
        command = 'my command'
        call = MockedSystemCallable(command, MockedSubProcess([], 6667))
        rc = call(Mock())

        self.assertEqual(rc, 6667)
        self.assertEqual(command, call.called_command)
    def setUp(self):
        self.fs = MockFileUtils()
        self.url = Mock()
        self.manifesto = ManifestoUtils(url_utils=self.url, fs=self.fs)

        self.url.expect_read('https://manifesto.uc-inf.net/api/env/jirastudio-dev', None, None,
                             toReturn='{ "hash": "123456" }')
Example #33
0
    def test_installing_jmake_module(self):

        workspace_modules_file = os.sep.join(['.', '.idea', 'modules.xml'])
        element = XML.Element('project', {'version': '4'})
        self.xml.expect_parse(workspace_modules_file, element)

        # test that it is created:
        self.fileutils = MockFileUtils()
        process_jmake_module(Mock(force=False), self.fileutils,
                             self.xml)(self.logger)
        self.assertEqual(self.fileutils.callcount_copy_file(), 1)
        module_list = element[0][0]
        self.assertEqual(len(module_list), 1)
        module = module_list[0]
        self.assertEqual(module.tag, 'module')
        self.assertIn('filepath', module.attrib)
        self.assertIn('fileurl', module.attrib)

        # test that it is not overridden:
        self.fileutils = MockFileUtils()
        module.attrib['angry'] = 'nerdz'
        process_jmake_module(Mock(force=False), self.fileutils,
                             self.xml)(self.logger)
        self.assertEqual(self.fileutils.callcount_copy_file(), 1)
        module = module_list[0]
        self.assertEqual(module.tag, 'module')
        self.assertIn('filepath', module.attrib)
        self.assertIn('fileurl', module.attrib)
        self.assertIn('angry', module.attrib)
        self.assertEqual(module.attrib['angry'], 'nerdz')

        # test, that it will not be created when iml file exists
        module_list.remove(module)
        self.fileutils = MockFileUtils()
        self.fileutils.expect_file_exists(os.sep.join(
            ['.', 'jmake_src', 'jmake_src.iml']),
                                          toReturn=True)
        process_jmake_module(Mock(force=False), self.fileutils,
                             self.xml)(self.logger)
        self.assertEqual(self.fileutils.callcount_copy_file(), 0)
        self.assertEqual(len(module_list), 0)

        # force should override that
        process_jmake_module(Mock(force=True), self.fileutils,
                             self.xml)(self.logger)
        self.assertEqual(self.fileutils.callcount_copy_file(), 1)
        self.assertEqual(len(module_list), 1)
Example #34
0
    def test_default(self):

        m = Mock().default_is_prime(False)
        m.expect_primes(toReturn=[2, 3, 5, 7, 11, 13, 17, 19])
        for num in m.primes():
            m.expect_is_prime(num, toReturn=True)

        for num in range(20):
            self.assertEqual(m.is_prime(num), num in m.primes())
Example #35
0
    def test_skip_bundled_plugins(self):
        self.jmake_fb(Mock(vdep=False, skip_bp=True, findbugs=False),
                      self.executor)

        self.assertEqual(len(self.executor), 1)
        maven = self.executor[0]
        for project in maven.projects:
            self.assertNotIn('bundled-plugins', project)
Example #36
0
    def test_deprecated_methods_usage_in_normal_run(self):

        tested_metric = MockDeprecatedMethodUsage('test').configure(
            Mock(), False)

        tested_metric.pre_files_scan('test-module')
        self.assertEqual(0, self.valueof(tested_metric))
        self.assertEqual(1, len(tested_metric.maven_runs))
        maven = tested_metric.maven_runs[0]
        self.assertIn('jira-metrics', maven.profiles)
        self.assertIn('ondemand', maven.profiles)
        self.assertIn('test-compile', maven.phases)
        maven.process_output(Mock(), 'lorem [deprecation] ipsum', 100)
        self.assertEqual(1, self.valueof(tested_metric))
        maven.process_output(Mock(), 'lorem ipsum', 101)
        self.assertEqual(1, self.valueof(tested_metric))
        tested_metric.post_files_scan('test-module')
Example #37
0
    def test_java_imports_respects_package_whitelist(self):
        obj = JavaPackageImports('test',
                                 'description',
                                 'Manager',
                                 'mypackage',
                                 whitelist=['WhitelistedManager'],
                                 metrics_logger=Mock()).configure(
                                     Mock(), False)

        obj.pre_files_scan('test-module')
        self.assertTrue(obj.wants_file(TestMetrics.hello_date_file))
        obj.on_read_line('package mypackage;')
        obj.on_read_line('import WhitelistedManager;')
        obj.on_read_line('import IssueManager;')
        obj.post_files_scan('test-module')

        self.assertEqual(1, self.valueof(obj))
Example #38
0
    def test_verify_dependencies_works_with_compile(self):
        self.jmake_ut(Mock(vdep=True, skip_bp=False, findbugs=False),
                      self.executor)

        self.assertEqual(len(self.executor), 2)
        maven = self.executor[1]
        self.assertIn('verifyDependencies', maven.properties)
        self.assertIn('compile', maven.phases)
class TestManifestoUtils(TestCase):
    def setUp(self):
        self.fs = MockFileUtils()
        self.url = Mock()
        self.manifesto = ManifestoUtils(url_utils=self.url, fs=self.fs)

        self.url.expect_read('https://manifesto.uc-inf.net/api/env/jirastudio-dev', None, None,
                             toReturn='{ "hash": "123456" }')

    def test_resolve_aliases(self):
        h = self.manifesto.determine_hash('dev')
        self.assertEqual(h, '123456')

    def test_get_plugins(self):
        self.url.expect_read('https://manifesto.uc-inf.net/static/12345/psd', None, None,
                             toReturn='{ "plugins": { "jira" : {"myplugin" : { "groupId" : "g", "artifactId" : "a", "version": "v"}}}}')

        plugins = self.manifesto.get_plugins_maven_artifacts('12345')
        self.assertDictEqual({"myplugin": {"groupId": "g", "artifactId": "a", "version": "v"}}, plugins)

    def test_requests_are_cached(self):
        self.url.expect_read('https://manifesto.uc-inf.net/api/env/jirastudio-dev', None, None,
                             toReturn='{ "hash": "123456" }')

        h = self.manifesto.determine_hash('jirastudio-dev')
        self.assertEqual(h, '123456')

        h = self.manifesto.determine_hash('jirastudio-dev')
        self.assertEqual(h, '123456')

        self.assertEqual(1, self.url.callcount_read())
Example #40
0
    def test_mock_ordered(self):
        m = Mock()
        m.ordered_exec('first', toReturn='first result')
        m.ordered_exec('second', toReturn='second result')

        self.assertEqual('first result', m.exec('first'))
        self.assertEqual('second result', m.exec('second'))
Example #41
0
 def test_clean_full(self):
     self.file_utils.expect_file_exists(WorkspaceLayout.TOMCAT_DOWNLOAD,
                                        toReturn=True)
     self.file_utils.expect_file_exists(WorkspaceLayout.JIRA_HOME,
                                        toReturn=True)
     self.jmake_clean(
         Mock(deep=True, tomcat=True, jirahome=True, with_workspace=False),
         self.executor)
     self.assertEqual(len(self.executor), 4)
Example #42
0
 def test_clean_deep(self):
     self.jmake_clean(
         Mock(deep=True, tomcat=False, jirahome=False,
              with_workspace=False), self.executor)
     self.assertEqual(len(self.executor), 2)
     self.assertIsInstance(self.executor[1], SystemCallable)
     self.assertIn('rm -rf', self.executor[1]._SystemCallable__command)
     self.assertIn('target', self.executor[1]._SystemCallable__command)
     self.assertIn(' . ', self.executor[1]._SystemCallable__command)
Example #43
0
    def test_findbugs_needs_maven3(self):
        self.jmake_fb(Mock(vdep=False, skip_bp=False, findbugs=False),
                      self.executor)

        self.assertEqual(len(self.executor), 1)
        maven = self.executor[0]
        self.assertIsInstance(maven.maven_version, Maven3)
        self.assertIn('findbugs', maven.profiles)
        self.assertIn('process-classes', maven.phases)
Example #44
0
    def test_using_env_member(self):
        env = os.environ.copy()
        env.clear()
        env['MY_ENV'] = 987
        call = MockedSystemCallable('some', MockedSubProcess([], 0))
        call.env = env

        call(Mock())
        self.assertDictEqual(call.called_with_env, env)
    def test_check_values_ignores_additional_and_missing_keys(self):
        processor = MetricsProcessor()

        args = Mock(non_interactive=True)
        git = Mock()


        git.expect_latest_annotated_commit_with_details(STATS_REF_NAME, toReturn={'note': '{"metrics":{'
                                                                        '"key1": {"value": 20, "description": ""}, '
                                                                        '"key2": {"value": 10, "description": ""}   }}',
                                                                                  'hash': '123efef',
                                                                                  'commiter': 'me'})
        git.expect_generate_annotated_commits_with_details(STATS_EXCLUSION_REF_NAME, commit_range='123efef..HEAD', toReturn=[])

        metrics = DataBean()
        metrics.metrics = {'key2': DataBean(value=10, description='', checked=True, direction=FALLING),
                           'key3': DataBean(value=10, description='', checked=True, direction=FALLING)}

        self.assertEqual(Callable.success, processor.check_values(args, metrics, git, MockFileUtils())(Mock()))
Example #46
0
    def setUp(self):
        super().setUp()
        self.git = Mock()
        self.git.expect_get_remotes(toReturn=['stash!'])

        self.json = Mock()
        self.json.default_as_str(SERIALIZED_METRICS)

        self.fs = MockFileUtils()
        self.executor = []
        self.metrics_processor = Mock()

        self.called_process_metrics = False

        def call_process_metrics(_):
            self.called_process_metrics = True
            return Callable.success

        self.metrics_processor.default_process_metrics(call_process_metrics)

        self.called_generate_report = False

        def call_generate_report(_):
            self.called_generate_report = True
            return Callable.success

        self.metrics_processor.default_generate_report(call_generate_report)

        self.called_check_values = False

        def call_check_values(_):
            self.called_check_values = True
            return Callable.success

        self.metrics_processor.default_check_values(call_check_values)

        self.ehmetrics = EhMetrics(git=self.git, fs=self.fs,
                                   metrics_processor=self.metrics_processor, json_writer=self.json)

        self.executor_cursor = 0
Example #47
0
    def test_mock_ordered_with_wrong_order(self):
        m = Mock()
        m.ordered_exec('first', toReturn='first result')
        m.ordered_exec('second', toReturn='second result')

        try:
            m.exec('second')
        except AssertionError as e:
            message = e.args[0]
            self.assertRegex(message, re.compile('''Expected call of exec with:\n\targs=\\('first',\\)\n\tkwargs={}\n'''
                                                 +'''but found:\n\targs=\\('second',\\)\n\tkwargs={}\n.*'''))
Example #48
0
    def test_install_run_configs(self):

        workspace_file = os.sep.join(['.idea', 'workspace.xml'])
        ws_root = XML.Element('project', {'version':'4'})
        ws_component = self.xml.produce(ws_root, ('component',  {'name': 'RunManager'}))
        for cfg in ['cfg1', 'cfg4', 'another']:
            self.xml.produce(ws_component, ('configuration', {'default': 'false', 'name': cfg}))

        num_cfg = 6
        idea_runners_file = os.sep.join(
            ['jira-ide-support', 'src', 'main', 'resources', 'ideaTemplates', 'runConfigurations.xml'])
        idea_root = XML.Element('project', {'version':'4'})
        idea_component = self.xml.produce(idea_root, ('component',  {'name': 'RunManager'}))
        for cfg in ('cfg' + str(e) for e in range(num_cfg)):
            self.xml.produce(idea_component, ('configuration', {'default': 'false', 'name': cfg}))

        self.xml.expect_parse(workspace_file, ws_root)
        self.xml.expect_parse(idea_runners_file, idea_root)

        args = Mock(force = False)
        process_run_configs(args, self.xml)(self.logger)

        self.assertEqual(len(ws_component), num_cfg + 1)
        cfg2 = self.xml.produce(ws_component, ('configuration', {'name': 'cfg2'}))
        cfg2.attrib['is-sad'] = 'notsomuch'

        process_run_configs(args, self.xml)(self.logger)
        self.assertEqual(len(ws_component), num_cfg + 1)
        cfg2 = self.xml.produce(ws_component, ('configuration', {'name': 'cfg2'}))
        self.assertEqual(cfg2.attrib['is-sad'], 'notsomuch')
        cfg2.attrib['snowflakes'] = 'omg-so-many!'

        args.force = True
        process_run_configs(args, self.xml)(self.logger)
        self.assertEqual(len(ws_component), num_cfg + 1)
        cfg2 = self.xml.produce(ws_component, ('configuration', {'name': 'cfg2'}))
        self.assertNotIn('is-sad', cfg2.attrib)
        self.assertNotIn('snowflakes', cfg2.attrib)
Example #49
0
    def test_transform_maven_executable_for_workspace(self):
        fileutils = MockFileUtils()

        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        jira_project_dir = 'jira-project'
        jira_rest_dir = 'jira-rest'
        pom_xml = 'pom.xml'

        fileutils.expect_get_parent_dir_relpath(workspace_dir, toReturn=jira_project_dir)

        fileutils.default_getcwd(os.sep.join([workspace_dir, jira_project_dir]))
        fileutils.expect_listdir(workspace_dir,
                                 toReturn=[jira_project_dir, jira_rest_dir, '.idea', pom_xml, 'README.txt'])

        fileutils.expect_dir_exists(os.sep.join([workspace_dir, jira_project_dir]), toReturn=True)
        fileutils.expect_dir_exists(os.sep.join([workspace_dir, jira_rest_dir]), toReturn=True)
        fileutils.expect_dir_exists(os.sep.join([workspace_dir, '.idea']), toReturn=True)

        fileutils.expect_file_exists(os.sep.join([workspace_dir, jira_project_dir, pom_xml]), toReturn=True)
        fileutils.expect_file_exists(os.sep.join([workspace_dir, jira_rest_dir, pom_xml]), toReturn=True)

        parser_mocks = {os.sep.join([workspace_dir, jira_project_dir, pom_xml]):
                            Mock().expect_get_artifact_id(toReturn=jira_project_dir).expect_get_version(toReturn='10.0.0-SNAPSHOT'),
                        os.sep.join([workspace_dir, jira_rest_dir, pom_xml]):
                            Mock().expect_get_artifact_id(toReturn=jira_rest_dir).expect_get_version(toReturn='9.1.2-SNAPSHOT')}

        PROJECT1 = os.sep.join(['jira-components', 'jira-webapp'])
        PROJECT2 = os.sep.join(['jira-components', 'jira-plugins', 'jira-bundled-plugins'])
        maven_mock = Mock(projects = [PROJECT1, PROJECT2])

        MavenCallableWorkspaceDelegator.after_init(maven_mock, workspace_dir, fileutils,
                                                   pom_parser_class_object=lambda path: parser_mocks[path])

        for k, v in {'jira.version': '10.0.0-SNAPSHOT',
                     'jira.project.version': '10.0.0-SNAPSHOT',
                     'jira.rest.version': '9.1.2-SNAPSHOT'}.items():
            self.assertTrue(maven_mock.verify_property(k, v))
Example #50
0
    def test_mock_ordered_called_too_many_times(self):
        m = Mock()
        m.ordered_exec('first', toReturn='first result')

        self.assertEqual('first result', m.exec('first'))
        try:
            m.exec('should not be called')
        except AssertionError as e:
            message = e.args[0]
            self.assertEqual('Not expected more calls of exec. The method was called with:\n'
            +'''\targs=('should not be called',)\n\tkwargs={}''', message)
Example #51
0
    def test_not_override_members(self):

        m = Mock()
        m.do_stuff = 2
        try:
            m.expect_do_stuff(toReturn=2)
            m.do_stuff(2)
        except AttributeError:
            self.assertEqual(m.do_stuff, 2)
            pass
        else:
            self.fail('field was replaced my a method, which is wrong!')
        self.assertEqual(m.do_stuff, 2)
    def test_check_values_generates_tests_report_when_no_previous_metrics(self):
        test_suite_logger = Mock()
        test_suite_logger_factory_mock = Mock().ordered_new_logger("ehMetrics", toReturn = test_suite_logger)

        test_suite_logger.ordered_success('key2', 0, 'EHMetrics', toReturn = None)
        test_suite_logger.ordered_success('key3', 0, 'EHMetrics', toReturn = None)
        test_suite_logger.ordered_save(toReturn = None)

        processor = MetricsProcessor(test_suite_logger_factory_mock)

        metrics = DataBean(metrics = {
            'key2': DataBean(value=10, description='', checked=True, direction=FALLING),
            'key3': DataBean(value=10, description='', checked=True, direction=FALLING)
        })

        args = Mock(non_interactive=True)
        self.assertEqual(Callable.success, processor.check_values(args, metrics, Mock(), MockFileUtils())(Mock()))

        test_suite_logger.verify_all_ordered()
    def test_metrics_processor_does_not_call_prepare_module_when_all_collectors_are_filtered_out(self):
        processor = MetricsProcessor()

        logger = Mock()

        module = 'module1'

        collector = Mock(key='filtered')

        module_description = Mock()
        module_description.expect_get_collectors(toReturn=[collector])

        collector2 = Mock(key='testing')
        collector2.expect_get_values(toReturn={'value1': 23})

        module_description2 = Mock()
        module_description2.expect_get_collectors(toReturn=[collector2])
        module_description2.expect_measured_modules(toReturn=[module])
        module_description2.expect_files(module, toReturn=[])

        module_descriptions = [module_description, module_description2]

        args = Mock(matching='test')

        result = DataBean()

        processor.process_metrics(args, module_descriptions, result)(logger)

        self.assertFalse(module_description.verify_prepare_environment(logger))
        self.assertTrue(module_description2.verify_prepare_environment(logger))
    def test_check_values_generates_tests_report_with_previous_metrics(self):
        test_suite_logger = Mock()
        test_suite_logger_factory_mock = Mock().ordered_new_logger("ehMetrics", toReturn = test_suite_logger)

        test_suite_logger.ordered_failed('key2', 0, 'EHMetrics', 'metric key2 () increased from 9 to 10.', toReturn = None)
        test_suite_logger.ordered_success('key3', 0, 'EHMetrics', toReturn = None)
        test_suite_logger.ordered_save(toReturn = None)

        processor = MetricsProcessor(test_suite_logger_factory_mock)

        metrics = DataBean(metrics = {
            'key2': DataBean(value=10, description='', checked=True, direction=FALLING),
            'key3': DataBean(value=10, description='', checked=True, direction=FALLING)
        })

        git = Mock()
        git.ordered_latest_annotated_commit_with_details(STATS_REF_NAME, toReturn={
            'note': '{"metrics":{"key1": {"value": 10, "description": ""}, "key2": {"value": 9, "description": ""}}}',
            'hash': '123456',
            'commiter': 'me'
        })
        git.ordered_generate_annotated_commits_with_details(STATS_EXCLUSION_REF_NAME, commit_range='123456..HEAD',
            toReturn=[])

        args = Mock(non_interactive=True)
        self.assertEqual(Callable.do_not_proceed, processor.check_values(args, metrics, git, MockFileUtils())(Mock()))

        git.verify_all_ordered()
        test_suite_logger.verify_all_ordered()
    def test_metrics_processor(self):
        processor = MetricsProcessor()

        logger = Mock()

        module = 'module1'

        collector = Mock()
        collector.expect_get_values(toReturn={'value1' : 23})
        collector.expect_wants_file('a', toReturn=True)
        collector.expect_wants_file('b', toReturn=False)
        collector.expect_on_read_line('aline', toReturn=False)

        file_a = MockFile()
        file_a.expect_readline(toReturn='aline')

        module_description = Mock()
        module_description.expect_get_collectors(toReturn=[collector])
        module_description.expect_measured_modules(toReturn=[module])
        module_description.expect_files(module, toReturn=['a', 'b'])
        module_description.expect_open_file('a', toReturn=file_a)

        module_descriptions = [module_description]

        args = Mock(matching=None, buildno = 'ORLY-9')

        result = DataBean()

        processor.process_metrics(args, module_descriptions, result)(logger)

        self.assertTrue(module_description.verify_prepare_environment(logger))
        self.assertTrue(collector.verify_pre_files_scan(module))
        self.assertTrue(collector.verify_on_read_line('aline'))
        self.assertEqual(1, collector.callcount_on_read_line())
        self.assertTrue(collector.verify_post_files_scan(module))
        self.assertDictEqual({'jira.stats.value1' : 23}, result.metrics)
        self.assertEqual('ORLY-9', result.build_number)
Example #56
0
 def setUp(self):
     self.file_utils = Mock()
     self.file_utils.default_file_exists(False)
     self.jmake_clean = Clean(self.file_utils)
     self.executor = []
Example #57
0
class JmakeCleanTest(TestCase):
    def setUp(self):
        self.file_utils = Mock()
        self.file_utils.default_file_exists(False)
        self.jmake_clean = Clean(self.file_utils)
        self.executor = []

    def test_clean_basic(self):
        self.jmake_clean(Mock(deep=False, tomcat=False, jirahome=False, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 2)
        self.assertIsInstance(self.executor[0], MavenCallable)
        self.assertIn('clean', self.executor[0].phases)
        self.assertIsNotNone(self.executor[1])

    def test_clean_deep(self):
        self.jmake_clean(Mock(deep=True, tomcat=False, jirahome=False, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 2)
        self.assertIsInstance(self.executor[1], SystemCallable)
        self.assertIn('rm -rf', self.executor[1]._SystemCallable__command)
        self.assertIn('target', self.executor[1]._SystemCallable__command)
        self.assertIn(' . ', self.executor[1]._SystemCallable__command)

    def test_clean_workspace(self):
        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        self.file_utils.expect_get_parent_dir_path(toReturn=workspace_dir)
        self.jmake_clean(Mock(deep=True, tomcat=False, jirahome=False, with_workspace=True), self.executor)
        self.assertEqual(len(self.executor), 3)
        self.assertIsInstance(self.executor[2], SystemCallable)
        self.assertIn('rm -rf', self.executor[2]._SystemCallable__command)
        self.assertIn('target', self.executor[2]._SystemCallable__command)
        self.assertIn(workspace_dir, self.executor[2]._SystemCallable__command)

    def test_clean_tomcat(self):
        self.file_utils.expect_file_exists(WorkspaceLayout.TOMCAT_DOWNLOAD, toReturn=True)
        self.jmake_clean(Mock(deep=False, tomcat=True, jirahome=True, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 3)
        self.assertIsInstance(self.executor[1], SystemCallable)
        self.assertIn('rm -rf', self.executor[1]._SystemCallable__command)
        self.assertIn(WorkspaceLayout.TOMCAT_DOWNLOAD, self.executor[1]._SystemCallable__command)

    def test_clean_jirahome(self):
        self.file_utils.expect_file_exists(WorkspaceLayout.JIRA_HOME, toReturn=True)
        self.jmake_clean(Mock(deep=False, tomcat=True, jirahome=True, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 3)
        self.assertIsInstance(self.executor[1], SystemCallable)
        self.assertIn('rm -rf', self.executor[1]._SystemCallable__command)
        self.assertIn(WorkspaceLayout.JIRA_HOME, self.executor[1]._SystemCallable__command)

    def test_clean_jira_od_home(self):
        self.file_utils.expect_file_exists(WorkspaceLayout.JIRA_OD_HOME, toReturn=True)
        self.jmake_clean(Mock(deep=False, tomcat=True, jirahome=True, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 3)
        self.assertIsInstance(self.executor[1], SystemCallable)
        self.assertIn('rm -rf', self.executor[1]._SystemCallable__command)
        self.assertIn(WorkspaceLayout.JIRA_OD_HOME, self.executor[1]._SystemCallable__command)

    def test_clean_all_jira_homes(self):
        all_jirahomes = [WorkspaceLayout.JIRA_HOME, WorkspaceLayout.JIRA_OD_HOME,
                         WorkspaceLayout.JIRA_CLUSTERED_HOME_ROOT, WorkspaceLayout.JIRA_SHARED_HOME_ROOT]
        for home in all_jirahomes:
            self.file_utils.expect_file_exists(home, toReturn=True)
        self.jmake_clean(Mock(deep=False, tomcat=True, jirahome=True, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 6)
        for executable in self.executor[1:4]:
            self.assertIsInstance(executable, SystemCallable)
            self.assertIn('rm -rf', executable._SystemCallable__command)
            self.assertTrue(any(home in executable._SystemCallable__command for home in all_jirahomes))

    def test_clean_full(self):
        self.file_utils.expect_file_exists(WorkspaceLayout.TOMCAT_DOWNLOAD, toReturn=True)
        self.file_utils.expect_file_exists(WorkspaceLayout.JIRA_HOME, toReturn=True)
        self.jmake_clean(Mock(deep=True, tomcat=True, jirahome=True, with_workspace=False), self.executor)
        self.assertEqual(len(self.executor), 4)
Example #58
0
class JmakeRunTest(TestCase):
    def setUp(self):
        LOG.set_none()
        self.stale_plugins = Mock()
        self.stale_plugins.expect_get_bundled_plugins_module(toReturn=['bundled_plugins'])
        self.stale_plugins.default_find_plugins_to_recompile([])
        self.module = Run(self.stale_plugins)
        self.module._Run__build_tomcat_layout = lambda args: None

    def test_simple_build_with_no_flags(self):
        executor = []
        args = MocArgs()

        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.__assert_property(maven_callable, 'skipSources')
        self.__assert_property(maven_callable, 'jira.exclude.bundled.plugins')
        self.__assert_property(maven_callable, 'jira.do.not.prepare.war')
        self.assertIsNone(maven_callable._SystemCallable__cwd)

    def test_reference_plugins_added_when_flag_set_and_plugins_needs_to_be_recompiled(self):
        executor = []
        args = MocArgs(ref_plugins=True)
        self.stale_plugins.default_find_plugins_to_recompile(['just-fake-plugin'])
        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertIn('reference-plugins', maven_callable.profiles)

    def test_third_party_licensing_disabled_removes_profile_and_maven_task(self):
        executor = []
        args = MocArgs(third_party_licensing=False)
        self.module(args, executor)
        self.assertEqual(len(executor), 9, "Should have added tasks to execute")
        self.assertIsInstance(executor[0], LocalPortInspector)
        self.assertIsInstance(executor[1], LocalPortInspector)
        self.assertIsInstance(executor[2], types.FunctionType)
        maven_callable = executor[3]
        self.assertIsInstance(maven_callable, MavenCallable)

        self.assertNotIn('third-party-licensing', maven_callable.profiles)

    def test_reference_plugins_not_added_when_flag_set_and_plugins_does_not_need_recompilation(self):
        executor = []
        args = MocArgs(ref_plugins=True)
        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertListEqual(maven_callable.profiles, ['func-mode-plugins', 'pseudo-loc', 'dev-mode-plugins',
                                                       'reference-plugins', 'third-party-licensing'])

    def test_bundled_plugins_are_build_when_flag_present(self):
        executor = []
        args = MocArgs(True)

        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertIsInstance(maven_callable, MavenCallable)
        #bundled plugins are build when this flag is not present
        self.assertNotIn('jira.exclude.bundled.plugins', maven_callable.properties)

    def test_bundled_plugins_are_build_when_clean_flag(self):
        executor = []
        args = MocArgs()
        args.mvn_clean = True

        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertIn(self.stale_plugins.get_bundled_plugins_module()[0], maven_callable.projects)
        self.assertIn('clean', maven_callable.phases)

    def test_war_is_build_when_buid_war_flag_set(self):
        executor = []
        args = MocArgs(build_war=True)
        args.mvn_clean = True

        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertNotIn('jira.do.not.prepare.war', maven_callable.properties)

    def test_sources_are_added_when_flag_present(self):
        executor = []
        args = MocArgs(attach_sources=True)
        args.mvn_clean = True

        self.module(args, executor)

        maven_callable = self.__assert_common_build_params(executor)
        self.assertNotIn('skipSources', maven_callable.properties)

    def test_maven_is_run_from_different_dir_when_workspace_flag_present(self):
        executor = []
        args = MocArgs(with_workspace=True)
        args.mvn_clean = True

        self.module(args, executor)

        maven_callable = self.__assert_workspace_build_params(executor)
        self.assertIsNotNone(maven_callable._SystemCallable__cwd)

    def test_validate_workspace_params_happy_path(self):
        fileutils = MockFileUtils()

        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        jira_project_dir = 'jira-project'
        pom_xml = 'pom.xml'

        fileutils.default_getcwd(os.sep.join([workspace_dir, jira_project_dir]))
        fileutils.expect_file_exists(os.sep.join([workspace_dir, pom_xml]), toReturn=True)
        fileutils.expect_get_parent_dir_path(toReturn=workspace_dir)

        callable_status = WorkspaceValidator(fileutils)(Mock())

        self.assertEqual(callable_status, Callable.success)

    def test_validate_workspace_params_fails_without_workspace(self):
        fileutils = MockFileUtils()

        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        jira_project_dir = 'jira-project'
        pom_xml = 'pom.xml'

        fileutils.expect_getcwd(toReturn=os.sep.join([workspace_dir, jira_project_dir]))
        fileutils.expect_file_exists(os.sep.join([workspace_dir, pom_xml]), toReturn=False)
        fileutils.expect_get_parent_dir_path(toReturn=workspace_dir)
        logger = Mock()

        callable_status = WorkspaceValidator(fileutils)(logger)

        self.assertEqual(logger.callcount_error(), 1)
        self.assertEqual(callable_status, Callable.failure)

    def test_transform_maven_executable_for_workspace(self):
        fileutils = MockFileUtils()

        workspace_dir = '/home/abracadabra/IdeaProjects/rest-workspace'
        jira_project_dir = 'jira-project'
        jira_rest_dir = 'jira-rest'
        pom_xml = 'pom.xml'

        fileutils.expect_get_parent_dir_relpath(workspace_dir, toReturn=jira_project_dir)

        fileutils.default_getcwd(os.sep.join([workspace_dir, jira_project_dir]))
        fileutils.expect_listdir(workspace_dir,
                                 toReturn=[jira_project_dir, jira_rest_dir, '.idea', pom_xml, 'README.txt'])

        fileutils.expect_dir_exists(os.sep.join([workspace_dir, jira_project_dir]), toReturn=True)
        fileutils.expect_dir_exists(os.sep.join([workspace_dir, jira_rest_dir]), toReturn=True)
        fileutils.expect_dir_exists(os.sep.join([workspace_dir, '.idea']), toReturn=True)

        fileutils.expect_file_exists(os.sep.join([workspace_dir, jira_project_dir, pom_xml]), toReturn=True)
        fileutils.expect_file_exists(os.sep.join([workspace_dir, jira_rest_dir, pom_xml]), toReturn=True)

        parser_mocks = {os.sep.join([workspace_dir, jira_project_dir, pom_xml]):
                            Mock().expect_get_artifact_id(toReturn=jira_project_dir).expect_get_version(toReturn='10.0.0-SNAPSHOT'),
                        os.sep.join([workspace_dir, jira_rest_dir, pom_xml]):
                            Mock().expect_get_artifact_id(toReturn=jira_rest_dir).expect_get_version(toReturn='9.1.2-SNAPSHOT')}

        PROJECT1 = os.sep.join(['jira-components', 'jira-webapp'])
        PROJECT2 = os.sep.join(['jira-components', 'jira-plugins', 'jira-bundled-plugins'])
        maven_mock = Mock(projects = [PROJECT1, PROJECT2])

        MavenCallableWorkspaceDelegator.after_init(maven_mock, workspace_dir, fileutils,
                                                   pom_parser_class_object=lambda path: parser_mocks[path])

        for k, v in {'jira.version': '10.0.0-SNAPSHOT',
                     'jira.project.version': '10.0.0-SNAPSHOT',
                     'jira.rest.version': '9.1.2-SNAPSHOT'}.items():
            self.assertTrue(maven_mock.verify_property(k, v))

    def test_shutdown(self):
        executor = []
        args = MocArgs()
        args.control = 'shutdown'

        self.module(args, executor)

        self.assertEqual(len(executor), 1)
        self.assertIsInstance(executor[0], TomcatStopper)

    def test_restart(self):
        executor = []
        args = MocArgs()
        args.control = 'restart'

        self.module(args, executor)

        self.assertEqual(len(executor), 5)
        self.assertIsInstance(executor[0], TomcatStopper)
        self.assertIsInstance(executor[1], LocalPortInspector)
        self.assertIsInstance(executor[2], LocalPortInspector)
        self.assertIsInstance(executor[3], types.FunctionType)
        self.assertIsInstance(executor[4], TomcatStarter)

    def test_setup_jira_home_adds_task_to_executor(self):
        executor = []
        args = MocArgs(setup_home=True)

        self.module(args, executor)

        self.assertEqual(len(executor), 11)
        self.assertIsInstance(executor[2], SetupJiraHomeHsqldb)

    def test_quickstart(self):
        executor = []
        args = MocArgs()
        args.control = 'quickstart'

        self.module(args, executor)

        self.assertEqual(len(executor), 4)
        self.assertIsInstance(executor[0], LocalPortInspector)
        self.assertIsInstance(executor[1], LocalPortInspector)
        self.assertIsInstance(executor[2], types.FunctionType)
        self.assertIsInstance(executor[3], TomcatStarter)

    def test_process_local_test_settings(self):
        fileutils = MockFileUtils()

        xml_location_key = '${test.xml.location}'
        file1 = os.sep.join(['.', 'jira-func-tests', 'src', 'main', 'resources', 'localtest.properties'])
        file2 = os.sep.join(['.', 'jira-webdriver-tests', 'src', 'main', 'resources', 'localtest.properties'])
        file3 = os.sep.join(
            ['.', 'jira-distribution', 'jira-integration-tests', 'src', 'main', 'resources', 'localtest.properties'])
        template = os.sep.join(['jira-func-tests', 'src', 'main', 'resources', 'localtest.template'])
        fileutils.expect_file_exists(file2, toReturn=True)
        fileutils.expect_file_exists(file3, toReturn=True)

        args = MocArgs()
        args.port = 98765
        args.jira_context = 'substituteThis'
        process_local_test_settings(args, fileutils)(Mock())

        # overwrite all each time:
        filtered_files = fileutils.filtered_files
        self.assertEqual(3, len(filtered_files))

        for f in [file1, file2, file3]:
            rpl = fileutils.verify_filter_file(template, f)
            self.assertIsNotNone(rpl)
            self.assertIn('${jira.port}', rpl)
            self.assertEqual(str(args.port), rpl['${jira.port}'])
            self.assertIn("${jira.context}", rpl)
            self.assertEqual(args.jira_context, rpl['${jira.context}'])
            self.assertIn(xml_location_key, rpl)

        self.assertIn('jira-func-tests', fileutils.verify_filter_file(template, file1)[xml_location_key])
        self.assertIn('jira-webdriver-tests', fileutils.verify_filter_file(template, file2)[xml_location_key])
        self.assertIn('jira-func-tests', fileutils.verify_filter_file(template, file3)[xml_location_key])

    def __assert_property(self, maven_callable, key, value=None):
        self.assertIn(key, maven_callable.properties)
        self.assertEqual(maven_callable.properties[key], value)

    def __assert_common_build_params(self, executor):
        self.assertEqual(len(executor), 10, "Should have added tasks to execute")
        self.assertIsInstance(executor[0], LocalPortInspector)
        self.assertIsInstance(executor[1], LocalPortInspector)
        self.assertIsInstance(executor[2], types.FunctionType)
        self.assertIsInstance(executor[3], MavenCallable)
        maven_callable = executor[4]
        self.assertIsInstance(maven_callable, MavenCallable)
        self.assertIsInstance(executor[5], types.LambdaType)
        self.assertIsInstance(executor[6], TomcatDownloader)
        self.assertIsInstance(executor[7], ContextPreparer)
        self.assertIsInstance(executor[8], types.FunctionType)
        self.assertIsInstance(executor[9], TomcatStarter)
        self.__assert_property(maven_callable, 'skipTests', 'true')
        self.assertListEqual(maven_callable.options, ['-am'])
        self.assertIn('package', maven_callable.phases)
        self.assertIn('jira-components/jira-webapp', maven_callable.projects)
        return maven_callable

    def __assert_workspace_build_params(self, executor):
        self.assertEqual(len(executor), 11, "Should have added tasks to execute")
        self.assertIsInstance(executor[0], WorkspaceValidator)
        self.assertIsInstance(executor[1], LocalPortInspector)
        self.assertIsInstance(executor[2], LocalPortInspector)
        self.assertIsInstance(executor[3], types.FunctionType)
        self.assertIsInstance(executor[4], MavenCallable)
        maven_callable = executor[5]
        self.assertIsInstance(maven_callable, MavenCallable)
        self.assertIsInstance(executor[6], types.LambdaType)
        self.assertIsInstance(executor[7], TomcatDownloader)
        self.assertIsInstance(executor[8], ContextPreparer)
        self.assertIsInstance(executor[9], types.FunctionType)
        self.assertIsInstance(executor[10], TomcatStarter)
        self.__assert_property(maven_callable, 'skipTests', 'true')
        self.assertListEqual(maven_callable.options, ['-am'])
        self.assertIn('package', maven_callable.phases)
        self.assertIn(os.sep.join([FileUtils().get_current_dir_name(),'jira-components/jira-webapp']), maven_callable.projects)
        return maven_callable