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