import os import pytest from obsapi.buildapi import ObsBuildApi prj = 'home:sbahling:obsapi:test' pkg = 'suse-hello-1.0' repo = 'SLE_12_SP3' arch = 'x86_64' buildapi = ObsBuildApi(apiurl='https://api.opensuse.org') test_dir = os.path.split(os.path.abspath(__file__))[0] # GET /build/ # Result: directory listing as xml def test_build_get(requests_mock): uri = '{}/build/'.format(buildapi.apiurl) text = '' requests_mock.get(uri, text=text) xml = buildapi.get() assert xml == text # GET /build/ # Result: directory listing as xml def test_build_get_prj(requests_mock): uri = '{}/build/{}'.format(buildapi.apiurl, prj) text = '' requests_mock.get(uri, text=text) xml = buildapi.get(prj) assert xml == text # GET /build// # Result: directory listing as xml def test_build_get_repo(requests_mock): uri = '{}/build/{}/{}'.format(buildapi.apiurl, prj, repo) text = '' requests_mock.get(uri, text=text) xml = buildapi.get(prj, repo) assert xml == text # GET /build/// # Result: directory listing as xml def test_build_get_arch(requests_mock): uri = '{}/build/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch) text = '' requests_mock.get(uri, text=text) xml = buildapi.get(prj, repo, arch) assert xml == text # GET /build//// # Result: binarylist as xml def test_build_get_binary_list(requests_mock): uri = '{}/build/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get(prj, repo, arch, pkg) assert xml == text # Not official api call # GET /build////_statistics # Result: buildstatistics as xml def test_build_get_binary(requests_mock): bname = '_statistics' uri = '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) content = b'' requests_mock.get(uri, content=content) file_content = buildapi.get(prj, repo, arch, pkg, bname) assert file_content == content # GET /build////?view=fileinfo # Result: fileinfo as xml def test_build_get_binary_fileinfo(requests_mock): bname = b'suse-hello-1.0-1.1.src.rpm' uri = '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) content = b'' % bname requests_mock.get(uri, content=content) xml = buildapi.get(prj, repo, arch, pkg, bname, view='fileinfo') assert requests_mock.request_history[0].qs['view'][0] == 'fileinfo' assert xml == content # GET /build////?view=fileinfo_ext # Result: fileinfo as xml def test_build_get_binary_fileinfo_ext(requests_mock): bname = b'suse-hello-1.0-1.1.src.rpm' uri = '{}/build/{}/{}/{}/{}/{}'.format(buildapi.apiurl, prj, repo, arch, pkg, bname) content = b'' % bname requests_mock.get(uri, content=content) xml = buildapi.get(prj, repo, arch, pkg, bname, view='fileinfo_ext') assert requests_mock.request_history[0].qs['view'][0] == 'fileinfo_ext' assert xml == content # GET /build////_builddepinfo # Result: builddepinfo as xml def test_build_get_builddepinfo(requests_mock): uri = '{}/build/{}/{}/{}/_builddepinfo'.format(buildapi.apiurl, prj, repo, arch) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_builddepinfo(prj, pkg, repo, arch) assert xml == text # GET /build////_buildconfig # Result: buildconfig as text file def test_build_get_buildconfig(requests_mock): 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 """ text = mock_buildconfig uri = '{}/build/{}/{}/_buildconfig'.format(buildapi.apiurl, prj, repo) requests_mock.get(uri, text=text) buildconfig = buildapi.get_buildconfig(prj, repo) assert buildconfig == text # GET /build/////_buildinfo # Result: buildinfo as xml def test_build_get_buildinfo(requests_mock): uri = '{}/build/{}/{}/{}/{}/_buildinfo'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_buildinfo(prj, pkg, repo, arch) assert xml == text # GET /build////_jobhistory # Result: jobhistlist as xml def test_build_get_jobhistory(requests_mock): uri = '{}/build/{}/{}/{}/_jobhistory'.format(buildapi.apiurl, prj, repo, arch) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_jobhistory(prj, repo, arch) assert xml == text # GET /build////_jobhistory?package= # Result: jobhistlist as xml def test_build_get_jobhistory_pkg(requests_mock): uri = '{}/build/{}/{}/{}/_jobhistory'.format(buildapi.apiurl, prj, repo, arch) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_jobhistory(prj, repo, arch, pkg) assert len(requests_mock.request_history[0].qs['package']) == 1 assert requests_mock.request_history[0].qs['package'][0] == pkg assert xml == text # Undocumented api ?? def test_build_get_result(requests_mock): uri = '{}/build/{}/_result'.format(buildapi.apiurl, prj) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_result(prj) assert xml == text # Undocumented api ?? def test_build_get_workerstatus(requests_mock): uri = '{}/build/_workerstatus'.format(buildapi.apiurl) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_workstatus() assert xml == text # GET /build/////_history # Result: buildhistory as xml def test_build_get_history(requests_mock): uri = '{}/build/{}/{}/{}/{}/_history'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_history(prj, repo, arch, pkg) assert xml == text # GET /build/////_reason # Result: build reason as xml def test_build_get_reason(requests_mock): uri = '{}/build/{}/{}/{}/{}/_reason'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_reason(prj, repo, arch, pkg) assert xml == text # GET /build/////_jobstatus # Result: jobstatus as xml def test_build_get_jobstatus(requests_mock): uri = '{}/build/{}/{}/{}/{}/_jobstatus'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_jobstatus(prj, repo, arch, pkg) assert xml == text # GET /build/////_status # Result: build status as xml def test_build_get_status(requests_mock): uri = '{}/build/{}/{}/{}/{}/_status'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_status(prj, repo, arch, pkg) assert xml == text # GET /build/////_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(requests_mock, params): uri = '{}/build/{}/{}/{}/{}/_log'.format(buildapi.apiurl, prj, repo, arch, pkg) text = '[ 0s] Start of log' requests_mock.get(uri, text=text) log = buildapi.get_log(prj, repo, arch, pkg, **params) for key, value in params.items(): assert len(requests_mock.request_history[0].qs[key]) == 1 assert value == requests_mock.request_history[0].qs[key][0] assert log == text # GET /build////_repository # Result: binarylist def test_build_get_repository(requests_mock): uri = '{}/build/{}/{}/{}/_repository'.format(buildapi.apiurl, prj, repo, arch) text = '' requests_mock.get(uri, text=text) xml = buildapi.get_repository(prj, repo, arch) assert xml == text # GET /build////_repository/ # Result: binary file def test_build_get_repository_binary(requests_mock): bname = 'suse-hello-kmp-default.rpm' uri = '{}/build/{}/{}/{}/_repository/{}'.format(buildapi.apiurl, prj, repo, arch, bname) with open(os.path.join(test_dir, bname), 'rb') as f: data = f.read() requests_mock.get(uri, content=data) binary = buildapi.get_repository(prj, repo, arch, bname) assert binary == data