async def test_job_exists(jenkins): # TC: unavailable job must not exist assert (await jenkins.jobs.is_exists(str(time.time()))) is False # TC: just created job must exist async with CreateJob(jenkins) as job_name: assert (await jenkins.jobs.is_exists(job_name)) is True
async def test_build_stop_delete(): job_config = dict( parameters=[dict(name='arg')], commands=['echo 1', 'echo 2'] ) async with CreateJob(**job_config) as job_name: await jenkins.nodes.enable('master') await jenkins.builds.start(job_name, dict(arg='test')) await asyncio.sleep(1) info = await jenkins.jobs.get_info(job_name) assert info['nextBuildNumber'] == 2 # parameters must be passed with pytest.raises(JenkinsError): await jenkins.builds.start(job_name) with pytest.raises(JenkinsError): await jenkins.builds.start(job_name, delay=1) await jenkins.builds.stop(job_name, 1) await jenkins.builds.get_info(job_name, 1) await jenkins.builds.delete(job_name, 1)
async def test_copy_job(jenkins): async with CreateJob(jenkins) as job_name: job_name_new = job_name + '_new' await jenkins.jobs.copy(job_name, job_name_new) try: available_jobs = await jenkins.jobs.get_all() assert job_name_new in available_jobs finally: await jenkins.jobs.delete(job_name_new)
async def test_build_exists(jenkins): async with CreateJob(jenkins) as job_name: # TC: just created job hasn't any builds yet assert (await jenkins.builds.is_exists(job_name, 1)) is False # TC: start build and check its existence await jenkins.builds.start(job_name) await asyncio.sleep(1) assert (await jenkins.builds.is_exists(job_name, 1)) is True
async def test_rename_job(jenkins): async with CreateJob(jenkins) as job_name: job_name_new = job_name + '_new' await jenkins.jobs.rename(job_name, job_name_new) available_jobs = await jenkins.jobs.get_all() assert job_name_new in available_jobs assert job_name not in available_jobs # for context manager success delete temporary job await jenkins.jobs.rename(job_name_new, job_name)
async def test_get_job_reconfigure(jenkins): async with CreateJob(jenkins) as job_name: config_old = await jenkins.jobs.get_config(job_name) config_new = config_old.replace( '<concurrentBuild>false</concurrentBuild>', '<concurrentBuild>true</concurrentBuild>' ) await jenkins.jobs.reconfigure(job_name, config_new) config = await jenkins.jobs.get_config(job_name) assert '<concurrentBuild>true</concurrentBuild>' in config
async def test_get_all_builds(): node_name = 'master' await jenkins.nodes.enable(node_name) async with CreateJob() as job_name: await jenkins.builds.start(job_name) await asyncio.sleep(1) builds = await jenkins.nodes.get_all_builds(node_name) assert len(builds) > 0 assert builds[-1]['job_name'] == job_name
async def test_build_queue_id(jenkins): version = await jenkins.get_version() # was introduced default admin with password if version.major < 2: pytest.skip('there is problem, probably queue id was not implemented') async with CreateJob(jenkins) as job_name: queue_id = await jenkins.builds.start(job_name) assert queue_id > 0 queue_id_info = await jenkins.builds.get_queue_id_info(queue_id) assert isinstance(queue_id_info, dict) is True
async def test_get_failed_builds(): node_name = 'master' await jenkins.nodes.enable(node_name) async with CreateJob(commands=['false']) as job_name: pre_failed_builds = await jenkins.nodes.get_failed_builds(node_name) await jenkins.builds.start(job_name) await asyncio.sleep(1) post_failed_builds = await jenkins.nodes.get_failed_builds(node_name) assert (len(post_failed_builds) - len(pre_failed_builds)) > 0 assert post_failed_builds[-1]['job_name'] == job_name
async def test_build_start(jenkins): arg_name = 'arg' arg_value = 'arg' config = dict(parameters=[dict(name=arg_name)]) async with CreateJob(jenkins, **config) as job_name: await jenkins.builds.start(job_name, {arg_name: arg_value}) await asyncio.sleep(1) job_info = await jenkins.jobs.get_info(job_name) last_build_number = job_info['lastBuild']['number'] build_info = await jenkins.builds.get_info(job_name, last_build_number) assert build_info['actions'][0]['parameters'][0]['value'] == arg_value
async def test_build_get_url_info(jenkins): # TC: invalid URL must raise the exception with pytest.raises(JenkinsError): await jenkins.builds.get_url_info('invalid') # TC: correct build url must return info (dict) async with CreateJob(jenkins) as job_name: await jenkins.builds.start(job_name) await asyncio.sleep(1) job_info = await jenkins.jobs.get_info(job_name) build_url = job_info['builds'][-1]['url'] build_info = await jenkins.builds.get_url_info(build_url) assert isinstance(build_info, dict) is True
async def test_build_list(jenkins): async with CreateJob(jenkins, parameters=[dict(name='arg')]) as job_name: # TC: just created job must not has any builds builds = await jenkins.builds.get_all(job_name) assert len(builds) == 0 # TC: build list must contain something after build triggered await jenkins.nodes.enable('master') await jenkins.builds.start(job_name, dict(arg=0)) info = await jenkins.jobs.get_info(job_name) builds = await jenkins.builds.get_all(job_name) assert (info['inQueue'] is True or len(builds) > 0) if not info['inQueue']: last_build_id = builds[-1]['number'] output = await jenkins.builds.get_output(job_name, last_build_id) assert len(output) > 0
async def test_tokens(jenkins): version = await jenkins.get_version() if not (version.major >= 2 and version.minor >= 129): pytest.skip('Version isn`t support API tokens') async with CreateJob(jenkins) as job_name: token_value, token_uuid = await jenkins.generate_token('') token_name = str(time.time()) token_value, token_uuid = await jenkins.generate_token(token_name) await jenkins.nodes.enable('master') # instance without credentials jenkins_tokened = Jenkins(get_host(), get_login(), token_value) await jenkins_tokened.builds.start(job_name) await jenkins.revoke_token(token_uuid) with pytest.raises(JenkinsError): await jenkins_tokened.builds.start(job_name)
async def test_get_job_info(jenkins): async with CreateJob(jenkins) as job_name: info = await jenkins.jobs.get_info(job_name) assert isinstance(info, dict)
async def test_enable_job(jenkins): async with CreateJob(jenkins) as job_name: await jenkins.jobs.disable(job_name) await jenkins.jobs.enable(job_name) job_info = await jenkins.jobs.get_info(job_name) assert job_info['color'] != 'disabled'
async def test_get_job_config(jenkins): async with CreateJob(jenkins) as job_name: config = await jenkins.jobs.get_config(job_name) assert len(config) > 0
async def test_create_job(jenkins): async with CreateJob(jenkins) as job_name: available_jobs = await jenkins.jobs.get_all() assert job_name in available_jobs
async def test_delete_job(jenkins): with contextlib.suppress(JenkinsNotFoundError): async with CreateJob(jenkins) as job_name: await jenkins.jobs.delete(job_name) available_jobs = await jenkins.jobs.get_all() assert job_name not in available_jobs