community.general/tests/integration/targets/homebrew/tasks/formulae.yml
Thibaut Decombe 9452a2c8ac
homebrew: fix incorrect handling of aliases (#9255)
* Add failing test (See commit description)

Second assert returns this:

changed: [localhost] => changed=true
  changed_pkgs:
  - sqlite3
  msg: 'Changed: 1, Unchanged: 1'
  unchanged_pkgs:
  - sqlite

* Extract proper package_name from brew info using alisases

* Add changelog fragment

* Fix pep8

* Make sure sqlite is uninstalled beforehand

* Use `package_result is (not) changed` syntax in assertions

* Register more explicit names

* Fix handling of casks
2024-12-20 22:53:41 +01:00

365 lines
11 KiB
YAML

---
####################################################################
# WARNING: These are designed specifically for Ansible tests #
# and should not be used as examples of how to write Ansible roles #
####################################################################
# Test code for the homebrew module.
# Copyright (c) 2020, Abhijeet Kasurde <akasurde@redhat.com>
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
- name: Find brew binary
command: which brew
register: brew_which
- name: Get owner of brew binary
stat:
path: "{{ brew_which.stdout }}"
register: brew_stat
#- name: Use ignored-pinned option while upgrading all
# homebrew:
# upgrade_all: true
# upgrade_options: ignore-pinned
# become: true
# become_user: "{{ brew_stat.stat.pw_name }}"
# register: upgrade_option_result
# environment:
# HOMEBREW_NO_AUTO_UPDATE: True
#- assert:
# that:
# - upgrade_option_result.changed
- vars:
package_name: gnu-tar
block:
- name: Make sure {{ package_name }} package is not installed
homebrew:
name: "{{ package_name }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
- name: Install {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Package installed: gnu-tar'"
- "package_result.changed_pkgs == ['gnu-tar']"
- "package_result.unchanged_pkgs == []"
- name: Again install {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Package already installed: gnu-tar'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs == ['gnu-tar']"
- name: Unlink {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: unlinked
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Package unlinked: gnu-tar'"
- "package_result.changed_pkgs == ['gnu-tar']"
- "package_result.unchanged_pkgs == []"
- name: Link {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: linked
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Package linked: gnu-tar'"
- "package_result.changed_pkgs == ['gnu-tar']"
- "package_result.unchanged_pkgs == []"
- name: Uninstall {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Package uninstalled: gnu-tar'"
- "package_result.changed_pkgs == ['gnu-tar']"
- "package_result.unchanged_pkgs == []"
- name: Again uninstall {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Package already uninstalled: gnu-tar'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs == ['gnu-tar']"
- name: Upgrade {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: latest
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Package upgraded: gnu-tar'"
- "package_result.changed_pkgs == ['gnu-tar']"
- "package_result.unchanged_pkgs == []"
- name: Again upgrade {{ package_name }} package using homebrew
homebrew:
name: "{{ package_name }}"
state: latest
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Package already upgraded: gnu-tar'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs == ['gnu-tar']"
- vars:
package_names:
- gnu-tar
- gnu-time
block:
- name: Make sure {{ package_names }} packages are not installed
homebrew:
name: "{{ package_names }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
- name: Install only {{ package_names[0] }} package using homebrew
homebrew:
name: "{{ package_names[0] }}"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
- name: Install {{ package_names }} packages using homebrew (one is already installed)
homebrew:
name: "{{ package_names }}"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Changed: 1, Unchanged: 1'"
- "package_result.changed_pkgs == ['gnu-time']"
- "package_result.unchanged_pkgs == ['gnu-tar']"
- name: Again install {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
- name: Unlink {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: unlinked
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
- "package_result.unchanged_pkgs == []"
- name: Link {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: linked
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
- "package_result.unchanged_pkgs == []"
- name: Uninstall {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
- "package_result.unchanged_pkgs == []"
- name: Again uninstall {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
- name: Upgrade {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: latest
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is changed
- "package_result.msg == 'Changed: 2, Unchanged: 0'"
- "package_result.changed_pkgs | sort == ['gnu-tar', 'gnu-time']"
- "package_result.unchanged_pkgs == []"
- name: Again upgrade {{ package_names }} packages using homebrew
homebrew:
name: "{{ package_names }}"
state: latest
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: package_result
- assert:
that:
- package_result is not changed
- "package_result.msg == 'Changed: 0, Unchanged: 2'"
- "package_result.changed_pkgs == []"
- "package_result.unchanged_pkgs | sort == ['gnu-tar', 'gnu-time']"
# Test alias handling with sqlite (that is aliased to sqlite3)
- block:
- name: Make sure sqlite package is not installed
homebrew:
name: "sqlite"
state: absent
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
- name: Install sqlite package using alias (sqlite3)
homebrew:
name: "sqlite3"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: install_result
- assert:
that:
- install_result is changed
- "install_result.msg == 'Package installed: sqlite3'"
- "install_result.changed_pkgs == ['sqlite3']"
- "install_result.unchanged_pkgs == []"
- name: Again install sqlite package using alias (sqlite3)
homebrew:
name: "sqlite3"
state: present
update_homebrew: false
become: true
become_user: "{{ brew_stat.stat.pw_name }}"
register: reinstall_result
- assert:
that:
- reinstall_result is not changed
- "reinstall_result.msg == 'Package already installed: sqlite3'"
- "reinstall_result.changed_pkgs == []"
- "reinstall_result.unchanged_pkgs == ['sqlite3']"