From d3d9473e0376520a1d525e10c1d9b77820df3d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Fri, 23 Dec 2016 12:40:14 +0000 Subject: [PATCH] Add a writing example for CFA::ZyppConf class --- test/data/zypp/zypp.conf.expected | 633 ++++++++++++++++++++++++++++++ test/lib/cfa/zypp_conf_test.rb | 29 +- 2 files changed, 661 insertions(+), 1 deletion(-) create mode 100644 test/data/zypp/zypp.conf.expected diff --git a/test/data/zypp/zypp.conf.expected b/test/data/zypp/zypp.conf.expected new file mode 100644 index 000000000..afc0d1429 --- /dev/null +++ b/test/data/zypp/zypp.conf.expected @@ -0,0 +1,633 @@ +## Configuration file for software management +## /etc/zypp/zypp.conf +## +## Boolean values are 0 1 yes no on off true false + + +[main] + + +## +## Override the detected architecture +## +## Valid values: i586, i686, x86_64, ppc, ppc64, ia64, s390, s390x, .. +## Default value: Autodetected +## +## ** CAUTION: Only set if you know what you're doing ! +## ** Changing this needs a full refresh (incl. download) +## ** of all repository data. +## +# arch = s390 + + +## +## Path where the caches are kept. +## +## Valid values: A directory +## Default value: /var/cache/zypp +## +# cachedir = /var/cache/zypp + + +## +## Path where the repo metadata is downloaded and kept. +## +## Valid values: A directory +## Default value: {cachedir}/raw +## +## Changing this needs a full refresh (incl. download) of all repository data +## +# metadatadir = /var/cache/zypp/raw + + +## +## Path where the repo solv files are created and kept. +## +## Valid values: A directory +## Default value: {cachedir}/solv +## +# solvfilesdir = /var/cache/zypp/solv + + +## +## Path where the repo packages are downloaded and kept. +## +## Valid values: A directory +## Default value: {cachedir}/packages +## +# packagesdir = /var/cache/zypp/packages + + +## +## Path where the configuration files are kept. +## +## Valid values: A directory +## Default value: /etc/zypp +## +# configdir = /etc/zypp + +## +## Path where the known repositories .repo files are kept +## +## Valid values: A directory +## Default value: {configdir}/repos.d +## +## Changing this invalidates all known repositories +## +# reposdir = /etc/zypp/repos.d + +## +## Path where the known services .service files are kept +## +## Valid values: A directory +## Default value: {configdir}/services.d +## +## Changing this invalidates all known services +## +# servicesdir = /etc/zypp/services.d + + +## +## Whether repository urls should be probed when added +## +## Valid values: boolean +## Default value: false +## +## If true, accessability of repositories is checked immediately (when added) +## (e.g. 'zypper ar' will check immediately) +## If false, accessability of repositories is checked when refreshed +## (e.g. 'zypper ar' will delay the check until the next refresh) +## +# repo.add.probe = false + + +## +## Amount of time in minutes that must pass before another refresh. +## +## Valid values: Integer +## Default value: 10 +## +## If you have autorefresh enabled for a repository, it is checked for +## up-to-date metadata not more often than every +## minutes. If an automatic request for refresh comes before +## minutes passed since the last check, the request is ignored. +## +## A value of 0 means the repository will always be checked. To get the opposite +## effect, disable autorefresh for your repositories. +## +## This option has no effect for repositories with autorefresh disabled, nor for +## user-requested refresh. +## +# repo.refresh.delay = 10 + +## +## Translated package descriptions to download from repos. +## +## A list of locales for which translated package descriptions should +## be downloaded, in case they are availavble and the repo supports this. +## Not all repo formats support downloading specific translations only. +## +## Valid values: List of locales like 'en', 'en_US'... +## Default value: RequestedLocales +## +## If data for a specific locale are not available, we try to find some +## fallback. Translations for 'en' are always downloaded. +## +# repo.refresh.locales = en, de + +## +## Maximum number of concurrent connections to use per transfer +## +## Valid values: Integer +## Default value: 5 +## +## This setting is only used if more than one is possible +## Setting it to a reasonable number avoids flooding servers +## +# download.max_concurrent_connections = 5 + +## +## Sets the minimum download speed (bytes per second) +## until the connection is dropped +## This can be useful to prevent security attacks on hosts by +## providing updates at very low speeds. +## +## 0 means no limit +## +# download.min_download_speed = 0 + +## Maximum download speed (bytes per second) +## 0 means no limit +# download.max_download_speed = 0 + +## Number of tries per download which will be +## done without user interaction +## 0 means no limit (use with caution) +# download.max_silent_tries = 5 + +## +## Maximum time in seconds that you allow a transfer operation to take. +## +## This is useful for preventing your batch jobs from hanging for hours due +## to slow networks or links going down. Limiting operations to less than a +## few minutes risk aborting perfectly normal operations. +## +## Valid values: [0,3600] +## Default value: 180 +## +# download.transfer_timeout = 180 + +## +## Whether to consider using a .delta.rpm when downloading a package +## +## Valid values: boolean +## Default value: true +## +## Using a delta rpm will decrease the download size for package updates +## since it does not contain all files of the package but only the binary +## diff of changed ones. Recreating the rpm package on the local machine +## is an expensive operation (memory,CPU). If your network connection is +## not too slow, you benefit from disabling .delta.rpm. +## +# download.use_deltarpm = true + +## +## Whether to consider using a deltarpm even when rpm is local +## +## Valid values: boolean +## Default value: false +## +## This option has no effect unless download.use_deltarpm is set true. +## +# download.use_deltarpm.always = false + +## +## Hint which media to prefer when installing packages (download vs. CD). +## +## Valid values: download, volatile +## Default value: download +## +## Note that this just a hint. First of all the solver will choose the 'best' +## package according to its repos priority, version and architecture. But if +## there is a choice, we will prefer packages from the desired media. +## +## Packages available locally are always preferred. The question is whether +## you prefer packages being downloaded via FTP/HTTP/HTTPS (download), rather +## than being prompted to insert a CD/DVD (volatile), in case they are available +## on both media. +## +## Name | Priority | URI +## openSUSE-11.1 99 dvd:/// +## openSUSE-11.1-Oss 99 http://download.opensuse.org/distribution/11.1/repo/oss +## +## In the above example 2 repositories with similar content are used. Rather +## than raising the priority of one of them to 'prefer' a certain media, you +## should use the same priority for both and set download.media_preference +## instead. +## +## download.media_preference = download + +## +## Path where media are preferably mounted or downloaded +## +## Valid values: A (writable) directory +## Default value: /var/adm/mount +## +## The media backend will try to organize media mount points and download areas +## below this directory, unless a different location is requested by the application. +## +## If the directory is not accessible and read/writable for a specific user, +## the fallback is to use /var/tmp. +## +## download.media_mountdir = /var/adm/mount + +## +## Signature checking (repodata and rpm packages) +## +## boolean gpgcheck (default: on) +## boolean repo_gpgcheck (default: unset -> according to gpgcheck) +## boolean pkg_gpgcheck (default: unset -> according to gpgcheck) +## +## If 'gpgcheck' is 'on' we will either check the signature of repo metadata +## (packages are secured via checksum in the metadata), or the signature of +## an rpm package to install if it's repo metadata are not signed or not +## checked. +## +## The default behavior can be altered by explicitly setting 'repo_gpgcheck' and/or +## 'pkg_gpgcheck' to perform those checks always (if 'on') or never (if 'off'). +## +## Explicitly setting 'gpgcheck', 'repo_gpgcheck' 'pkg_gpgcheck' in a +## repositories .repo file will overwrite the defaults here. +## +## DISABLING GPG CHECKS IS NOT RECOMMENDED. +## Signing data enables the recipient to verify that no modifications +## occurred after the data were signed. Accepting data with no, wrong +## or unknown signature can lead to a corrupted system and in extreme +## cases even to a system compromise. +## +# repo_gpgcheck = unset -> according to gpgcheck +# pkg_gpgcheck = unset -> according to gpgcheck + +## +## Commit download policy to use as default. +## +## DownloadOnly, Just download all packages to the local cache. +## Do not install. Implies a dry-run. +## +## DownloadInAdvance, First download all packages to the local cache. +## Then start to install. +## +## DownloadInHeaps, Similar to DownloadInAdvance, but try to split +## the transaction into heaps, where at the end of +## each heap a consistent system state is reached. +## +## DownloadAsNeeded Alternating download and install. Packages are +## cached just to avid CD/DVD hopping. This is the +## traditional behaviour. +## +## If a value is not set, empty or unknown, we pick +## some sane default. +## +## commit.downloadMode = + +## +## Defining directory which contains vendor description files. +## +## One file in this directory reflects a group of equivalent vendors. e.G.: +## (filename is "nvidia" but could be any other name): +## ------------------------- file contains begin ----------------------- +## [main] +## +## vendors = nvidia,suse,opensuse +## +## ------------------------- file contains end ----------------------- +## Libzypp makes an string comparision (like strncmp, case-insensitive) +## whereas the beginning of the strings are compared only. +## e.G. vendor "opensuse11.0" is compatible to "openSuSE". +## +## Valid values: A directory +## Default value: {configdir}/vendors.d +## +# vendordir = /etc/zypp/vendors.d + + +## +## Whether required packages are installed ONLY +## So recommended packages, language packages and packages which depend +## on hardware (modalias) will not be regarded. +## +## Valid values: boolean +## Default value: false +## +solver.onlyRequires = true + +## +## EXPERTS ONLY: Per default the solver will not replace packages of +## different vendors, unless you explicitly ask to do so. Setting this +## option to TRUE will disable this vendor check (unless the application +## explicitly re-enables it). Packages will then be considered based on +## repository priority and version only. This may easily damage your system. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: false +## +# solver.allowVendorChange = false + +## +## EXPERTS ONLY: TUNE DISTRIBUTION UPGRADE (DUP) +## Set whether to allow package version downgrades upon DUP. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: true +## +# solver.dupAllowDowngrade = true + +## +## EXPERTS ONLY: TUNE DISTRIBUTION UPGRADE (DUP) +## Set whether follow package renames upon DUP. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: true +## +# solver.dupAllowNameChange = true + +## +## EXPERTS ONLY: TUNE DISTRIBUTION UPGRADE (DUP) +## Set whether to allow changing the packages architecture upon DUP. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: true +## +# solver.dupAllowArchChange = true + +## +## EXPERTS ONLY: TUNE DISTRIBUTION UPGRADE (DUP) +## Set whether to allow changing the packages vendor upon DUP. If you +## are following a continuous distribution like Tumbleweed or Factory +## where you use 'zypper dup --no-allow-vendor-change' quite frequently, +## you may indeed benefit from disabling the VendorChange. Packages from +## OBS repos will then be kept rather than being overwritten by Tumbleweeds +## version. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: true +## +# solver.dupAllowVendorChange = true + +## +## EXPERTS ONLY: Cleanup when deleting packages. Whether the solver should +## per default try to remove packages exclusively required by the ones he's +## asked to delete. +## +## This option should be used on a case by case basis, enabled via +## command line options or switches the applications offer. Changing +## the global default on a system where unattended actions are performed, +## may easily damage your system. +## +## CHANGING THE DEFAULT IS NOT RECOMMENDED. +## +## Valid values: boolean +## Default value: false +## +# solver.cleandepsOnRemove = false + +## +## This file contains requirements/conflicts which fulfill the +## needs of a running system. +## For example the system would be broken if not glibc or kernel is +## installed. +## So the user will be informed if these packages will be deleted. +## +## Format: Each line represents one dependency: +## e.g. +## requires:kernel +## requires:glibc +## Default value: {configdir}/systemCheck +## +# solver.checkSystemFile = /etc/zypp/systemCheck + +## +## This directory can contain files that contain requirements/conflicts +## which fulfill the needs of a running system (see checkSystemFile). +## +## Files are read in alphabetical order. +## +## Default value: {configdir}/systemCheck.d +## +# solver.checkSystemFileDir = /etc/zypp/systemCheck.d + +## +## When committing a dist upgrade (e.g. 'zypper dup') a solver testcase +## is written to /var/log/updateTestcase-. It is needed in bugreports. +## This option returns the number of testcases to keep on the system. Old +## cases will be deleted, as new ones are created. +## +## Use 0 to write no testcase at all, or -1 to keep all testcases. +## +## Valid values: Integer +## Default value: 2 +## +# solver.upgradeTestcasesToKeep = 2 + +## +## Whether dist upgrade should remove a products dropped packages. +## +## A new product may suggest a list of old and no longer supported +## packages (dropped packages). Performing a dist upgrade the solver +## may try to delete them, even if they do not cause any dependency +## problem. +## +## Turning this option off, the solver will not try to remove those +## packages unless they actually do cause dependency trouble. You may +## do the cleanup manually, or simply leave them installed as long +## as you don't need the disk space. +## +## Valid values: Boolean +## Default value: true +## +# solver.upgradeRemoveDroppedPackages = true + +## +## Packages which can be installed in different versions at the same time. +## +## Packages are selected either by name, or by provides. In the later case +## the string must start with "provides:" immediately followed by the capability. +## +## Example: +## kernel - just packages whith name 'kernel' +## provides:multiversion(kernel) - all packages providing 'multiversion(kernel)' +## (kenel and kmp packages should do this) +## Valid values: +## Comma separated list of packages. +## +## Default value: +## empty +## +multiversion = + +## +## Defining directory which may contain additional multiversion definitions. +## +## If the directory exists, each file in this directory is scanned, expecting +## one valid multiversion list entry per line. Empty lines and lines starting +## with '#' are ignored. +## ------------------------- [/etc/zypp/multiversion.d/example file begin] ----------------------- +## # An alternate way to enable kernel packages being +## # installed in parallel: +## +## provides:multiversion(kernel) +## ------------------------- [/etc/zypp/multiversion.d/example file end] ----------------------- +## +## Valid values: A directory +## Default value: {configdir}/multiversion.d +## +# multiversiondir = /etc/zypp/multiversion.d + +## Comma separated list of kernel packages to keep installed in parallel, if the +## above multiversion variable is set. Packages can be specified as +## 2.6.32.12-0.7 - Exact version to keep +## latest - Keep kernel with the highest version number +## latest-N - Keep kernel with the Nth highest version number +## running - Keep the running kernel +## oldest - Keep kernel with the lowest version number (the GA kernel) +## oldest+N - Keep kernel with the Nth lowest version number +## +## Note: This entry is not evaluated by libzypp, but by the +## purge-kernels service (via /sbin/purge-kernels). +## +## Default: Do not delete any kernels if multiversion = provides:multiversion(kernel) is set +multiversion.kernels = latest,latest-1,running + +## +## Path to locks file. If not exist then is create. +## In this file is saved also UI locks. +## +## valid value: path to file or place where file can be created +## default value: {configdir}/locks +## +# locksfile.path = /etc/zypp/locks + +## +## Whether to apply locks in locks file after zypp start. +## +## Valid values: boolean +## Default value: true +## +# locksfile.apply = true + +## +## Where update items are stored +## (example: scripts, messages) +## +## Valid values: path to directory +## Default value: /var/adm +## +# update.datadir = /var/adm + +## +## Where update messages are stored +## +## Valid values: path to directory +## Default value: {update.datadir}/update-messages +## +# update.messagesdir = /var/adm/update-messages + +## +## Where update scripts are stored +## +## Valid values: path to directory +## Default value: {update.datadir}/update-scripts +## +# update.scriptsdir = /var/adm/update-scripts + +## +## Command to be invoked to send update messages. +## +## Packages may leave an update message file in {update.messagesdir}. +## At the end of each commit, zypp collects those messages and may send +## a notification to the user. +## +## zypp will prepare the update messages according to the selected +## content format and pipe the content to the command. +## +## Format: +## single - For each update message invoke the command and send +## the message. +## none - For each update message invoke the command but don't +## use a pipe to send any data. You probably want to pass +## the message file on the commandline using %P (see +## Substitutions). +## digest - Single invocation of the command, sending the path +## names of all update message. One per line. +## bulk - Single invocation of the command, sending the +## concatenated content of all update messages, separated +## by Ctrl-L. +## +## Substitutions: +## %p - package identification (name-version-release.arch) +## %P - full path to the update message file +## +## Valid values: The value is specified as "format | command". +## An empty value will turn off any notification. +## +## Examples: single | mail -s 'Update message from %p' root +## none | my-send-script -f %P +## +## Default value: single | /usr/lib/zypp/notify-message -p %p +## +# update.messages.notify = single | /usr/lib/zypp/notify-message -p %p + +## +## Options for package installation: excludedocs +## +## Don't install any files which are marked as documentation. +## +## Valid values: boolean +## Default value: no +## +rpm.install.excludedocs = yes + +## +## Location of history log file. +## +## The history log is described at +## http://en.opensuse.org/Libzypp/Package_History +## +## Valid values: absolute path to a file +## Default value: /var/log/zypp/history +## +# history.logfile = /var/log/zypp/history + +## +## Global credentials directory path. +## +## If a URL contains ?credentials= parameter, the credentials will +## be stored and looked for in a file named in this directory. +## +## Valid values: absolute path to a directory +## Default value: /etc/zypp/credentials.d +## +# credentials.global.dir = /etc/zypp/credentials.d + +## +## Global credentials catalog file path. +## +## This file contains a catalog of all known user credentials which were +## not stored via the ?credentials= URL parameter, i.e. passed +## in URL as username:password component, or entered by user in +## an authentication dialog. +## +## Valid values: absolute path to a file +## Default value: /etc/zypp/credentials.cat +## +# credentials.global.file = /etc/zypp/credentials.cat diff --git a/test/lib/cfa/zypp_conf_test.rb b/test/lib/cfa/zypp_conf_test.rb index 3e3cfc9c0..8b75fb902 100755 --- a/test/lib/cfa/zypp_conf_test.rb +++ b/test/lib/cfa/zypp_conf_test.rb @@ -1,13 +1,18 @@ #!/usr/bin/env rspec require_relative "../../test_helper" + require "packager/cfa/zypp_conf" +require "tmpdir" describe Yast::Packager::CFA::ZyppConf do + ZYPP_CONF_EXAMPLE = FIXTURES_PATH.join("zypp/zypp.conf").freeze + subject(:config) { Yast::Packager::CFA::ZyppConf.new } + let(:zypp_conf_path) { ZYPP_CONF_EXAMPLE } before do - stub_const("Yast::Packager::CFA::ZyppConf::PATH", FIXTURES_PATH.join("zypp/zypp.conf")) + stub_const("Yast::Packager::CFA::ZyppConf::PATH", zypp_conf_path) end describe "#set_minimalistic!" do @@ -21,4 +26,26 @@ expect(main["multiversion"]).to be_nil end end + + describe "#save" do + let(:tmpdir) { Dir.mktmpdir } + let(:zypp_conf_path) { File.join(tmpdir, "zypp.conf") } + let(:expected_content) { File.read(FIXTURES_PATH.join("zypp/zypp.conf.expected")) } + + before do + FileUtils.cp ZYPP_CONF_EXAMPLE, File.join(tmpdir, "zypp.conf") + config.load + end + + after do + FileUtils.remove_entry tmpdir + end + + it "modifies the file accordingly to given options" do + pending + config.set_minimalistic! + config.save + expect(File.read(zypp_conf_path)).to eq(File.read(ZYPP_CONF_EXAMPLE)) + end + end end