Пример #1
0
def test_multiple_upstream_jobs_recursive(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    parent_job_name = "test_multiple_upstream_jobs_recursive1"
    jb = jk.create_job(parent_job_name, FreestyleJob)
    with clean_job(jb):
        expected_name1 = "test_multiple_upstream_jobs_recursive2"
        jb2 = jk.create_job(expected_name1, FreestyleJob)
        with clean_job(jb2):
            expected_name2 = "test_multiple_upstream_jobs_recursive3"
            jb3 = jk.create_job(expected_name2, FreestyleJob)
            with clean_job(jb3):
                publisher1 = BuildTriggerPublisher.instantiate([expected_name1])
                jb.add_publisher(publisher1)

                publisher2 = BuildTriggerPublisher.instantiate([expected_name2])
                jb2.add_publisher(publisher2)

                async_assert(lambda: len(jb3.all_upstream_jobs) == 2)
                res = jb3.all_upstream_jobs

                all_names = [parent_job_name, expected_name1]
                assert isinstance(res, list)
                assert len(res) == 2
                assert res[0].name in all_names
                assert res[1].name in all_names
                assert isinstance(res[0], FreestyleJob)
                assert isinstance(res[1], FreestyleJob)
Пример #2
0
def test_build_blocker_functionality(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name1 = "test_build_blocker_functionality1"
    jb1 = jk.create_job(job_name1, FreestyleJob)
    with clean_job(jb1):
        job_name2 = "test_build_blocker_functionality2"
        jb2 = jk.create_job(job_name2, FreestyleJob)
        with clean_job(jb2):
            expected_jobs = job_name2
            build_blocker = BuildBlockerProperty.instantiate(expected_jobs)
            jb1.quiet_period = 0
            jb1.add_property(build_blocker)

            # Get a fresh copy of our job to ensure we have an up to date
            # copy of the config.xml for the job
            async_assert(lambda: jk.find_job(job_name1).properties)

            build_step = ShellBuilder.instantiate("sleep 10")
            jb2.quiet_period = 0
            jb2.add_builder(build_step)
            async_assert(lambda: jb2.builders)
            queue2 = jb2.start_build()

            async_assert(lambda: not queue2.waiting)

            queue1 = jb1.start_build()
            assert job_name2 in queue1.reason

            queue2.build.abort()
            assert queue1.waiting is False
def test_artifacts_archived(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name = "test_artifacts_archived_job"
    jb = jk.create_job(job_name, FreestyleJob)
    with clean_job(jb):
        publisher = ArtifactArchiverPublisher.instantiate("*.txt")
        jb.add_publisher(publisher)

        # Wait until our publisher config get's applied
        async_assert(lambda: jk.find_job(job_name).publishers)

        expected_file = "test_artifacts_archived_job.txt"
        shell_builder = ShellBuilder.instantiate("echo hello > " + expected_file)
        jb.add_builder(shell_builder)

        # Wait until our builder get's applied
        async_assert(lambda: jk.find_job(job_name).builders)

        # Next, trigger a build
        jb.start_build()
        async_assert(lambda: len(jb.all_builds) == 1)

        # finally, make sure the list or archived artifacts looks correct
        bld = jb.all_builds[0]
        results = bld.artifact_urls

        assert isinstance(results, list)
        assert len(results) == 1
        assert expected_file in results[0]
def test_basic_publisher(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    upstream_name = "test_basic_publisher"
    jb = jk.create_job(upstream_name, FreestyleJob)
    with clean_job(jb):
        expected_regex = "*.log"
        new_condition = AlwaysRun.instantiate()
        new_pub = ArtifactArchiverPublisher.instantiate(expected_regex)
        new_action = ConditionalAction.instantiate(new_condition, [new_pub])
        pub = FlexiblePublisher.instantiate([new_action])
        jb.add_publisher(pub)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(upstream_name).publishers)
        pubs = jk.find_job(upstream_name).publishers

        assert isinstance(pubs, list)
        assert len(pubs) == 1
        cur_pub = pubs[0]
        assert isinstance(cur_pub, FlexiblePublisher)
        assert isinstance(cur_pub.actions, list)
        assert len(cur_pub.actions) == 1
        cur_action = cur_pub.actions[0]
        assert isinstance(cur_action, ConditionalAction)
        assert isinstance(cur_action.publishers, list)
        assert len(cur_action.publishers) == 1
        cur_nested_pub = cur_action.publishers[0]
        assert isinstance(cur_nested_pub, ArtifactArchiverPublisher)
        assert cur_nested_pub.artifact_regex == expected_regex
def test_never_run_condition(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_never_run_condition"
    jb = jk.create_job(expected_job_name, FreestyleJob)
    with clean_job(jb):
        expected_output = "Here is my sample output..."
        shell_builder = ShellBuilder.instantiate("echo " + expected_output)
        condition = NeverRun.instantiate()
        conditional_builder = ConditionalBuilder.instantiate(condition, shell_builder)
        jb.add_builder(conditional_builder)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(expected_job_name).builders)

        builders = jk.find_job(expected_job_name).builders

        # Make sure the builder was correctly configured
        assert builders[0].condition is not None
        assert isinstance(builders[0].condition, NeverRun)
        assert builders[0].condition.get_friendly_name() == "never"

        # Finally, just to be sure our build actually did something relevant
        # we make sure the output from our shell command appears in the
        # build output for a build (ie: to ensure the conditional build step
        # actually ran)
        jb.start_build()
        async_assert(lambda: jb.last_build)

        assert expected_output not in jb.last_build.console_output
def test_one_downstream_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_one_downstream_job1", FreestyleJob)
    with clean_job(jb):
        expected_name = "test_one_downstream_job2"
        jb2 = jk.create_job(expected_name, FreestyleJob)
        with clean_job(jb2):
            publisher = BuildTriggerPublisher.instantiate([expected_name])
            jb.add_publisher(publisher)

            async_assert(lambda: jb.downstream_jobs)
            res = jb.downstream_jobs

            assert isinstance(res, list)
            assert len(res) == 1
            assert res[0].name == expected_name
def test_add_artifact_deployer_publisher_entry(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name = "test_add_artifact_deployer_publisher_entry"
    jb = jk.create_job(job_name, FreestyleJob)
    with clean_job(jb):
        publisher = ArtifactDeployer.instantiate()
        jb.add_publisher(publisher)

        expected_regex = "*.txt"
        expected_path = "/bin/data"
        entry = ArtifactDeployerEntry.instantiate(expected_regex, expected_path)
        publisher.add_entry(entry)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(job_name).publishers)
        pubs = jk.find_job(job_name).publishers

        assert len(pubs) == 1
        cur_pub = pubs[0]
        assert isinstance(cur_pub, ArtifactDeployer)
        assert isinstance(cur_pub.entries, list)
        assert len(cur_pub.entries) == 1
        cur_entry = cur_pub.entries[0]
        assert isinstance(cur_entry, ArtifactDeployerEntry)
        assert cur_entry.includes == expected_regex
        assert cur_entry.remote == expected_path
def test_add_conditional_builder(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_add_conditional_builder"
    jb = jk.create_job(expected_job_name, FreestyleJob)
    with clean_job(jb):
        expected_output = "Here is my sample output..."
        expected_cmd = "echo " + expected_output
        shell_builder = ShellBuilder.instantiate(expected_cmd)
        condition = AlwaysRun.instantiate()
        conditional_builder = ConditionalBuilder.instantiate(condition, shell_builder)
        jb.add_builder(conditional_builder)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(expected_job_name).builders)

        builders = jk.find_job(expected_job_name).builders

        # Make sure the builder was successfully added and it's response
        # data can be parsed correctly
        assert isinstance(builders, list)
        assert len(builders) == 1
        assert isinstance(builders[0], ConditionalBuilder)
        assert builders[0].builder is not None
        assert isinstance(builders[0].builder, ShellBuilder)
        assert builders[0].builder.script == expected_cmd
        assert_elements_equal(builders[0].builder.node, shell_builder.node)
Пример #9
0
def test_add_then_edit_build_blocker(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name = "test_add_then_edit_build_blocker"
    jb = jk.create_job(job_name, FreestyleJob)
    with clean_job(jb):
        build_blocker = BuildBlockerProperty.instantiate("MyCoolJob")
        jb.add_property(build_blocker)

        # edit the original build blocker object - changes should still get
        # applied to the underlying Jenkins job
        expected_job_names = ["SomeOtherJob1", "SomeOtherJob2"]
        build_blocker.blockers = expected_job_names

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(job_name).properties)

        # Now, get a clean reference to the job
        jb2 = jk.find_job(job_name)
        props = jb2.properties
        blockers = props[0].blockers
        assert isinstance(blockers, list)
        assert len(blockers) == 2
        assert expected_job_names[0] in blockers
        assert expected_job_names[1] in blockers
Пример #10
0
def test_build_git_scm(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name = "test_build_git_scm"
    jb = jk.create_job(job_name, FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0
        expected_url = "https://github.com/TheFriendlyCoder/pyjen.git"
        test_scm = GitSCM.instantiate(expected_url)
        jb.scm = test_scm

        async_assert(lambda: isinstance(jb.scm, GitSCM))

        # If the Git SCM was set up correctly, the job should check out the
        # source code for pyjen into the workspace when building. That being
        # the case there should be a setup.py script in the root folder. We
        # can therefore check to see if the SCM operation completed successfully
        # by looking for that file and setting a non-zero error code as part
        # of a shell builder operation
        shell_builder = ShellBuilder.instantiate("[ -f setup.py ]")
        jb.add_builder(shell_builder)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(job_name).builders)

        jb.start_build()
        async_assert(lambda: jb.last_good_build or jb.last_failed_build)

        assert jb.last_good_build is not None
Пример #11
0
def test_delete_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_name = "test_delete_job"
    jb = jk.create_job(expected_name, FreestyleJob)
    jb.delete()
    res = jk.find_job(expected_name)
    assert res is None
Пример #12
0
def test_create_multijob_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_name = "test_create_multijob_job"
    jb = jk.create_job(expected_name, MultiJob)
    with clean_job(jb):
        assert jb is not None
        assert jb.name == expected_name
def test_param_trigger(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    upstream_name = "test_param_trigger"
    jb = jk.create_job(upstream_name, FreestyleJob)
    with clean_job(jb):
        downstream_name = "sample_job"
        new_trigger = BuildTriggerConfig.instantiate([downstream_name])
        pub = ParameterizedBuildTrigger.instantiate([new_trigger])
        jb.add_publisher(pub)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(upstream_name).publishers)
        pubs = jk.find_job(upstream_name).publishers

        assert isinstance(pubs, list)
        assert len(pubs) == 1
        assert isinstance(pubs[0], ParameterizedBuildTrigger)
        triggers = pubs[0].triggers
        assert isinstance(triggers, list)
        assert len(triggers) == 1
        names = triggers[0].job_names
        assert isinstance(names, list)
        assert len(names) == 1
        assert names[0] == downstream_name
        assert triggers[0].condition == "SUCCESS"
Пример #14
0
def test_enable(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_enable", FreestyleJob)
    with clean_job(jb):
        jb.disable()
        jb.enable()
        assert not jb.is_disabled
Пример #15
0
def test_clone_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_clone_job", FreestyleJob)
    with clean_job(jb):
        # add a builder to our source job so we can check to make sure the
        # configuration has been properly cloned
        expected_script = "echo Hello From TestCloneJob"
        failing_step = ShellBuilder.instantiate(expected_script)
        jb.add_builder(failing_step)
        async_assert(lambda: jb.builders)

        # now, clone our job configuration and make sure the entire config
        # has been cloned correctly
        expected_name = "test_clone_job2"
        jb_clone = jb.clone(expected_name)
        with clean_job(jb_clone):
            assert jb_clone is not None
            assert jb_clone.name == expected_name
            assert jb_clone.is_disabled
            results = jb_clone.builders
            assert results is not None
            assert isinstance(results, list)
            assert len(results) == 1
            assert isinstance(results[0], ShellBuilder)
            assert results[0].script == expected_script
def test_trigger_with_current_build_params(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    upstream_name = "test_trigger_with_current_build_params"
    jb = jk.create_job(upstream_name, FreestyleJob)
    with clean_job(jb):
        downstream_name = "sample_job"
        new_trigger = BuildTriggerConfig.instantiate([downstream_name])
        cur_bld_params = CurrentBuildParams.instantiate()
        new_trigger.add_build_param(cur_bld_params)
        new_pub = ParameterizedBuildTrigger.instantiate([new_trigger])
        jb.add_publisher(new_pub)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(upstream_name).publishers)
        pubs = jk.find_job(upstream_name).publishers

        assert len(pubs) == 1
        cur_pub = pubs[0]
        assert len(cur_pub.triggers) == 1
        cur_trig = cur_pub.triggers[0]
        assert len(cur_trig.build_params) == 1
        cur_param_cfg = cur_trig.build_params[0]

        assert isinstance(cur_param_cfg, CurrentBuildParams)
Пример #17
0
def test_wait_for_idle(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    node = jk.nodes[0]
    expected_job_name = "test_wait_for_idle_job"
    jb = jk.create_job(expected_job_name, FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0
        shell_builder = ShellBuilder.instantiate("sleep 2")
        jb.add_builder(shell_builder)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(expected_job_name).builders)

        # Trigger a build
        jb.start_build()

        # The 'last_build' reference becomes available as soon as the previously
        # triggered build exits the queue and starts running. So we wait for the
        # last build to become valid before checking the node activity
        async_assert(lambda: jb.last_build)

        assert node.is_idle is False
        assert node.wait_for_idle()
        assert node.is_idle
Пример #18
0
def test_quiet_period(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_quiet_period", FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0
        # first set our quiet period
        expected_duration = 10
        jb.quiet_period = expected_duration

        expected_output = "Testing my quiet period"
        failing_step = ShellBuilder.instantiate("echo " + expected_output)
        jb.add_builder(failing_step)
        async_assert(lambda: jb.builders)

        assert jb.quiet_period_enabled is True
        assert jb.quiet_period == expected_duration

        # Launch a build and time how long it takes to complete
        start = timeit.default_timer()
        jb.start_build()
        async_assert(lambda: jb.last_build, expected_duration + 5)
        duration = timeit.default_timer() - start
        assert duration >= expected_duration

        bld = jb.last_build
        assert expected_output in bld.console_output
def test_always_run_condition(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_always_run_condition"
    jb = jk.create_job(expected_job_name, FreestyleJob)
    with clean_job(jb):
        expected_output = "Here is my sample output..."
        expected_cmd = "echo " + expected_output
        shell_builder = ShellBuilder.instantiate(expected_cmd)
        condition = AlwaysRun.instantiate()
        conditional_builder = ConditionalBuilder.instantiate(condition, shell_builder)
        jb.add_builder(conditional_builder)

        # Wait until our job config has been applied successfully
        async_assert(lambda: jk.find_job(expected_job_name).builders)

        # Make sure the condition is loaded correctly
        builders = jk.find_job(expected_job_name).builders
        assert isinstance(builders[0].condition, AlwaysRun)
        assert  builders[0].condition.get_friendly_name() == "always"

        # Run a build and make sure the build operation actually executed
        jb.start_build()
        async_assert(lambda: jb.last_build)

        assert expected_output in jb.last_build.console_output
Пример #20
0
def test_clone_job_enabled(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_clone_job_enabled", FreestyleJob)
    with clean_job(jb):
        jb_clone = jb.clone("test_clone_job2", False)
        with clean_job(jb_clone):
            assert jb_clone is not None
            assert jb_clone.is_disabled is False
Пример #21
0
def test_get_one_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_get_one_job", FreestyleJob)
    with clean_job(jb):
        res = jk.jobs

        assert len(res) == 1
        assert res[0] == jb
Пример #22
0
def test_disable_all_jobs(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_disable_all_jobs_job"
    jb = jk.create_job(expected_job_name, FreestyleJob)

    with clean_job(jb):
        vw = jk.default_view
        vw.disable_all_jobs()
        assert jb.is_disabled
Пример #23
0
def test_disable_assigned_node(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_disable_assigned_node", FreestyleJob)
    with clean_job(jb):
        jb.assigned_node = "MyNodeLabel && UnknownLabel"

        jb2 = jk.find_job(jb.name)
        jb2.assigned_node = ""
        assert jb2.assigned_node_enabled is False
Пример #24
0
def test_create_folder_job_with_subjob(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_create_folder_job_with_subjob", FolderJob)
    with clean_job(jb):
        expected_name = "test_create_folder_job_with_subjob2"
        jb2 = jb.create_job(expected_name, FreestyleJob)
        assert jb2 is not None
        with clean_job(jb2):
            assert jb2.name == expected_name
Пример #25
0
def test_disable_custom_workspace(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_disable_custom_workspace", FreestyleJob)
    with clean_job(jb):
        jb.custom_workspace = "/delme"

        jb2 = jk.find_job(jb.name)
        jb2.custom_workspace = ""
        assert jb2.custom_workspace_enabled is False
Пример #26
0
def test_assigned_node(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_assigned_node", FreestyleJob)
    with clean_job(jb):
        expected_label = "MyNodeLabel && UnknownLabel"
        jb.assigned_node = expected_label

        jb2 = jk.find_job(jb.name)
        assert jb2.assigned_node_enabled is True
        assert jb2.assigned_node == expected_label
Пример #27
0
def test_disable_quiet_period(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_disable_quiet_period", FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0

        jb2 = jk.find_job(jb.name)
        assert jb2 is not None
        jb2.quiet_period = -1
        assert jb2.quiet_period_enabled is False
Пример #28
0
def test_get_builds_in_time_range_no_builds(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_get_builds_in_time_range_no_builds", FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0
        start_time = datetime.now() - timedelta(days=1)
        end_time = datetime.now() + timedelta(days=1)
        builds = jb.get_builds_in_time_range(start_time, end_time)

        assert len(builds) == 0
def test_get_branch_jobs(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_name = "test_get_branch_jobs"
    jb = jk.create_job(expected_name, MultibranchPipelineJob)
    with clean_job(jb):
        res = jb.jobs

        assert res is not None
        assert isinstance(res, list)
        assert len(res) == 0
Пример #30
0
def test_start_build_returned_queue_item(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    queue = jk.build_queue
    jb = jk.create_job("test_start_build_returned_queue_item", FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 1
        item = jb.start_build()

        assert item is not None
        assert isinstance(item, QueueItem)
        assert queue.items[0] == item
Пример #31
0
def test_get_multi_nested_job_recursive(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb1 = jk.create_job("test_get_multi_nested_job_recursive_1", FolderJob)
    with clean_job(jb1):
        jb2 = jb1.create_job("test_get_multi_nested_job_recursive_2",
                             FreestyleJob)
        with clean_job(jb2):
            jb3 = jb1.create_job("test_get_multi_nested_job_recursive_3",
                                 FolderJob)
            with clean_job(jb3):
                jb4 = jb3.create_job("test_get_multi_nested_job_recursive_4",
                                     FreestyleJob)
                with clean_job(jb4):
                    res = jk.all_jobs
                    assert len(res) == 4
                    assert jb1 in res
                    assert jb2 in res
                    assert jb3 in res
                    assert jb4 in res
Пример #32
0
def test_job(request, jenkins_env):
    """Test fixture that creates a Jenkins Freestyle job for testing purposes

    The generated job is automatically cleaned up at the end of the test
    suite, which is defined as all of the methods contained within the same
    class.

    The expectation here is that tests that share this generated job will
    only perform read operations on the job and will not change it's state.
    This will ensure the tests within the suite don't affect one another.
    """
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    request.cls.jenkins = jk
    request.cls.job = jk.create_job(request.cls.__name__ + "Job", FreestyleJob)
    assert request.cls.job is not None

    yield

    request.cls.job.delete()
Пример #33
0
def test_get_last_unsuccessful_build(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_get_last_unsuccessful_build", FreestyleJob)
    with clean_job(jb):
        jb.quiet_period = 0
        rcode = 12
        failing_step = ShellBuilder.instantiate("exit " + str(rcode))
        failing_step.unstable_return_code = rcode
        jb.add_builder(failing_step)
        async_assert(lambda: jb.builders)

        jb.start_build()
        async_assert(lambda: jb.last_unsuccessful_build)
        bld = jb.last_unsuccessful_build

        assert bld is not None
        assert isinstance(bld, Build)
        assert bld.number == 1
        assert bld.result == "UNSTABLE"
Пример #34
0
def test_get_view_metrics(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_get_view_metrics_job"
    jb = jk.create_job(expected_job_name, FreestyleJob)
    with clean_job(jb):
        jb.disable()
        result = jk.default_view.view_metrics
        expected_keys = [
            'unstable_jobs', 'unstable_jobs_count', 'broken_jobs_count',
            'disabled_jobs', 'disabled_jobs_count', 'broken_jobs'
        ]

        for cur_key in expected_keys:
            assert cur_key in result.keys()
        assert result['broken_jobs_count'] == 0
        assert result['disabled_jobs_count'] == 1
        assert result['unstable_jobs_count'] == 0
        assert isinstance(result['disabled_jobs'], list)
        assert len(result['disabled_jobs']) == 1
        assert result['disabled_jobs'][0].name == expected_job_name
Пример #35
0
def test_rename_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    original_job_name = "test_rename_job1"
    new_job_name = "test_rename_job2"
    jb = jk.create_job(original_job_name, FreestyleJob)
    try:
        jb.rename(new_job_name)
        assert jk.find_job(original_job_name) is None
        jb_copy = jk.find_job(new_job_name)
        assert jb_copy is not None
        assert jb.name == new_job_name
        assert jb_copy == jb
    finally:
        tmp = jk.find_job(original_job_name)
        if tmp:
            tmp.delete()

        tmp = jk.find_job(new_job_name)
        if tmp:
            tmp.delete()
Пример #36
0
def test_multiple_blocking_jobs(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    job_name = "test_multiple_blocking_jobs"
    jb = jk.create_job(job_name, FreestyleJob)
    with clean_job(jb):
        expected_jobs = ["MyCoolJob1", "MyCoolJob2"]
        build_blocker = BuildBlockerProperty.create(["ShouldNotSeeMe"])
        build_blocker.blockers = expected_jobs
        jb.add_property(build_blocker)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(job_name).properties)
        properties = jk.find_job(job_name).properties

        prop = properties[0]
        blockers = prop.blockers
        assert isinstance(blockers, list)
        assert len(blockers) == 2
        assert expected_jobs[0] in blockers
        assert expected_jobs[1] in blockers
Пример #37
0
def test_rename_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"],
                 (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    parent = jk.create_job("test_rename_job_parent", FolderJob)
    with clean_job(parent):
        original_job_name = "test_rename_job1"
        new_job_name = "test_rename_job2"
        jb = parent.create_job(original_job_name, FreestyleJob)
        try:
            jb.rename(new_job_name)
            assert parent.find_job(original_job_name) is None
            jb_copy = parent.find_job(new_job_name)
            assert jb_copy is not None
            assert jb.name == new_job_name
            assert jb_copy == jb
        finally:
            tmp = parent.find_job(original_job_name)
            if tmp:
                tmp.delete()

            tmp = parent.find_job(new_job_name)
            if tmp:
                tmp.delete()
Пример #38
0
def test_abort(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    expected_job_name = "test_abort"
    jb = jk.create_job(expected_job_name, FreestyleJob)

    with clean_job(jb):
        jb.quiet_period = 0
        shell_builder = ShellBuilder.instantiate("echo 'waiting for sleep' && sleep 40")
        jb.add_builder(shell_builder)

        # Get a fresh copy of our job to ensure we have an up to date
        # copy of the config.xml for the job
        async_assert(lambda: jk.find_job(expected_job_name).builders)

        # Trigger a build and wait for it to complete
        jb.start_build()
        async_assert(lambda: jb.last_build)

        async_assert(lambda: "waiting for sleep" in jb.last_build.console_output)

        jb.last_build.abort()

        assert jb.last_build.is_building is False
        assert jb.last_build.result == "ABORTED"
Пример #39
0
def test_create_pipeline_job(jenkins_env):
    jk = Jenkins(jenkins_env["url"], (jenkins_env["admin_user"], jenkins_env["admin_token"]))
    jb = jk.create_job("test_create_pipeline_job", PipelineJob)
    with clean_job(jb):
        assert jb is not None