summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/suse-hello-kmp-default.rpmbin0 -> 6709 bytes
-rw-r--r--test/test_obs_build_api.py217
2 files changed, 178 insertions, 39 deletions
diff --git a/test/suse-hello-kmp-default.rpm b/test/suse-hello-kmp-default.rpm
new file mode 100644
index 0000000..bb9041a
--- /dev/null
+++ b/test/suse-hello-kmp-default.rpm
Binary files differ
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