1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-01-23 21:36:13 +01:00
github.com_openSUSE_osc/tests/test_conf.py
Daniel Mach a2e7383eca Allow undefined fields in Options and HostOptions
Plugins seem to be using oscrc and osc.conf.config to store their config options.
All fields that are not known to osc are now stored in the 'extra_fields' dictionary
and handled in __getitem__() and __setitem__() as they were regular fields.
Such values are not checked for their types and the dictionary simply holds
strings obtained from oscrc or anything the plugins set through the python API.
2023-10-19 14:23:33 +02:00

460 lines
16 KiB
Python

import os
import shutil
import tempfile
import unittest
import osc.conf
OSCRC = """
[general]
apiurl = https://api.opensuse.org
user = Admin
pass = opensuse
passx = unused
sshkey = ~/.ssh/id_rsa.pub
packagecachedir = /var/tmp/osbuild-packagecache
su-wrapper = sudo
build-cmd = /usr/bin/build
build-type = kvm
build-root = /var/tmp/build-root/%(repo)s-%(arch)s
build-uid = 1000:1000
build-device = /dev/null
build-memory = 1024
build-shell-after-fail = 0
build-swap = /tmp/build-swap
build-vmdisk-rootsize = 10240
build-vmdisk-swapsize = 512
build-vmdisk-filesystem = ext4
build-vm-user = abuild
build-kernel = /boot/vmlinuz
build-initrd = /boot/initrd
download-assets-cmd = /usr/lib/build/download_assets
build-jobs = 4
builtin_signature_check = 1
icecream = 0
ccache = 0
sccache = 0
sccache_uri = file:///var/tmp/osbuild-sccache
buildlog_strip_time = 0
debug = 0
http_debug = 0
http_full_debug = 0
http_retries = 3
verbose = 0
no_preinstallimage = 0
traceback = 0
post_mortem = 0
use_keyring = 0
cookiejar = ~/.local/state/osc/cookiejar
no_verify = 0
disable_hdrmd5_check = 0
do_package_tracking = 1
extra-pkgs = vim strace
build_repository = openSUSE_Factory
getpac_default_project = openSUSE:Factory
checkout_no_colon = 0
project_separator = :
checkout_rooted = 0
exclude_glob = .osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.vctmp.*
print_web_links = 0
request_list_days = 0
check_filelist = 1
check_for_request_on_action = 1
submitrequest_on_accept_action = cleanup
request_show_interactive = 0
request_show_source_buildstatus = 0
review_inherit_group = 0
submitrequest_accepted_template = bla bla
submitrequest_declined_template = bla bla
linkcontrol = 0
include_request_from_project = 1
local_service_run = 1
include_files = incl *.incl
exclude_files = excl *.excl
maintained_attribute = OBS:Maintained
maintenance_attribute = OBS:MaintenanceProject
maintained_update_project_attribute = OBS:UpdateProject
show_download_progress = 0
vc-cmd = /usr/lib/build/vc
status_mtime_heuristic = 0
plugin-option = plugin-general-option
[https://api.opensuse.org]
credentials_mgr_class=osc.credentials.PlaintextConfigFileCredentialsManager
user = Admin
pass = opensuse
passx = unused
aliases = osc
http_headers =
Authorization: Basic QWRtaW46b3BlbnN1c2U=
X-Foo: Bar
realname = The Administrator
email = admin@example.com
cafile = /path/to/custom_cacert.pem
capath = /path/to/custom_cacert.d/
sslcertck = 1
trusted_prj = openSUSE:* SUSE:*
downloadurl = http://example.com/
sshkey = ~/.ssh/id_rsa.pub
disable_hdrmd5_check = 0
plugin-option = plugin-host-option
"""
class TestExampleConfig(unittest.TestCase):
def setUp(self):
self.tmpdir = tempfile.mkdtemp(prefix="osc_test_")
self.oscrc = os.path.join(self.tmpdir, "oscrc")
with open(self.oscrc, "w", encoding="utf-8") as f:
f.write(OSCRC)
osc.conf.get_config(override_conffile=self.oscrc)
self.config = osc.conf.config
def tearDown(self):
shutil.rmtree(self.tmpdir)
def test_apiurl(self):
self.assertEqual(self.config["apiurl"], "https://api.opensuse.org")
def test_user(self):
self.assertEqual(self.config["user"], "Admin")
def test_pass(self):
self.assertEqual(self.config["pass"], "opensuse")
def test_passx(self):
self.assertEqual(self.config["passx"], "unused")
def test_sshkey(self):
self.assertEqual(self.config["sshkey"], "~/.ssh/id_rsa.pub")
def test_packagecachedir(self):
self.assertEqual(self.config["packagecachedir"], "/var/tmp/osbuild-packagecache")
def test_su_wrapper(self):
self.assertEqual(self.config["su-wrapper"], "sudo")
def test_build_cmd(self):
self.assertEqual(self.config["build-cmd"], "/usr/bin/build")
def test_build_type(self):
self.assertEqual(self.config["build-type"], "kvm")
def test_build_root(self):
self.assertEqual(self.config["build-root"], "/var/tmp/build-root/%(repo)s-%(arch)s")
def test_build_uid(self):
self.assertEqual(self.config["build-uid"], "1000:1000")
def test_build_device(self):
self.assertEqual(self.config["build-device"], "/dev/null")
def test_build_memory(self):
self.assertEqual(self.config["build-memory"], 1024)
def test_build_shell_after_fail(self):
self.assertEqual(self.config["build-shell-after-fail"], False)
def test_build_swap(self):
self.assertEqual(self.config["build-swap"], "/tmp/build-swap")
def test_build_vmdisk_rootsize(self):
self.assertEqual(self.config["build-vmdisk-rootsize"], 10240)
def test_build_vmdisk_swapsize(self):
self.assertEqual(self.config["build-vmdisk-swapsize"], 512)
def test_build_vmdisk_filesystem(self):
self.assertEqual(self.config["build-vmdisk-filesystem"], "ext4")
def test_build_vm_user(self):
self.assertEqual(self.config["build-vm-user"], "abuild")
def test_build_kernel(self):
self.assertEqual(self.config["build-kernel"], "/boot/vmlinuz")
def test_build_initrd(self):
self.assertEqual(self.config["build-initrd"], "/boot/initrd")
def test_download_assets_cmd(self):
self.assertEqual(self.config["download-assets-cmd"], "/usr/lib/build/download_assets")
def test_build_jobs(self):
self.assertEqual(self.config["build-jobs"], 4)
def test_builtin_signature_check(self):
self.assertEqual(self.config["builtin_signature_check"], True)
def test_icecream(self):
self.assertEqual(self.config["icecream"], 0)
def test_ccache(self):
self.assertEqual(self.config["ccache"], False)
def test_sccache(self):
self.assertEqual(self.config["sccache"], False)
def test_sccache_uri(self):
self.assertEqual(self.config["sccache_uri"], "file:///var/tmp/osbuild-sccache")
def test_buildlog_strip_time(self):
self.assertEqual(self.config["buildlog_strip_time"], False)
def test_debug(self):
self.assertEqual(self.config["debug"], False)
def test_http_debug(self):
self.assertEqual(self.config["http_debug"], False)
def test_http_full_debug(self):
self.assertEqual(self.config["http_full_debug"], False)
def test_http_retries(self):
self.assertEqual(self.config["http_retries"], 3)
def test_verbose(self):
self.assertEqual(self.config["verbose"], False)
def test_no_preinstallimage(self):
self.assertEqual(self.config["no_preinstallimage"], False)
def test_traceback(self):
self.assertEqual(self.config["traceback"], False)
def test_post_mortem(self):
self.assertEqual(self.config["post_mortem"], False)
def test_use_keyring(self):
self.assertEqual(self.config["use_keyring"], False)
def test_cookiejar(self):
self.assertEqual(self.config["cookiejar"], "~/.local/state/osc/cookiejar")
def test_no_verify(self):
self.assertEqual(self.config["no_verify"], False)
def test_disable_hdrmd5_check(self):
self.assertEqual(self.config["disable_hdrmd5_check"], False)
def test_do_package_tracking(self):
self.assertEqual(self.config["do_package_tracking"], True)
def test_extra_pkgs(self):
self.assertEqual(self.config["extra-pkgs"], ["vim", "strace"])
def test_build_repository(self):
self.assertEqual(self.config["build_repository"], "openSUSE_Factory")
def test_getpac_default_project(self):
self.assertEqual(self.config["getpac_default_project"], "openSUSE:Factory")
def test_checkout_no_colon(self):
self.assertEqual(self.config["checkout_no_colon"], False)
def test_project_separator(self):
self.assertEqual(self.config["project_separator"], ":")
def test_checkout_rooted(self):
self.assertEqual(self.config["checkout_rooted"], False)
def test_exclude_glob(self):
self.assertEqual(
self.config["exclude_glob"],
[
".osc",
"CVS",
".svn",
".*",
"_linkerror",
"*~",
"#*#",
"*.orig",
"*.bak",
"*.changes.vctmp.*",
],
)
def test_print_web_links(self):
self.assertEqual(self.config["print_web_links"], False)
def test_request_list_days(self):
self.assertEqual(self.config["request_list_days"], 0)
def test_check_filelist(self):
self.assertEqual(self.config["check_filelist"], True)
def test_check_for_request_on_action(self):
self.assertEqual(self.config["check_for_request_on_action"], True)
def test_submitrequest_on_accept_action(self):
self.assertEqual(self.config["submitrequest_on_accept_action"], "cleanup")
def test_request_show_interactive(self):
self.assertEqual(self.config["request_show_interactive"], False)
def test_request_show_source_buildstatus(self):
self.assertEqual(self.config["request_show_source_buildstatus"], False)
def test_review_inherit_group(self):
self.assertEqual(self.config["review_inherit_group"], False)
def test_submitrequest_accepted_template(self):
self.assertEqual(self.config["submitrequest_accepted_template"], "bla bla")
def test_submitrequest_declined_template(self):
self.assertEqual(self.config["submitrequest_declined_template"], "bla bla")
def test_linkcontrol(self):
self.assertEqual(self.config["linkcontrol"], False)
def test_include_request_from_project(self):
self.assertEqual(self.config["include_request_from_project"], True)
def test_local_service_run(self):
self.assertEqual(self.config["local_service_run"], True)
def test_exclude_files(self):
self.assertEqual(self.config["exclude_files"], ["excl", "*.excl"])
def test_include_files(self):
self.assertEqual(self.config["include_files"], ["incl", "*.incl"])
def test_maintained_attribute(self):
self.assertEqual(self.config["maintained_attribute"], "OBS:Maintained")
def test_maintenance_attribute(self):
self.assertEqual(self.config["maintenance_attribute"], "OBS:MaintenanceProject")
def test_maintained_update_project_attribute(self):
self.assertEqual(self.config["maintained_update_project_attribute"], "OBS:UpdateProject")
def test_show_download_progress(self):
self.assertEqual(self.config["show_download_progress"], False)
def test_vc_cmd(self):
self.assertEqual(self.config["vc-cmd"], "/usr/lib/build/vc")
def test_status_mtime_heuristic(self):
self.assertEqual(self.config["status_mtime_heuristic"], False)
def test_host_option_user(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["user"], "Admin")
def test_host_option_pass(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["pass"], "opensuse")
def test_host_option_http_headers(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(
host_options["http_headers"],
[
("Authorization", "Basic QWRtaW46b3BlbnN1c2U="),
("X-Foo", "Bar"),
],
)
def test_host_option_realname(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["realname"], "The Administrator")
def test_host_option_email(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["email"], "admin@example.com")
def test_host_option_sslcertck(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["sslcertck"], True)
def test_host_option_cafile(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["cafile"], "/path/to/custom_cacert.pem")
def test_host_option_capath(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["capath"], "/path/to/custom_cacert.d/")
def test_host_option_sshkey(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["sshkey"], "~/.ssh/id_rsa.pub")
def test_host_option_credentials_mgr_class(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(
host_options["credentials_mgr_class"],
"osc.credentials.PlaintextConfigFileCredentialsManager",
)
def test_host_option_allow_http(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["allow_http"], False)
def test_host_option_trusted_prj(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["trusted_prj"], ["openSUSE:*", "SUSE:*"])
def test_host_option_downloadurl(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["downloadurl"], "http://example.com/")
def test_host_option_disable_hdrmd5_check(self):
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["disable_hdrmd5_check"], False)
def test_extra_fields(self):
self.assertEqual(self.config["plugin-option"], "plugin-general-option")
self.assertEqual(self.config.extra_fields, {"plugin-option": "plugin-general-option"})
self.config["new-option"] = "value"
self.assertEqual(self.config["new-option"], "value")
self.assertEqual(self.config.extra_fields, {"plugin-option": "plugin-general-option", "new-option": "value"})
host_options = self.config["api_host_options"][self.config["apiurl"]]
self.assertEqual(host_options["plugin-option"], "plugin-host-option")
self.assertEqual(host_options.extra_fields, {"plugin-option": "plugin-host-option"})
host_options["new-option"] = "value"
self.assertEqual(host_options["new-option"], "value")
self.assertEqual(host_options.extra_fields, {"plugin-option": "plugin-host-option", "new-option": "value"})
class TestFromParent(unittest.TestCase):
def setUp(self):
self.options = osc.conf.Options()
self.host_options = osc.conf.HostOptions(apiurl="https://example.com", username="Admin", _parent=self.options)
self.options.api_host_options[self.host_options.apiurl] = self.host_options
def test_disable_hdrmd5_check(self):
self.assertEqual(self.options.disable_hdrmd5_check, False)
self.assertEqual(self.host_options.disable_hdrmd5_check, False)
self.options.disable_hdrmd5_check = True
self.assertEqual(self.options.disable_hdrmd5_check, True)
self.assertEqual(self.host_options.disable_hdrmd5_check, True)
self.host_options.disable_hdrmd5_check = False
self.assertEqual(self.options.disable_hdrmd5_check, True)
self.assertEqual(self.host_options.disable_hdrmd5_check, False)
def test_email(self):
self.assertEqual(self.options.email, None)
self.assertEqual(self.host_options.email, None)
self.options.email = "user@example.com"
self.assertEqual(self.options.email, "user@example.com")
self.assertEqual(self.host_options.email, "user@example.com")
self.host_options.email = "another-user@example.com"
self.assertEqual(self.options.email, "user@example.com")
self.assertEqual(self.host_options.email, "another-user@example.com")
if __name__ == "__main__":
unittest.main()