From 2cf86d52899f19016fecd3edf0ed1a54d09ca3c6 Mon Sep 17 00:00:00 2001 From: Rich Megginson Date: Fri, 5 Jun 2026 11:14:12 -0600 Subject: [PATCH] test: refactor wireless tests into single setup and cleanup The wireless test setup/cleanup had a lot of duplicated code scattered among a few task files. This unifies the setup and cleanup code and gets rid of redundant files. This also enables all of the wireless tests on CentOS 7 and later, and RHEL 8 and later. Signed-off-by: Rich Megginson --- tests/ensure_provider_tests.py | 30 +-- tests/playbooks/tests_802_1x.yml | 19 +- tests/playbooks/tests_wireless.yml | 9 - tests/playbooks/tests_wireless_wpa3_owe.yml | 6 +- tests/playbooks/tests_wireless_wpa3_sae.yml | 12 +- tests/tasks/cleanup_802_1x_server.yml | 23 -- tests/tasks/cleanup_mock_wifi.yml | 40 +++ tests/tasks/setup_802.1x.yml | 13 - tests/tasks/setup_802_1x_server.yml | 91 ------- tests/tasks/setup_mock_wifi.yml | 274 +++++++++++++++++--- tests/tasks/setup_mock_wifi_wpa3_owe.yml | 66 ----- tests/tasks/setup_mock_wifi_wpa3_sae.yml | 86 ------ tests/tasks/start_mock_wifi.yml | 31 --- tests/tests_802_1x_nm.yml | 4 +- tests/tests_802_1x_updated_nm.yml | 4 +- tests/tests_wireless_nm.yml | 2 +- tests/tests_wireless_wpa3_owe_nm.yml | 7 +- tests/tests_wireless_wpa3_sae_nm.yml | 4 +- 18 files changed, 318 insertions(+), 403 deletions(-) delete mode 100644 tests/tasks/cleanup_802_1x_server.yml delete mode 100644 tests/tasks/setup_802.1x.yml delete mode 100644 tests/tasks/setup_802_1x_server.yml delete mode 100644 tests/tasks/setup_mock_wifi_wpa3_owe.yml delete mode 100644 tests/tasks/setup_mock_wifi_wpa3_sae.yml delete mode 100644 tests/tasks/start_mock_wifi.yml diff --git a/tests/ensure_provider_tests.py b/tests/ensure_provider_tests.py index b6bce69c8..c7de7f5cb 100755 --- a/tests/ensure_provider_tests.py +++ b/tests/ensure_provider_tests.py @@ -107,18 +107,10 @@ EXTRA_RUN_CONDITION = "extra_run_condition" NM_ONLY_TESTS = { "playbooks/tests_802_1x_updated.yml": { - EXTRA_RUN_CONDITION: ( - "(not __network_is_rhel and\n" - " __network_distro_major_version | int > 7) or\n" - " __network_distro_major_version | int == 8" - ), + EXTRA_RUN_CONDITION: "not __network_is_rhel or __network_distro_major_version | int > 7", }, "playbooks/tests_802_1x.yml": { - EXTRA_RUN_CONDITION: ( - "(not __network_is_rhel and\n" - " __network_distro_major_version | int > 7) or\n" - " __network_distro_major_version | int == 8" - ), + EXTRA_RUN_CONDITION: "not __network_is_rhel or __network_distro_major_version | int > 7", }, "playbooks/tests_ignore_auto_dns.yml": {}, "playbooks/tests_bond_options.yml": {}, @@ -164,25 +156,19 @@ "playbooks/tests_team_plugin_installation.yml": { EXTRA_RUN_CONDITION: "not __is_rh_distro or\n __network_distro_major_version | int < 10", }, - # mac80211_hwsim (used for tests_wireless) only seems to be available - # and working on RHEL/CentOS 7 + # hostapd is not available on RHEL7, so tests_wireless cannot be run on RHEL7 "playbooks/tests_wireless.yml": { - EXTRA_RUN_CONDITION: "__network_distro_major_version == '7'", + EXTRA_RUN_CONDITION: "not __network_is_rhel or __network_distro_major_version | int > 7", }, "playbooks/tests_wireless_and_network_restart.yml": {}, "playbooks/tests_wireless_plugin_installation.yml": {}, "playbooks/tests_wireless_wpa3_owe.yml": { - "comment": "# OWE has not been supported by NetworkManager 1.18.8 on \ -RHEL 7(dist-tag). Failed in setting up mock wifi on RHEL 8", - EXTRA_RUN_CONDITION: "__network_distro_major_version | int > 7 and \ -__network_is_centos or\n __network_distro_major_version | int > 32 \ -and __network_is_fedora", + "comment": "# OWE has not been supported by NetworkManager 1.18.8 on EL 7.", + EXTRA_RUN_CONDITION: "not __is_rh_distro or __network_distro_major_version | int > 7", }, "playbooks/tests_wireless_wpa3_sae.yml": { - "comment": "# SAE has not been supported by NetworkManager 1.18.8 on \ -RHEL 7. Failed in setting up mock wifi on RHEL 8", - EXTRA_RUN_CONDITION: "__network_distro_major_version != '7' and \ -not __network_is_rhel", + "comment": "# SAE has not been supported by NetworkManager 1.18.8 on EL 7.", + EXTRA_RUN_CONDITION: "not __is_rh_distro or __network_distro_major_version | int > 7", }, } # NM_CONDITIONAL_TESTS is used to store the test playbooks which are demanding for NM diff --git a/tests/playbooks/tests_802_1x.yml b/tests/playbooks/tests_802_1x.yml index 466f3d5fa..5aa42918d 100644 --- a/tests/playbooks/tests_802_1x.yml +++ b/tests/playbooks/tests_802_1x.yml @@ -8,8 +8,10 @@ - name: "INIT: 802.1x tests" debug: msg: "##################################################" - - name: Include the task 'setup_802.1x.yml' - include_tasks: tasks/setup_802.1x.yml + - name: Include the task 'setup_mock_wifi.yml' + include_tasks: tasks/setup_mock_wifi.yml + vars: + __mock_wifi_mode: 802_1x - name: Test configuring 802.1x authentication block: - name: "TEST: 802.1x profile with private key password and ca cert" @@ -127,17 +129,8 @@ persistent_state: absent state: down __sr_failed_when: false - - name: Include the task 'cleanup_802_1x_server.yml' - include_tasks: tasks/cleanup_802_1x_server.yml - - name: Remove test certificates - file: - state: absent - path: "/etc/pki/tls/{{ item }}" - with_items: - - client.key - - client.key.nocrypt - - client.pem - - cacert.pem + - name: Include the task 'cleanup_mock_wifi.yml' + include_tasks: tasks/cleanup_mock_wifi.yml - name: Remove test CA file: state: absent diff --git a/tests/playbooks/tests_wireless.yml b/tests/playbooks/tests_wireless.yml index 912a958b3..04afee4a3 100644 --- a/tests/playbooks/tests_wireless.yml +++ b/tests/playbooks/tests_wireless.yml @@ -10,15 +10,6 @@ msg: "##################################################" - name: Include the task 'setup_mock_wifi.yml' include_tasks: tasks/setup_mock_wifi.yml - - name: Copy client certs - copy: - src: "{{ item }}" - dest: "/etc/pki/tls/{{ item }}" - mode: "0644" - with_items: - - client.key - - client.pem - - cacert.pem - name: Test wireless connection with WPA-PSK block: - name: "TEST: wireless connection with WPA-PSK" diff --git a/tests/playbooks/tests_wireless_wpa3_owe.yml b/tests/playbooks/tests_wireless_wpa3_owe.yml index 40b111908..1ac466c95 100644 --- a/tests/playbooks/tests_wireless_wpa3_owe.yml +++ b/tests/playbooks/tests_wireless_wpa3_owe.yml @@ -8,8 +8,10 @@ - name: "INIT: wireless tests" debug: msg: "##################################################" - - name: Include the task 'setup_mock_wifi_wpa3_owe.yml' - include_tasks: tasks/setup_mock_wifi_wpa3_owe.yml + - name: Include the task 'setup_mock_wifi.yml' + include_tasks: tasks/setup_mock_wifi.yml + vars: + __mock_wifi_mode: owe - name: Test wireless connection with OWE block: - name: "TEST: wireless connection with OWE" diff --git a/tests/playbooks/tests_wireless_wpa3_sae.yml b/tests/playbooks/tests_wireless_wpa3_sae.yml index 09f954fee..67aab61e9 100644 --- a/tests/playbooks/tests_wireless_wpa3_sae.yml +++ b/tests/playbooks/tests_wireless_wpa3_sae.yml @@ -6,8 +6,12 @@ interface: wlan0 tasks: - name: "INIT: wireless tests" - include_tasks: tasks/setup_mock_wifi_wpa3_sae.yml - when: ansible_facts['distribution'] in ['CentOS', 'Fedora'] + debug: + msg: "##################################################" + - name: Include the task 'setup_mock_wifi.yml' + include_tasks: tasks/setup_mock_wifi.yml + vars: + __mock_wifi_mode: sae - name: Test wireless connection with WPA3 Personal block: @@ -17,9 +21,7 @@ network_allow_restart: true network_connections: - name: "{{ interface }}" - # set `state: down` on RHEL 8 since we failed in setting up mock - # wifi on RHEL 8 - state: "{{ 'down' if ansible_facts['distribution'] == 'RedHat' else 'up' }}" + state: up type: wireless ip: address: diff --git a/tests/tasks/cleanup_802_1x_server.yml b/tests/tasks/cleanup_802_1x_server.yml deleted file mode 100644 index a444e9de3..000000000 --- a/tests/tasks/cleanup_802_1x_server.yml +++ /dev/null @@ -1,23 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause ---- -- name: Remove test interfaces - shell: | - set -uxo pipefail - exec 1>&2 - ip netns delete ns1 - ip link delete veth1-br - ip link delete veth2-br - ip link delete br1 - changed_when: false - -- name: Kill hostapd process - command: pkill hostapd - changed_when: false -- name: Remove certs and config - file: - state: absent - path: "{{ item }}" - with_items: - - /etc/pki/tls/hostapd_test - - /etc/hostapd/wired.conf - - /etc/hostapd/hostapd.eap_user diff --git a/tests/tasks/cleanup_mock_wifi.yml b/tests/tasks/cleanup_mock_wifi.yml index 51a9336d2..86a97db3b 100644 --- a/tests/tasks/cleanup_mock_wifi.yml +++ b/tests/tasks/cleanup_mock_wifi.yml @@ -1,9 +1,49 @@ # SPDX-License-Identifier: BSD-3-Clause --- +- name: Remove wired 802.1x test interfaces + shell: | + set -uxo pipefail + exec 1>&2 + ip netns delete ns1 + ip link delete veth1-br + ip link delete veth2-br + ip link delete br1 + changed_when: false + failed_when: false + - name: Unload mac80211_hwsim module command: modprobe -r mac80211_hwsim changed_when: false + failed_when: false - name: Kill hostapd process command: pkill hostapd changed_when: false + failed_when: false + +- name: Remove hostapd config files + file: + state: absent + path: "{{ item }}" + with_items: + - /etc/hostapd/wireless.conf + - /etc/hostapd/wired.conf + - /etc/hostapd/hostapd.eap_user + +- name: Remove server certificate directory for wired 802.1x tests + file: + state: absent + path: /etc/pki/tls/hostapd_test + +- name: Remove test certificates + file: + state: absent + path: "/etc/pki/tls/{{ item }}" + with_items: + - server.key + - dh.pem + - server.pem + - cacert.pem + - client.key + - client.key.nocrypt + - client.pem diff --git a/tests/tasks/setup_802.1x.yml b/tests/tasks/setup_802.1x.yml deleted file mode 100644 index 90e62c56f..000000000 --- a/tests/tasks/setup_802.1x.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -- name: Include the task 'setup_802_1x_server.yml' - include_tasks: tasks/setup_802_1x_server.yml -- name: Copy client certs - copy: - src: "{{ item }}" - dest: "/etc/pki/tls/{{ item }}" - mode: "0644" - with_items: - - client.key - - client.key.nocrypt - - client.pem - - cacert.pem diff --git a/tests/tasks/setup_802_1x_server.yml b/tests/tasks/setup_802_1x_server.yml deleted file mode 100644 index 60b9bd490..000000000 --- a/tests/tasks/setup_802_1x_server.yml +++ /dev/null @@ -1,91 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause ---- -- name: Debug - debug: - msg: facts {{ ansible_facts | to_nice_json }} - -- name: Install hostapd - package: - name: hostapd - state: present - use: "{{ (__network_is_ostree | d(false)) | - ternary('ansible.posix.rhel_rpm_ostree', omit) }}" - register: __install_status - until: __install_status is success - retries: 6 - delay: 10 - -- name: Create directory for test certificates - file: - state: directory - path: /etc/pki/tls/hostapd_test - mode: "0755" -- name: Copy server certificates - copy: - src: "{{ item }}" - dest: "/etc/pki/tls/hostapd_test/{{ item }}" - mode: "0644" - with_items: - - server.key - - dh.pem - - server.pem - - cacert.pem - -- name: Create test interfaces - shell: | - ip link add veth1 type veth peer name veth1-br - ip link add veth2 type veth peer name veth2-br - - ip link add br1 type bridge - ip link set br1 up - - ip netns add ns1 - - ip link set veth1 netns ns1 - - ip netns exec ns1 ip addr add 203.0.113.1/24 dev veth1 - - ip link set veth1-br up - ip link set veth2-br up - - ip link set veth1-br master br1 - ip link set veth2-br master br1 - - ip netns exec ns1 ip link set veth1 up - ip link set veth2 up - - # Enable forwarding of EAP 802.1x messages through software bridge "br1". - echo 8 > /sys/class/net/br1/bridge/group_fwd_mask - changed_when: false - -- name: Create hostapd config - copy: - content: | - interface=veth1 - driver=wired - debug=2 - ieee8021x=1 - eap_reauth_period=3600 - eap_server=1 - use_pae_group_addr=1 - eap_user_file=/etc/hostapd/hostapd.eap_user - ca_cert=/etc/pki/tls/hostapd_test/cacert.pem - dh_file=/etc/pki/tls/hostapd_test/dh.pem - server_cert=/etc/pki/tls/hostapd_test/server.pem - private_key=/etc/pki/tls/hostapd_test/server.key - private_key_passwd=test - logger_syslog=-1 - logger_syslog_level=0 - dest: /etc/hostapd/wired.conf - mode: "0644" - -- name: Create eap_user_file config - copy: - content: | - * TLS - dest: /etc/hostapd/hostapd.eap_user - mode: "0644" - -- name: Run hostapd in namespace - shell: ip netns exec ns1 hostapd -B /etc/hostapd/wired.conf && sleep 5 - changed_when: false diff --git a/tests/tasks/setup_mock_wifi.yml b/tests/tasks/setup_mock_wifi.yml index 94a19f798..3e36193fc 100644 --- a/tests/tasks/setup_mock_wifi.yml +++ b/tests/tasks/setup_mock_wifi.yml @@ -1,9 +1,17 @@ # SPDX-License-Identifier: BSD-3-Clause --- +- name: Set mock wifi mode + set_fact: + __mock_wifi_mode: "{{ __mock_wifi_mode | default('default') }}" + +- name: Set server certificate directory + set_fact: + __mock_wifi_server_cert_dir: "{{ '/etc/pki/tls/hostapd_test' + if __mock_wifi_mode == '802_1x' else '/etc/pki/tls' }}" + - name: Install packages required to set up mock wifi network package: name: - - hostapd - NetworkManager - wpa_supplicant state: present @@ -13,24 +21,121 @@ until: __install_status is success retries: 6 delay: 10 + when: __mock_wifi_mode != '802_1x' + +- name: Install hostapd + package: + name: hostapd + state: present + use: "{{ (__network_is_ostree | d(false)) | + ternary('ansible.posix.rhel_rpm_ostree', omit) }}" + register: __install_status + until: __install_status is success + retries: 6 + delay: 10 + +# NOTE: CentOS 7 kernel package includes the mac80211_hwsim kernel module +- name: Check if can test on RedHat or CentOS and install module if possible + when: + - ansible_facts['distribution'] in ['CentOS', 'RedHat'] + - ansible_facts['distribution_major_version'] | int > 7 + vars: + __centos_base_url: https://kojihub.stream.centos.org/kojifiles/packages/kernel + __rhel_base_url: "{{ lookup('env', 'RHEL_KERNEL_BASE_URL') }}" + __kernel_base_url: "{{ (ansible_facts['distribution'] == 'CentOS') | + ternary(__centos_base_url, __rhel_base_url) }}" + block: + # It is currently too difficult to install the required kernel + # if using rpm ostree - so just skip this test + - name: >- + This is an rpm-ostree system. This test cannot be run on such a system. + The test wants to install the mac80211_hwsim kernel module. + These operations are currently not supported on rpm-ostree systems. + meta: end_host + when: __network_is_ostree | d(false) + + - name: Install mac80211_hwsim kernel module + shell: + executable: /bin/bash + cmd: | + set -xo pipefail + exec 1>&2 + + release=$(uname -r) + tmp="${release/-//}" + tmp="${tmp/.x//x}" + baseurl="{{ __kernel_base_url | quote }}" + if [ -z "$baseurl" ]; then + echo "Error: baseurl is not set" + exit 1 + fi + {{ ansible_facts["pkg_mgr"] | quote }} --setopt=sslverify=0 -y install "$baseurl/$tmp/kernel-core-$release.rpm" + {{ ansible_facts["pkg_mgr"] | quote }} --setopt=sslverify=0 -y install "$baseurl/$tmp/kernel-modules-$release.rpm" + {{ ansible_facts["pkg_mgr"] | quote }} --setopt=sslverify=0 -y install "$baseurl/$tmp/kernel-modules-internal-$release.rpm" + changed_when: false + +- name: Install mac80211_hwsim kernel module in Fedora + shell: + executable: /bin/bash + cmd: | + set -xo pipefail + exec 1>&2 + + {{ ansible_facts["pkg_mgr"] | quote }} -y install koji + koji download-build --arch=$(uname -m) kernel-modules-internal-$(uname -r) + {{ ansible_facts["pkg_mgr"] | quote }} -y install kernel-modules*.rpm + when: ansible_facts['distribution'] == 'Fedora' + changed_when: false - name: Ensure NetworkManager is running service: name: NetworkManager state: started + when: __mock_wifi_mode != '802_1x' + +- name: Create directory for server certificates + file: + state: directory + path: "{{ __mock_wifi_server_cert_dir }}" + mode: "0755" + when: __mock_wifi_mode == '802_1x' - name: Copy server certificates copy: src: "{{ item }}" - dest: "/etc/pki/tls/{{ item }}" + dest: "{{ __mock_wifi_server_cert_dir }}/{{ item }}" mode: "0644" with_items: - server.key - dh.pem - server.pem - cacert.pem + when: __mock_wifi_mode in ['default', '802_1x'] + +- name: Copy client certificates + copy: + src: "{{ item }}" + dest: "/etc/pki/tls/{{ item }}" + mode: "0644" + with_items: + - client.key + - client.pem + - cacert.pem + when: __mock_wifi_mode == 'default' + +- name: Copy client certificates for wired 802.1x tests + copy: + src: "{{ item }}" + dest: "/etc/pki/tls/{{ item }}" + mode: "0644" + with_items: + - client.key + - client.key.nocrypt + - client.pem + - cacert.pem + when: __mock_wifi_mode == '802_1x' -- name: Create hostapd config +- name: Create hostapd config for default mock wifi mode copy: content: | interface=wlan1 @@ -51,15 +156,70 @@ eap_server=1 use_pae_group_addr=1 eap_user_file=/etc/hostapd/hostapd.eap_user - ca_cert=/etc/pki/tls/cacert.pem - dh_file=/etc/pki/tls/dh.pem - server_cert=/etc/pki/tls/server.pem - private_key=/etc/pki/tls/server.key + ca_cert={{ __mock_wifi_server_cert_dir }}/cacert.pem + dh_file={{ __mock_wifi_server_cert_dir }}/dh.pem + server_cert={{ __mock_wifi_server_cert_dir }}/server.pem + private_key={{ __mock_wifi_server_cert_dir }}/server.key private_key_passwd=test logger_syslog=-1 logger_syslog_level=0 dest: /etc/hostapd/wireless.conf mode: "0644" + when: __mock_wifi_mode == 'default' + +- name: Create hostapd config for OWE mock wifi mode + copy: + content: | + interface=wlan1 + ssid=hostapd-owe + hw_mode=g + channel=6 + wpa=2 + wpa_key_mgmt=OWE + rsn_pairwise=CCMP + ieee80211w=2 + nas_identifier=ap.example.com + dest: /etc/hostapd/wireless.conf + mode: "0644" + when: __mock_wifi_mode == 'owe' + +- name: Create hostapd config for SAE mock wifi mode + copy: + content: | + interface=wlan1 + ssid=hostapd-sae + hw_mode=g + channel=6 + wpa=2 + wpa_passphrase=p@55w0rD + wpa_key_mgmt=SAE + rsn_pairwise=CCMP + ieee80211w=2 + dest: /etc/hostapd/wireless.conf + mode: "0644" + when: __mock_wifi_mode == 'sae' + +- name: Create hostapd config for wired 802.1x tests + copy: + content: | + interface=veth1 + driver=wired + debug=2 + ieee8021x=1 + eap_reauth_period=3600 + eap_server=1 + use_pae_group_addr=1 + eap_user_file=/etc/hostapd/hostapd.eap_user + ca_cert={{ __mock_wifi_server_cert_dir }}/cacert.pem + dh_file={{ __mock_wifi_server_cert_dir }}/dh.pem + server_cert={{ __mock_wifi_server_cert_dir }}/server.pem + private_key={{ __mock_wifi_server_cert_dir }}/server.key + private_key_passwd=test + logger_syslog=-1 + logger_syslog_level=0 + dest: /etc/hostapd/wired.conf + mode: "0644" + when: __mock_wifi_mode == '802_1x' - name: Create eap_user_file config copy: @@ -67,28 +227,84 @@ * TLS dest: /etc/hostapd/hostapd.eap_user mode: "0644" + when: __mock_wifi_mode in ['default', '802_1x'] -- name: Load mac80211_hwsim kernel module to mock a wifi network - shell: modprobe mac80211_hwsim && sleep 5 - changed_when: false +- name: Create test interfaces and start hostapd for wired 802.1x tests + when: __mock_wifi_mode == '802_1x' + block: + - name: Create test interfaces for wired 802.1x tests + shell: + executable: /bin/bash + cmd: | + set -xo pipefail + exec 1>&2 -- name: Restart NetworkManager and wpa_supplicant - service: - name: "{{ item }}" - state: restarted - with_items: - - NetworkManager - - wpa_supplicant - -- name: Configure wlan0 and wlan1 (mock wifi interfaces) - shell: | - ip link set up wlan0 - ip link set up wlan1 - nmcli device set wlan1 managed off - ip add add 203.0.113.1/24 dev wlan1 - sleep 5 - changed_when: false + ip link add veth1 type veth peer name veth1-br + ip link add veth2 type veth peer name veth2-br -- name: Start hostapd - shell: hostapd -B /etc/hostapd/wireless.conf && sleep 5 - changed_when: false + ip link add br1 type bridge + ip link set br1 up + + ip netns add ns1 + + ip link set veth1 netns ns1 + + ip netns exec ns1 ip addr add 203.0.113.1/24 dev veth1 + + ip link set veth1-br up + ip link set veth2-br up + + ip link set veth1-br master br1 + ip link set veth2-br master br1 + + ip netns exec ns1 ip link set veth1 up + ip link set veth2 up + + # Enable forwarding of EAP 802.1x messages through software bridge "br1". + echo 8 > /sys/class/net/br1/bridge/group_fwd_mask + changed_when: false + + - name: Run hostapd in namespace for wired 802.1x tests + shell: ip netns exec ns1 hostapd -B /etc/hostapd/wired.conf && sleep 5 + changed_when: false + +- name: Load mac80211_hwsim kernel module, create devices, and start hostapd for mock wifi + when: __mock_wifi_mode != '802_1x' + block: + - name: Load mac80211_hwsim kernel module to mock a wifi network + shell: modprobe mac80211_hwsim {{ __hwsim_radio }} && sleep 5 + changed_when: false + vars: + __hwsim_radio: "{{ 'radios=2' if __mock_wifi_mode in ['owe', 'sae'] else '' }}" + + - name: Restart NetworkManager and wpa_supplicant + service: + name: "{{ item }}" + state: restarted + with_items: + - NetworkManager + - wpa_supplicant + + - name: Configure wlan0 and wlan1 (mock wifi interfaces) + shell: + executable: /bin/bash + cmd: | + set -xo pipefail + exec 1>&2 + + ip link set up wlan0 + ip link set up wlan1 + nmcli device set wlan1 managed off + ip addr add 203.0.113.1/24 dev wlan1 + sleep 5 + changed_when: false + + - name: Start hostapd for mock wifi + shell: + executable: /bin/bash + cmd: | + set -xo pipefail + exec 1>&2 + + hostapd -B /etc/hostapd/wireless.conf && sleep 5 + changed_when: false diff --git a/tests/tasks/setup_mock_wifi_wpa3_owe.yml b/tests/tasks/setup_mock_wifi_wpa3_owe.yml deleted file mode 100644 index 851a41678..000000000 --- a/tests/tasks/setup_mock_wifi_wpa3_owe.yml +++ /dev/null @@ -1,66 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause ---- -- name: Install packages required to set up mock wifi network - package: - name: - - NetworkManager - - wpa_supplicant - state: present - use: "{{ (__network_is_ostree | d(false)) | - ternary('ansible.posix.rhel_rpm_ostree', omit) }}" - register: __install_status - until: __install_status is success - retries: 6 - delay: 10 - -- name: Check if can test on CentOS and setup if possible - when: ansible_facts['distribution'] == 'CentOS' - block: - # It is currently too difficult to install the required kernel - # if using rpm ostree - so just skip this test - - name: >- - This is an rpm-ostree system. This test cannot be run on such a system. - The test wants to install the mac80211_hwsim kernel module. - These operations are currently not supported on rpm-ostree systems. - meta: end_host - when: __network_is_ostree | d(false) - - # yamllint disable rule:line-length - - name: Install hostapd and mac80211_hwsim kernel modules in CentOS - shell: | - dnf -y install hostapd - release=$(uname -r) - tmp="${release/-//}" - tmp="${tmp/.x//x}" - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-core-$release.rpm - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-modules-$release.rpm - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-modules-internal-$release.rpm - changed_when: false - # yamllint enable rule:line-length - -- name: Install hostapd and mac80211_hwsim kernel modules in Fedora - shell: | - dnf -y install hostapd - dnf -y install koji - koji download-build --arch=$(uname -m) kernel-modules-internal-$(uname -r) - dnf -y install kernel-modules*.rpm - when: ansible_facts['distribution'] == 'Fedora' - changed_when: false - -- name: Create hostapd config - copy: - content: | - interface=wlan1 - ssid=hostapd-owe - hw_mode=g - channel=6 - wpa=2 - wpa_key_mgmt=OWE - rsn_pairwise=CCMP - ieee80211w=2 - nas_identifier=ap.example.com - dest: /etc/hostapd/wireless.conf - mode: "0644" - -- name: Include the task 'start_mock_wifi.yml' - include_tasks: tasks/start_mock_wifi.yml diff --git a/tests/tasks/setup_mock_wifi_wpa3_sae.yml b/tests/tasks/setup_mock_wifi_wpa3_sae.yml deleted file mode 100644 index ed64cef4c..000000000 --- a/tests/tasks/setup_mock_wifi_wpa3_sae.yml +++ /dev/null @@ -1,86 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause ---- -- name: Install packages required to set up mock wifi network - package: - name: - - NetworkManager - - wpa_supplicant - state: present - use: "{{ (__network_is_ostree | d(false)) | - ternary('ansible.posix.rhel_rpm_ostree', omit) }}" - register: __install_status - until: __install_status is success - retries: 6 - delay: 10 - -- name: Configure CentOS system for testing, if possible - when: ansible_facts['distribution'] == 'CentOS' - block: - # It is currently too difficult to install the required kernel - # if using rpm ostree - so just skip this test - - name: >- - This is an rpm-ostree system. This test cannot be run on such a system. - The test wants to install the hostapd package from copr, and install - the mac80211_hwsim kernel module. These operations are currently not - supported on rpm-ostree systems. - meta: end_host - when: __network_is_ostree | d(false) - - # yamllint disable rule:line-length - # Even though hostapd can be installed via EPEL, Simultaneous Authentication - # of Equals (SAE) has not been enabled by default. To warrant the test support - # on CentOS, we setup hostapd copr repo to enable SAE option. - - name: Install hostapd and mac80211_hwsim kernel module in CentOS - shell: | - dnf -y copr enable liangwen12year/hostapd-owe - dnf -y install hostapd - release=$(uname -r) - tmp="${release/-//}" - tmp="${tmp/.x//x}" - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-core-$release.rpm - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-modules-$release.rpm - dnf -y install https://kojihub.stream.centos.org/kojifiles/packages/kernel/$tmp/kernel-modules-internal-$release.rpm - changed_when: false - # yamllint enable rule:line-length - -- name: Install hostapd in Fedora - package: - name: - - hostapd - state: present - when: - - ansible_facts['distribution'] == 'Fedora' - register: __install_status - until: __install_status is success - retries: 6 - delay: 10 - -# Since DNF package manager can not warrant installing the kernel module with -# the same version as the kernel in target machine, install the kernel module -# from koji instead -- name: Install mac80211_hwsim kernel module in Fedora - shell: | - dnf -y install koji - koji download-build --arch=$(uname -m) kernel-modules-internal-$(uname -r) - dnf -y install kernel-modules*.rpm - when: - - ansible_facts['distribution'] == 'Fedora' - changed_when: false - -- name: Create hostapd config - copy: - content: | - interface=wlan1 - ssid=hostapd-sae - hw_mode=g - channel=6 - wpa=2 - wpa_passphrase=p@55w0rD - wpa_key_mgmt=SAE - rsn_pairwise=CCMP - ieee80211w=2 - dest: /etc/hostapd/wireless.conf - mode: "0644" - -- name: Include the task 'start_mock_wifi.yml' - include_tasks: tasks/start_mock_wifi.yml diff --git a/tests/tasks/start_mock_wifi.yml b/tests/tasks/start_mock_wifi.yml deleted file mode 100644 index 23c0be35d..000000000 --- a/tests/tasks/start_mock_wifi.yml +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-License-Identifier: BSD-3-Clause ---- -- name: Ensure NetworkManager is running - service: - name: NetworkManager - state: started - -- name: Load mac80211_hwsim kernel module to mock a wifi network - shell: modprobe mac80211_hwsim radio=2 && sleep 5 - changed_when: false - -- name: Restart NetworkManager and wpa_supplicant - service: - name: "{{ item }}" - state: restarted - with_items: - - NetworkManager - - wpa_supplicant - -- name: Bring up wlan0 and wlan1 (mock wifi interfaces) - shell: | - ip link set up wlan0 - ip link set up wlan1 - nmcli device set wlan1 managed off - ip addr add 203.0.113.1/24 dev wlan1 - sleep 5 - changed_when: false - -- name: Start hostapd - shell: hostapd -B /etc/hostapd/wireless.conf && sleep 5 - changed_when: false diff --git a/tests/tests_802_1x_nm.yml b/tests/tests_802_1x_nm.yml index 02cc2c9e7..8f2d08d33 100644 --- a/tests/tests_802_1x_nm.yml +++ b/tests/tests_802_1x_nm.yml @@ -31,6 +31,4 @@ import_playbook: playbooks/tests_802_1x.yml when: - __network_distro_major_version != '6' - - (not __network_is_rhel and - __network_distro_major_version | int > 7) or - __network_distro_major_version | int == 8 + - not __network_is_rhel or __network_distro_major_version | int > 7 diff --git a/tests/tests_802_1x_updated_nm.yml b/tests/tests_802_1x_updated_nm.yml index 5f44dea7e..45b7ca48c 100644 --- a/tests/tests_802_1x_updated_nm.yml +++ b/tests/tests_802_1x_updated_nm.yml @@ -31,6 +31,4 @@ import_playbook: playbooks/tests_802_1x_updated.yml when: - __network_distro_major_version != '6' - - (not __network_is_rhel and - __network_distro_major_version | int > 7) or - __network_distro_major_version | int == 8 + - not __network_is_rhel or __network_distro_major_version | int > 7 diff --git a/tests/tests_wireless_nm.yml b/tests/tests_wireless_nm.yml index 6a653df60..f4c06b31a 100644 --- a/tests/tests_wireless_nm.yml +++ b/tests/tests_wireless_nm.yml @@ -31,4 +31,4 @@ import_playbook: playbooks/tests_wireless.yml when: - __network_distro_major_version != '6' - - __network_distro_major_version == '7' + - not __network_is_rhel or __network_distro_major_version | int > 7 diff --git a/tests/tests_wireless_wpa3_owe_nm.yml b/tests/tests_wireless_wpa3_owe_nm.yml index 5ec274be6..0b8fad3fd 100644 --- a/tests/tests_wireless_wpa3_owe_nm.yml +++ b/tests/tests_wireless_wpa3_owe_nm.yml @@ -24,13 +24,12 @@ __network_is_os_family_rhel: "{{ ansible_facts['os_family'] == 'RedHat' }}" __is_rh_distro: "{{ __network_is_rh_distro }}" + # The test requires or should run with NetworkManager, therefore it cannot run # on RHEL/CentOS 6 -# OWE has not been supported by NetworkManager 1.18.8 on RHEL 7(dist-tag). Failed in setting up mock wifi on RHEL 8 +# OWE has not been supported by NetworkManager 1.18.8 on EL 7. - name: Import the playbook 'playbooks/tests_wireless_wpa3_owe.yml' import_playbook: playbooks/tests_wireless_wpa3_owe.yml when: - __network_distro_major_version != '6' - - __network_distro_major_version | int > 7 and __network_is_centos or - __network_distro_major_version | int > 7 and __network_is_rhel or - __network_distro_major_version | int > 32 and __network_is_fedora + - not __is_rh_distro or __network_distro_major_version | int > 7 diff --git a/tests/tests_wireless_wpa3_sae_nm.yml b/tests/tests_wireless_wpa3_sae_nm.yml index 7600b1469..31fe841bd 100644 --- a/tests/tests_wireless_wpa3_sae_nm.yml +++ b/tests/tests_wireless_wpa3_sae_nm.yml @@ -27,9 +27,9 @@ # The test requires or should run with NetworkManager, therefore it cannot run # on RHEL/CentOS 6 -# SAE has not been supported by NetworkManager 1.18.8 on RHEL 7. Failed in setting up mock wifi on RHEL 8 +# SAE has not been supported by NetworkManager 1.18.8 on EL 7. - name: Import the playbook 'playbooks/tests_wireless_wpa3_sae.yml' import_playbook: playbooks/tests_wireless_wpa3_sae.yml when: - __network_distro_major_version != '6' - - __network_distro_major_version != '7' and not __network_is_rhel + - not __is_rh_distro or __network_distro_major_version | int > 7