See <https://ci.suse.de/job/yast-yast-installation-master/88/display/redirect?page=changes> Changes: [Stefan.Hundhammer] First unmounter [Stefan.Hundhammer] Added /proc/mnt samples for unit tests [Stefan.Hundhammer] Added unit test and improved testability [Stefan.Hundhammer] Use common shortcut [Stefan.Hundhammer] Fixed rubocop complaint [Stefan.Hundhammer] Flatly refusing to make rubocop force me to use a less readable casecmp [Stefan.Hundhammer] Typo [Stefan.Hundhammer] Added usage sample to docs [Stefan.Hundhammer] Treat btrfs subvolumes like all other mounts [Stefan.Hundhammer] Implemented mvidner's code review suggestions [Stefan.Hundhammer] Fix up prefix with a trailing slash [Stefan.Hundhammer] Use method arg initializers directly [Stefan.Hundhammer] Use Pathname::cleanpath to fix up broken prefixes (as Ancor suggested) [Stefan.Hundhammer] Link to PR with extensive docs [Stefan.Hundhammer] Removed dead code [Stefan.Hundhammer] Refactored to modern style and made usable standalone [Stefan.Hundhammer] Adapted to modernized version [Stefan.Hundhammer] Removed obsolete requires and improved docs [Stefan.Hundhammer] Adapted unit test and made the tested method public [Stefan.Hundhammer] Fixed rubocop complaints [Stefan.Hundhammer] Change log and version bump [Stefan.Hundhammer] run wants no arguments after all [Stefan.Hundhammer] Better logging [Stefan.Hundhammer] Don't close SCR prematurely [Stefan.Hundhammer] Improved comment ------------------------------------------ [...truncated 116.70 KB...] [ 30s] returns false when second stage is not defined in autoinst configuration [ 30s] when in autoupgrade mode [ 30s] returns true when second stage is defined in autoinst configuration [ 30s] returns false when second stage is not defined in autoinst configuration [ 30s] when in neiter in autoinst nor in autoupgrade mode [ 30s] returns true when second stage is defined in autoinst configuration [ 30s] returns true when second stage is not defined in autoinst configuration [ 30s] #self_update_explicitly_enabled? [ 30s] when self_update=1 is provided by linuxrc [ 30s] returns true [ 30s] when self_update=custom_url is provided by linuxrc [ 30s] returns true [ 30s] when self_update is explicitly enabled in an AutoYaST profile [ 30s] returns true [ 30s] when sel_update has not been explicitly enabled [ 30s] returns false [ 30s] [ 30s] Installation::ProposalRunner [ 30s] .new [ 30s] Allows passing different store implementation [ 30s] #run [ 30s] checks remote/second_stage environment and returns -auto- in autoyast mode [ 30s] do nothing if given proposal type is disabled [ 30s] #html_header [ 30s] returns clickable header when forced [ 30s] when proposal contains tabs [ 30s] makes a proposal [ 30s] and the proposal screen is configured through AutoYaST [ 30s] makes a proposal [ 30s] when proposal does not contain tabs [ 30s] makes a proposal [ 30s] and the proposal screen is configured through AutoYaST [ 30s] makes a proposal [ 30s] and it enables soft r/o proposal in case of error [ 30s] makes a proposal [ 30s] [ 30s] #<Yast::ImageInstallationClass:0x00005604fd0ab290> [ 30s] #FindImageSet [ 31s] finds images matching architecture and selected patterns and returns if processing was successful [ 31s] does not find any image using unsupported architecture and returns if processing was successful [ 31s] does not find any image using unsupported patterns and returns if processing was successful [ 31s] returns true if no xml is provided [ 31s] returns false and reports error if xml is not valid [ 31s] [ 31s] Installation::SshImporter [ 31s] #add_config [ 31s] stores the configuration if /etc/ssh contains keys [ 31s] does nothing if there are no keys in /etc/ssh [ 31s] does nothing if there is no /etc/ssh directory [ 31s] does nothing if the root directory does not exist [ 31s] reading several valid directories [ 31s] stores the device name and configuration for all systems [ 31s] sets #device to the most recently accessed configuration [ 31s] .write [ 31s] if no device is selected [ 31s] writes nothing [ 31s] if a device is selected [ 31s] if #copy_config? is true [ 31s] writes the ssh keys of the choosen device [ 31s] writes the config files of the choosen device [ 31s] does not write files from other devices [ 31s] if #copy_config? is false [ 31s] writes the ssh keys of the choosen device [ 31s] does not write the config files of the choosen device [ 31s] does not write files from other devices [ 31s] [ 31s] Yast::InstInstallInfClient [ 31s] #main [ 31s] writes the network configuration given by linuxrc [ 31s] returns :next [ 31s] when a regurl is provided by linuxrc [ 31s] and not running an autoinstallation [ 31s] allows the user to fix it it's invalid [ 31s] does nothing with the URL in case of valid [ 31s] [ 31s] Yast::Transfer::FileFromUrl [ 31s] #Get [ 31s] returns false for unknown scheme [ 31s] when scheme is 'device' [ 31s] returns false for an empty path [ 31s] when host is empty [ 31s] probes disks [ 31s] when scheme is 'usb' [ 31s] returns false for an empty path [ 31s] when scheme is 'file' [ 31s] CD has already been mounted multiple times [ 31s] mounts with --bind option and returns true [ 31s] CD has not been mounted [ 31s] mounts CD and returns true [ 31s] [ 31s] Installation::SshConfig [ 31s] .from_dir [ 31s] reads the name of the systems with /etc/os-release [ 31s] does not crash if /etc/os-release contains empty value [ 31s] uses 'Linux' as name for systems without /etc/os-release file [ 31s] uses name and version when PRETTY_NAME is missing in /etc/os-release [ 31s] stores all the keys and files with their names [ 31s] stores the content of the config files [ 31s] stores the content of both files for the keys [ 31s] uses the most recent file of each key to set #atime [ 31s] .write_files [ 31s] creates /etc/ssh/ if it does not exist [ 31s] reuses /etc/ssh if it's already there [ 31s] writes all the files by default [ 31s] writes only the key files if write_config_files is false [ 31s] writes only the config files if write_keys is false [ 31s] preserves original permissions for files and keys [ 31s] backups config files found in the target directory [ 31s] writes the original content for each file [ 31s] #keys_atime [ 31s] returns the access time of the most recently accessed key [ 31s] returns nil if no keys has been read [ 31s] [ 31s] Yast::InstInstsysCleanupClient [ 31s] .main [ 31s] when going forward in the installation [ 31s] runs the cleaner [ 31s] returns :next [ 31s] when going back in the installation [ 31s] does not run the cleaner [ 31s] returns :back [ 31s] [ 31s] Yast::InstUpdateInstaller [ 31s] #main [ 31s] cleans up the package management at the end [ 31s] displays a progress [ 31s] finishes the progress at the end [ 31s] when returning back from other dialog [ 31s] returns :back [ 31s] when some update is available [ 31s] and update works [ 31s] creates update file and returns :restart_yast [ 31s] copies the add-on packages from the self-update repository [ 31s] and update fails [ 31s] does not create any file and returns :next [ 31s] when the update cannot be fetched from a user defined repository [ 31s] shows an error and returns :next [ 31s] when the update cannot be fetched from a default repository [ 31s] does not show any error and returns :next [ 31s] when repository is empty [ 31s] does not restart YaST [ 31s] when a default repository can't be probed [ 31s] does not show any error and returns :next [ 31s] when a user defined repository can't be probed [ 31s] and self-update URL is remote [ 31s] shows a dialog suggesting to check the network configuration [ 31s] in AutoYaST installation or upgrade [ 31s] shows an error [ 31s] and self-update URL is not remote [ 31s] shows a dialog suggesting to check the network configuration [ 31s] when network is not available [ 31s] does not update the installer [ 31s] when a error happens while applying the update [ 31s] does not catch the exception [ 31s] when update is disabled through Linuxrc [ 31s] does not update the installer [ 31s] when restarting YaST2 [ 31s] finishes the restarting process [ 31s] and data file is available [ 31s] sets custom_url [ 31s] and data file is not available [ 31s] does not set custom_url [ 31s] and yast2-registration is not available [ 31s] does not load custom_url [ 31s] #update_installer [ 31s] when update works [ 31s] returns true [ 31s] when update fails [ 31s] returns false [ 31s] when the repository contains old packages [ 31s] does not update the installer [ 31s] [ 31s] Installation::SshImporterPresenter [ 31s] #summary [ 31s] when no previous configurations were found [ 31s] and mode is installation [ 31s] returns 'No previous Linux...' message [ 31s] and mode is autoinstallation [ 31s] returns 'No previous Linux...' message [ 31s] and mode is not installation or autoinstallation [ 31s] returns 'No previous Linux...' message [ 31s] when device is set and copy config is enabled [ 31s] returns 'SSH host keys and configuration...' [ 31s] when device is set and copy config is disabled [ 31s] returns 'SSH host keys will be copied...' [ 31s] [ 31s] Pending: (Failures listed here are expected and do not affect your suite's status) [ 31s] [ 31s] 1) Installation::Clients::SecurityFinish#write when running in AutoYaST when firewall section is present calls AY client write [ 31s] # Temporarily skipped with xcontext [ 31s] # ./test/lib/clients/security_finish_test.rb:80 [ 31s] [ 31s] 2) Installation::Clients::SecurityFinish#write when running in AutoYaST when firewall section is not present configures firewall according to product settings [ 31s] # Temporarily skipped with xcontext [ 31s] # ./test/lib/clients/security_finish_test.rb:90 [ 31s] [ 31s] 3) Yast::InstallationMiscInclude [ 31s] # Not yet implemented [ 31s] # ./test/installation_misc_test.rb:12 [ 31s] [ 31s] 4) Installation::PrepShrinkFinish#run first parameter "Write" shrink prep partitions too big [ 31s] # TODO: not converted to storage-ng yet [ 31s] # ./test/prep_shrink_test.rb:224 [ 31s] [ 31s] Failures: [ 31s] [ 31s] 1) Installation::Unmounter#new when reading the actual /proc/mounts file ignores /, /proc, /sys, /dev [ 31s] Failure/Error: expect(subject.ignored_paths).to include("/", "/proc", "/sys", "/dev") [ 31s] expected ["/proc", "/sys", "/dev/pts", "/dev/shm"] to include "/" and "/dev" [ 31s] # ./test/unmounter_test.rb:41:in `block (4 levels) in <top (required)>' [ 31s] [ 31s] Finished in 5.03 seconds (files took 2.12 seconds to load) [ 31s] 718 examples, 1 failure, 4 pending [ 31s] [ 31s] Failed examples: [ 31s] [ 31s] rspec ./test/unmounter_test.rb:40 # Installation::Unmounter#new when reading the actual /proc/mounts file ignores /, /proc, /sys, /dev [ 31s] [ 31s] rake aborted! [ 31s] Command failed with status (1): [rspec --color --format doc 'test/proposal_...] [ 31s] [ 31s] Tasks: TOP => test:unit [ 31s] (See full trace by running task with --trace) [ 31s] error: Bad exit status from /var/tmp/rpm-tmp.Lax7dc (%check) [ 31s] [ 31s] [ 31s] RPM build errors: [ 31s] Bad exit status from /var/tmp/rpm-tmp.Lax7dc (%check) [ 31s] [ 31s] yast-ci-worker-3 failed "build yast2-installation.spec" at Thu Aug 26 13:26:25 UTC 2021. [ 31s] The buildroot was: /var/tmp/build-root/SUSE_SLE-15-SP4_GA-x86_64 rm -rf Devel:YaST:Head rake aborted! Command failed with status (1): [yes | osc -A 'https://api.suse.de/' build ...] Tasks: TOP => osc:sr => osc:commit => osc:build (See full trace by running task with --trace) cleaning Result: PID 6371 exited with value 1 Scanning for a pull request... Found pull request #975 Adding comment ":x: Internal Jenkins [job #88](https://ci.suse.de/job/yast-yast-installation-master/88/) failed" to pull request https://github.com/yast/yast-installation/pull/975 Sending Net::HTTP::Post request to https://api.github.com/repos/yast/yast-installation/issues/975/comments... OK Success Build step 'Execute shell' marked build as failure Not sending mail to unregistered user Stefan.Hundhammer@gmx.de