Esempio n. 1
0
def build_immovable_wombats(folder, jobs):

    config = "config/buildorama.yml"
    logger, tkonf = setup_test_config(config)
    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    agicen_konf = tkonf.topLevel('AgileCentral')
    jenk_conf = tkonf.topLevel('Jenkins')
    jenkins_url = jsh.construct_jenkins_url(jenk_conf)
    tkonf.add_to_container({
        'Folder': folder,
        'AgileCentral_Project': 'Static',
        'exclude': jobs[1]
    })
    tkonf.remove_from_container({'Folder': 'Parkour'})
    tkonf.remove_from_container({'View': 'Prairie'})
    tkonf.remove_from_container({'View': 'Shoreline'})
    tkonf.remove_from_container({'Job': 'troglodyte'})
    tkonf.remove_from_container({'Job': 'truculent elk medallions'})
    assert folder in [
        folder_rec['Folder'] for folder_rec in jenk_conf['Folders']
    ]

    for job in jobs:
        r = jsh.build(jenk_conf, jenkins_url, job, folder=folder)

    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()

    return jc
Esempio n. 2
0
def test_config_defaults():
    #config_file = ('defaults.yml')
    logger = ActivityLogger('log/defaults.log')
    konf = Konfabulator('config/defaults.yml', logger)
    jenk_conf = konf.topLevel('Jenkins')
    ac_conf = konf.topLevel('AgileCentral')
    srv_config = konf.topLevel('Service')
    assert not ac_conf.get('Server', None)
    assert not jenk_conf.get('Server', None)

    # runner = BuildConnectorRunner([config_file])
    # runner.run()

    agicen = bsh.AgileCentralConnection(konf.topLevel('AgileCentral'), logger)
    agicen.other_name = 'Jenkins'
    agicen.project_name = jenk_conf['AgileCentral_DefaultBuildProject']
    agicen.connect()
    assert agicen.server == 'rally1.rallydev.com'
    assert not agicen.proxy

    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()
    assert jc.server == 'coyotepair.ca.com'
    assert jc.port == 8080
    assert jc.protocol == 'http'
Esempio n. 3
0
def test_find_builds_of_two_jobs():
    t = datetime.now() - timedelta(minutes=60)
    ref_time = t.utctimetuple()
    job1 = "troblodyte{}".format(time.time())
    job2 = "fukebane{}".format(time.time())
    two_jobs = [job1, job2]
    config = "config/buildorama.yml"
    logger, tkonf = sh.setup_test_config(config)

    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    jenk_conf = tkonf.topLevel('Jenkins')

    jenkins_url = jsh.construct_jenkins_url(jenk_conf)

    r1 = jsh.create_job(jenk_conf, jenkins_url, job1)
    assert r1.status_code in [200, 201]
    tkonf.add_to_container({'Job': job1})

    r1 = jsh.create_job(jenk_conf, jenkins_url, job2)
    assert r1.status_code in [200, 201]
    tkonf.add_to_container({'Job': job2})

    # create two build for the same job
    r2 = jsh.build(jenk_conf, jenkins_url, job1)
    assert r2.status_code in [200, 201]
    time.sleep(10)
    r2 = jsh.build(jenk_conf, jenkins_url, job2)
    assert r2.status_code in [200, 201]

    time.sleep(10)
    # find two builds
    target_job_builds = []
    time.sleep(10)
    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()
    jc.validate()
    builds = jc.getRecentBuilds(ref_time)

    view = 'All'  # because we created the two jobs at the top level
    bkey = "%s::%s" % (view, jenk_conf['AgileCentral_DefaultBuildProject'])
    target_builds = builds[
        bkey]  # target_builds is a dict keyed by a JenkinsJob instance
    build_jobs = [job for job in target_builds if job.name in [job1, job2]]

    # for key, val in builds.items():
    #     print(key)
    #     # for k, v in val.items():
    #     #    print("...k: %s, v: %s" % (k, v))
    #     for builds in val.values():
    #         for build in builds:
    #             print("    %s" % build)

    assert len(build_jobs) == 2

    # delete the jobs
    for job_name in two_jobs:
        r3 = jsh.delete_job(jenk_conf, jenkins_url, job_name)
        assert r3.status_code == 200
Esempio n. 4
0
def connect_to_jenkins(config_file):
    config_file = "config/{}".format(config_file)
    jenk_conf = {}
    with open(config_file, 'r') as cf:
        content = cf.read()
        all_conf = yaml.load(content)
        jenk_conf = all_conf['JenkinsBuildConnector']['Jenkins']

    jc = bsh.JenkinsConnection(jenk_conf, ActivityLogger('inventory.log'))
    return jc
Esempio n. 5
0
def test_compare_regular_build_time():
    two_days_ago = bsh.epochSeconds("-2d")
    mock_build = bsh.MockJenkinsBuild("fukebane", 13, "Yuge Disaxter",
                                      two_days_ago, 34)
    ref_time = time.strptime("2015-10-23T10:23:45Z", '%Y-%m-%dT%H:%M:%SZ')
    logger = bsh.ActivityLogger('test.log')
    konf = bsh.Konfabulator('config/trumpkin.yaml', logger)
    jenkins_conf = konf.topLevel('Jenkins')
    jc = bsh.JenkinsConnection(jenkins_conf, logger)
    result = mock_build.id_as_ts < ref_time
    assert result == False
Esempio n. 6
0
def test_depth():
    t = datetime.now() - timedelta(minutes=2)
    ref_time = t.utctimetuple()
    naked_job = "freddy-flintstone"
    config = "config/buildorama.yml"
    logger, tkonf = sh.setup_test_config(config)

    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    jenk_conf = tkonf.topLevel('Jenkins')

    jc = bsh.JenkinsConnection(jenk_conf, logger)
    assert (jc.connect()) == True
    assert jc.validate()

    assert 'freddy-flintstone' not in jc.all_jobs
Esempio n. 7
0
def test_folder_config():
    t = datetime.now() - timedelta(minutes=60)
    ref_time = t.utctimetuple()
    folder = "A{}".format(time.time())
    job_name = "frog"

    config = "config/buildorama.yml"
    logger, tkonf = sh.setup_test_config(config)
    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    jenk_conf = tkonf.topLevel('Jenkins')
    jenkins_url = jsh.construct_jenkins_url(jenk_conf)

    # create a jenkins folder and a job in the folder
    r0 = jsh.create_folder(jenk_conf, jenkins_url, folder)
    assert r0.status_code in [200, 201]

    r1 = jsh.create_job(jenk_conf, jenkins_url, job_name, folder=folder)
    assert r1.status_code in [200, 201]

    # build in jenkins
    r2 = jsh.build(jenk_conf, jenkins_url, job_name, folder=folder)
    assert r2.status_code in [200, 201]
    time.sleep(10)

    tkonf.topLevel(
        'Jenkins')['AgileCentral_DefaultBuildProject'] = 'Dunder Donut'
    tkonf.add_to_container({'Folder': folder})
    assert tkonf.has_item('Folder', folder)

    jenk_conf = tkonf.topLevel('Jenkins')
    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()
    jc.validate()
    builds = jc.getRecentBuilds(ref_time)
    bkey = "%s::%s" % (folder, jenk_conf['AgileCentral_DefaultBuildProject'])
    target_builds = builds[
        bkey]  # target_builds is a dict keyed by a JenkinsJob instance
    build_jobs = [job for job in target_builds if job.name == job_name]
    assert len(build_jobs) == 1

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job_name, folder=folder)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, folder)
    assert r3.status_code == 200
Esempio n. 8
0
def test_same_name_jobs_in_diff_folders():
    folder1 = "A1{}".format(time.time())
    folder2 = "A2{}".format(time.time())
    job_name = "frog"

    config = "config/buildorama.yml"
    logger, tkonf = sh.setup_test_config(config)
    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    agicen_konf = tkonf.topLevel('AgileCentral')
    agicen_konf['Workspace'] = 'Alligators BLD Unigrations'
    tkonf.topLevel('Jenkins')['AgileCentral_DefaultBuildProject'] = 'Jenkins'
    jenk_conf = tkonf.topLevel('Jenkins')
    jenkins_url = jsh.construct_jenkins_url(jenk_conf)

    r0 = jsh.create_folder(jenk_conf, jenkins_url, folder1)
    assert r0.status_code in [200, 201]
    r0 = jsh.create_folder(jenk_conf, jenkins_url, folder2)
    assert r0.status_code in [200, 201]

    r1 = jsh.create_job(jenk_conf, jenkins_url, job_name, folder=folder1)
    assert r1.status_code in [200, 201]

    r1 = jsh.create_job(jenk_conf, jenkins_url, job_name, folder=folder2)
    assert r1.status_code in [200, 201]

    tkonf.add_to_container({
        'Folder': folder1,
        'AgileCentral_Project': 'Dunder Donut'
    })
    tkonf.add_to_container({
        'Folder': folder2,
        'AgileCentral_Project': 'Corral'
    })
    tkonf.remove_from_container({'Folder': 'Parkour'})
    tkonf.remove_from_container({'View': 'Shoreline'})
    tkonf.remove_from_container({'Job': 'truculent elk medallions'})

    assert tkonf.has_item('Folder', folder1)
    assert tkonf.has_item('Folder', folder2)
    assert tkonf.has_item('Folder', 'Parkour') == False

    ref_time = datetime.now() - timedelta(minutes=5)

    jenkins_url = jsh.construct_jenkins_url(jenk_conf)

    r1 = jsh.build(jenk_conf, jenkins_url, job_name, folder=folder1)
    assert r1.status_code in [200, 201]
    time.sleep(10)

    r2 = jsh.build(jenk_conf, jenkins_url, job_name, folder=folder2)
    assert r2.status_code in [200, 201]
    time.sleep(10)

    assert folder1 in [
        folder_rec['Folder'] for folder_rec in jenk_conf['Folders']
    ]
    assert folder2 in [
        folder_rec['Folder'] for folder_rec in jenk_conf['Folders']
    ]
    assert 'Parkour' not in [
        folder_rec['Folder'] for folder_rec in jenk_conf['Folders']
    ]

    # find two builds
    target_job_builds = []
    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()
    jc.validate()
    jenkins_builds = jc.getRecentBuilds(ref_time.utctimetuple())

    bc = bsh.BLDConnector(tkonf, logger)
    query = ['CreationDate >= %s' % ref_time.isoformat()]
    for view_proj, build_view in jenkins_builds.items():
        print(view_proj)
        for builds in build_view.values():
            for bld in builds:
                print("    %s" % bld)
                project = view_proj.split('::')[1]
                print("PROJECT %s" % project)
                build_defn = bc.agicen_conn.ensureBuildDefinitionExists(
                    job_name, project, bld.url)
                assert build_defn.Project.Name == project
                agicen_build, status = bc.postBuildToAgileCentral(
                    build_defn, bld, [], job_name)
                assert agicen_build is not None
                assert agicen_build.BuildDefinition.Project.Name == project
                ac_response = bc.agicen_conn._retrieveBuilds(project, query)
                for build in ac_response:
                    print("    %24.24s Job Name: %24.24s build number: %s " %
                          (build.BuildDefinition.Project.Name,
                           build.BuildDefinition.Name, build.Number))
                    if build.BuildDefinition.Project.Name != project:
                        for proj in bc.agicen_conn.build_def.keys():
                            print("build_defn project: %s" % proj)
                            project_jobs = bc.agicen_conn.build_def[proj].keys(
                            )
                            for job in project_jobs:
                                print("    %s:   %s" %
                                      (job, bc.agicen_conn.build_def[proj]
                                       [job].Project.Name))
                    assert (build.BuildDefinition.Project.Name) == project
                    assert (build.BuildDefinition.Name) == job_name

    # delete the jobs

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job_name, folder=folder1)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job_name, folder=folder2)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, folder1)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, folder2)
    assert r3.status_code == 200
Esempio n. 9
0
def test_find_builds_in_different_containers():
    t = datetime.now() - timedelta(minutes=60)
    ref_time = t.utctimetuple()
    folder1 = "friendly amphibian{}".format(time.time())
    folder2 = "unfriendly amphibian{}".format(time.time())

    job1 = "naked-troblodyte{}".format(time.time())
    job2 = "foldered-fukebane{}".format(time.time())
    job3 = "ignore-it{}".format(time.time())

    three_jobs = [job1, job2, job3]
    config = "config/buildorama.yml"
    logger, tkonf = sh.setup_test_config(config)

    assert tkonf.topLevels() == ['AgileCentral', 'Jenkins', 'Service']
    jenk_conf = tkonf.topLevel('Jenkins')

    jenkins_url = jsh.construct_jenkins_url(jenk_conf)

    r0 = jsh.create_folder(jenk_conf, jenkins_url, folder1)
    assert r0.status_code in [200, 201]

    r0 = jsh.create_folder(jenk_conf, jenkins_url, folder2)
    assert r0.status_code in [200, 201]

    r1 = jsh.create_job(jenk_conf, jenkins_url, job1)
    assert r1.status_code in [200, 201]
    tkonf.add_to_container({'Job': job1})

    r1 = jsh.create_job(jenk_conf, jenkins_url, job2, folder=folder1)
    assert r1.status_code in [200, 201]
    tkonf.add_to_container({'Folder': folder1})

    # create a job in a folder in Jenkins but do not add this folder name to config
    r1 = jsh.create_job(jenk_conf, jenkins_url, job3, folder=folder2)
    assert r1.status_code in [200, 201]

    # check if new containers were added
    assert tkonf.has_item('Folder', folder1)
    #assert tkonf.has_item('Folder', folder2)

    # create two builds for the same job
    r2 = jsh.build(jenk_conf, jenkins_url, job1)
    assert r2.status_code in [200, 201]
    time.sleep(10)

    r2 = jsh.build(jenk_conf, jenkins_url, job2, folder=folder1)
    assert r2.status_code in [200, 201]
    time.sleep(10)

    r2 = jsh.build(jenk_conf, jenkins_url, job3, folder=folder2)
    assert r2.status_code in [200, 201]
    time.sleep(10)

    # find two builds: a build for job3 should not be found
    target_job_builds = []
    time.sleep(10)
    jc = bsh.JenkinsConnection(jenk_conf, logger)
    jc.connect()
    jc.validate()
    builds = jc.getRecentBuilds(ref_time)

    view = 'All'

    bkey1 = "%s::%s" % (view, jenk_conf['AgileCentral_DefaultBuildProject'])
    target_builds = builds[
        bkey1]  # target_builds is a dict keyed by a JenkinsJob instance
    build_jobs1 = [job for job in target_builds if job.name == job1]

    bkey2 = "%s::%s" % (folder1, jenk_conf['AgileCentral_DefaultBuildProject'])
    target_builds = builds[
        bkey2]  # target_builds is a dict keyed by a JenkinsJob instance
    build_jobs2 = [job for job in target_builds if job.name == job2]

    bkey3 = "%s::%s" % (folder2, jenk_conf['AgileCentral_DefaultBuildProject'])
    assert bkey3 not in builds
    #target_builds = builds[bkey3]  # target_builds is a dict keyed by a JenkinsJob instance
    #build_jobs3 = [job for job in target_builds if job.name == job3]

    # for key, val in builds.items():
    #     print("key: %s, val: %s" % (key, val))
    #     print(key)
    #     # for k, v in val.items():
    #     #    print("...k: %s, v: %s" % (k, v))
    #     for builds in val.values():
    #         for build in builds:
    #             print("    %s" % build)

    assert len(build_jobs1) == 1
    assert len(build_jobs2) == 1

    # delete the jobs

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job1)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job2, folder=folder1)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, job3, folder=folder2)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, folder1)
    assert r3.status_code == 200

    r3 = jsh.delete_job(jenk_conf, jenkins_url, folder2)
    assert r3.status_code == 200