summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorScott Bahling <sbahling@suse.com>2020-01-26 15:16:36 +0100
committerScott Bahling <sbahling@suse.com>2020-01-27 09:47:15 +0100
commitdd7d4c8583d22c224b31cf609b272da0414c70b3 (patch)
treebdf6cc5a44df5221519e9ea2748d265b2425954d /test
parentce1df1095b1962a4fde0ec39ac111fc89765d895 (diff)
downloadobsapi-dd7d4c8583d22c224b31cf609b272da0414c70b3.tar.gz
obsapi-dd7d4c8583d22c224b31cf609b272da0414c70b3.tar.xz
obsapi-dd7d4c8583d22c224b31cf609b272da0414c70b3.zip
Use unittest mocks for test cases
We simply test that the url and params are correct for the HTTP requests and that the result is returned to use properly
Diffstat (limited to 'test')
-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