diff options
Diffstat (limited to 'test/test_obs_build_api.py')
| -rw-r--r-- | test/test_obs_build_api.py | 217 |
1 files changed, 178 insertions, 39 deletions
diff --git a/test/test_obs_build_api.py b/test/test_obs_build_api.py index 39b6868..69370b3 100644 --- a/test/test_obs_build_api.py +++ b/test/test_obs_build_api.py @@ -1,5 +1,7 @@ +import os +import pytest from obsapi.buildapi import ObsBuildApi -from lxml import etree +from unittest.mock import MagicMock prj = 'home:sbahling:obsapi:test' pkg = 'suse-hello-1.0' @@ -8,125 +10,262 @@ arch = 'x86_64' buildapi = ObsBuildApi(apiurl='https://api.opensuse.org') +test_dir = os.path.split(os.path.abspath(__file__))[0] -def test_build_get(): + +@pytest.fixture(autouse=True) +def setup_mock_get(monkeypatch): + mock_response = MagicMock() + mock_response.status_code = 200 + mock_get = MagicMock(return_value=mock_response) + monkeypatch.setattr('requests.get', mock_get) + return(mock_get, mock_response) + + +# GET /build/ +# Result: directory listing as xml +def test_build_get(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<directory></directory>' xml = buildapi.get() + assert mock_get.call_args[0][0] == '{}/build/'.format(buildapi.apiurl) assert '<directory>' in xml -def test_build_get_prj(): +# GET /build/<project> +# Result: directory listing as xml +def test_build_get_prj(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<directory></directory>' xml = buildapi.get(prj) + assert mock_get.call_args[0][0] == '{}/build/{}'.format(buildapi.apiurl, prj) assert '<directory>' in xml -def test_build_get_repo(): +# GET /build/<project>/<repository> +# Result: directory listing as xml +def test_build_get_repo(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<directory></directory>' xml = buildapi.get(prj, repo) + assert mock_get.call_args[0][0] == '{}/build/{}/{}'.format(buildapi.apiurl, prj, repo) assert '<directory>' in xml -def test_build_get_arch(): +# GET /build/<project>/<repository>/<arch> +# Result: directory listing as xml +def test_build_get_arch(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<directory></directory>' xml = buildapi.get(prj, repo, arch) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch) assert '<directory>' in xml -def test_build_get_binary_list(): +# GET /build/<project>/<repository>/<arch>/<package> +# Result: binarylist as xml +def test_build_get_binary_list(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<binarylist></binarylist>' xml = buildapi.get(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg) assert '<binarylist>' in xml - assert '<binary filename="suse-hello-1.0-1.1.src.rpm"' in xml -def test_build_get_binary(): +# Not official api call +# GET /build/<project>/<repository>/<arch>/_statistics +# Result: buildstatistics as xml +def test_build_get_binary(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.content = '<buildstatistics></buildstatistics>' bname = '_statistics' binary = buildapi.get(prj, repo, arch, pkg, bname) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) assert '<buildstatistics>' in str(binary) -def test_build_get_binary_fileinfo(): +# GET /build/<project>/<repository>/<arch>/<package>?view=fileinfo +# Result: fileinfo as xml +def test_build_get_binary_fileinfo(setup_mock_get): + mock_get, mock_response = setup_mock_get bname = 'suse-hello-1.0-1.1.src.rpm' + mock_response.content = '<fileinfo filename="{}"></fileinfo>'.format(bname) xml = buildapi.get(prj, repo, arch, pkg, bname, view='fileinfo') + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) + assert mock_get.call_args[1]['params']['view'] == 'fileinfo' assert '<fileinfo filename="{}">'.format(bname) in str(xml) -def test_build_get_binary_fileinfo_ext(): +# GET /build/<project>/<repository>/<arch>/<package>?view=fileinfo_ext +# Result: fileinfo as xml +def test_build_get_binary_fileinfo_ext(setup_mock_get): + mock_get, mock_response = setup_mock_get bname = 'suse-hello-1.0-1.1.src.rpm' + mock_response.content = '<fileinfo filename="{}"></fileinfo>'.format(bname) xml = buildapi.get(prj, repo, arch, pkg, bname, view='fileinfo_ext') + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) + assert mock_get.call_args[1]['params']['view'] == 'fileinfo_ext' assert '<fileinfo filename="{}">'.format(bname) in str(xml) - assert '<requires_ext' in str(xml) -def test_build_get_builddepinfo(): +# GET /build/<project>/<repository>/<arch>/_builddepinfo +# Result: builddepinfo as xml +def test_build_get_builddepinfo(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<builddepinfo></builddepinfo>' xml = buildapi.get_builddepinfo(prj, pkg, repo, arch) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/_builddepinfo'.format(buildapi.apiurl, prj, repo, arch) + assert mock_get.call_args[1]['params']['package'] == pkg assert '<builddepinfo>' in xml -def test_build_get_buildconf(): +# GET /build/<project>/<repository>/<arch>/_buildconfig +# Result: buildconfig as text file +def test_build_get_buildconfig(setup_mock_get): + mock_buildconfig = """%define _project home:sbahling:obsapi:test + +### from SUSE:SLE-12-SP3:GA +%define _repository SLED + +Macros: +%vendor obs://build.opensuse.org/home:sbahling:obsapi:test +%_download_url http://download.opensuse.org/repositories +%_project home:sbahling:obsapi:test +""" + mock_get, mock_response = setup_mock_get + mock_response.text = mock_buildconfig buildconfig = buildapi.get_buildconfig(prj, repo) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/_buildconfig'.format(buildapi.apiurl, prj, repo) assert '%define _project home:sbahling:obsapi:test' in buildconfig -def test_build_get_buildinfo(): +# GET /build/<project>/<repository>/<arch>/<package>/_buildinfo +# Result: buildinfo as xml +def test_build_get_buildinfo(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<buildinfo></buildinfo>' xml = buildapi.get_buildinfo(prj, pkg, repo, arch) - assert '<buildinfo ' in xml + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_buildinfo'.format(buildapi.apiurl, prj, repo, arch, pkg) + assert '<buildinfo' in xml -def test_build_get_jobhistory(): +# GET /build/<project>/<repository>/<arch>/_jobhistory +# Result: jobhistlist as xml +def test_build_get_jobhistory(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<jobhistlist></jobhistlist>' xml = buildapi.get_jobhistory(prj, repo, arch) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/_jobhistory'.format(buildapi.apiurl, prj, repo, arch) assert '<jobhistlist>' in xml -def test_build_get_jobhistory_pkg(): +# GET /build/<project>/<repository>/<arch>/_jobhistory?package=<package> +# Result: jobhistlist as xml +def test_build_get_jobhistory_pkg(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<jobhistlist></jobhistlist>' xml = buildapi.get_jobhistory(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/_jobhistory'.format(buildapi.apiurl, prj, repo, arch) + assert mock_get.call_args[1]['params']['package'] == pkg assert '<jobhistlist>' in xml -def test_build_get_result(): +# Undocumented api ?? +def test_build_get_result(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<resultlist></resultlist>' xml = buildapi.get_result(prj) + assert mock_get.call_args[0][0] == '{}/build/{}/_result'.format(buildapi.apiurl, prj) assert '<resultlist' in xml -def test_build_get_workerstatus(): +# Undocumented api ?? +def test_build_get_workerstatus(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<workerstatus></workerstatus>' xml = buildapi.get_workstatus() + assert mock_get.call_args[0][0] == '{}/build/_workerstatus'.format(buildapi.apiurl) assert '<workerstatus' in xml -def test_build_get_history(): +# GET /build/<project>/<repository>/<arch>/<package>/_history +# Result: buildhistory as xml +def test_build_get_history(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<buildhistory></buildhistory>' xml = buildapi.get_history(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_history'.format(buildapi.apiurl, prj, repo, arch, pkg) assert '<buildhistory>' in xml -def test_build_get_reason(): +# GET /build/<project>/<repository>/<arch>/<package>/_reason +# Result: build reason as xml +def test_build_get_reason(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<reason></reason>' xml = buildapi.get_reason(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_reason'.format(buildapi.apiurl, prj, repo, arch, pkg) assert '<reason>' in xml -# def test_build_get_jobstatus(): -# xml = buildapi.get_jobstatus(prj, repo, arch, pkg) -# assert '<None/>' in xml +# GET /build/<project>/<repository>/<arch>/<package>/_jobstatus +# Result: jobstatus as xml +def test_build_get_jobstatus(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<jobstatus/>' + xml = buildapi.get_jobstatus(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_jobstatus'.format(buildapi.apiurl, prj, repo, arch, pkg) + assert '<jobstatus/>' in xml -def test_build_get_status(): +# GET /build/<project>/<repository>/<arch>/<package>/_status +# Result: build status as xml +def test_build_get_status(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<status></status>' xml = buildapi.get_status(prj, repo, arch, pkg) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_status'.format(buildapi.apiurl, prj, repo, arch, pkg) assert '<status' in xml -def test_build_get_log(): - log = buildapi.get_log(prj, repo, arch, pkg) +# GET /build/<project>/<repository>/<arch>/<package>/_log +# Result: build log as text file +# params: nostream, last, lastsucceeded, start, end, view=entry +@pytest.mark.parametrize('params', ({}, + {'nostream': 1}, + {'view': 'entry', 'last': 1, + 'start': 100, 'end': 500}, + {'view': 'entry', 'lastsucceeded': 1, + 'start': 100, 'end': 500}, + )) +def test_build_get_log(setup_mock_get, params): + mock_get, mock_response = setup_mock_get + mock_response.text = '[ 0s] Start of log' + log = buildapi.get_log(prj, repo, arch, pkg, **params) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/{}/_log'.format(buildapi.apiurl, prj, repo, arch, pkg) + assert mock_get.call_args[1]['params'] == params assert '[ 0s]' in log -def test_build_get_repository(): +# GET /build/<project>/<repository>/<arch>/_repository +# Result: binarylist +def test_build_get_repository(setup_mock_get): + mock_get, mock_response = setup_mock_get + mock_response.text = '<binarylist></binarylist>' xml = buildapi.get_repository(prj, repo, arch) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/_repository'.format(buildapi.apiurl, prj, repo, arch) + assert mock_get.call_args[1]['params']['view'] is None assert '<binarylist' in xml -def test_build_get_repository_binary(): - xml = buildapi.get_repository(prj, repo, arch) - root = etree.fromstring(xml) - entries = root.findall('binary') - assert entries is not None - for entry in entries: - bname = entry.get('filename') - size = entry.get('size') - binary = buildapi.get_repository(prj, repo, arch, bname) - assert binary is not None - assert len(binary) == int(size) +# GET /build/<project>/<repository>/<arch>/_repository/<binaryname> +# Result: binary file +def test_build_get_repository_binary(setup_mock_get): + mock_get, mock_response = setup_mock_get + bname = 'suse-hello-kmp-default.rpm' + with open(os.path.join(test_dir, bname), 'rb') as f: + mock_response.content = f.read() + binary = buildapi.get_repository(prj, repo, arch, bname) + assert mock_get.call_args[0][0] == '{}/build/{}/{}/{}/_repository/{}'.format(buildapi.apiurl, prj, repo, arch, bname) + assert mock_get.call_args[1]['params']['view'] is None + assert binary == mock_response.content |
