|
1 | 1 | test_name 'C59029: networking facts should be fully populated' do |
2 | 2 | tag 'risk:high' |
3 | 3 |
|
4 | | -# |
5 | | -# This test is intended to ensure that networking facts resolves |
6 | | -# as expected across supported platforms. |
7 | | -# |
| 4 | + # |
| 5 | + # This test is intended to ensure that networking facts resolve |
| 6 | + # as expected across supported platforms. |
| 7 | + # |
8 | 8 |
|
9 | 9 | @ip_regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ |
10 | 10 | @netmask_regex = /^(((128|192|224|240|248|252|254)\.0\.0\.0)|(255\.(0|128|192|224|240|248|252|254)\.0\.0)|(255\.255\.(0|128|192|224|240|248|252|254)\.0)|(255\.255\.255\.(0|128|192|224|240|248|252|254)))$/ |
11 | 11 |
|
12 | 12 | expected_networking = { |
13 | | - "networking.dhcp" => agent['platform'] =~ /fedora-32|el-8-aarch64/ ? '' : @ip_regex, # https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/426 |
14 | | - "networking.ip" => @ip_regex, |
15 | | - "networking.ip6" => /[a-f0-9]+:+/, |
16 | | - "networking.mac" => /[a-f0-9]{2}:/, |
17 | | - "networking.mtu" => /\d+/, |
18 | | - "networking.netmask" => @netmask_regex, |
19 | | - "networking.netmask6" => /[a-f0-9]+:/, |
20 | | - "networking.network" => @ip_regex, |
21 | | - "networking.network6" => /([a-f0-9]+)?:([a-f0-9]+)?/ |
| 13 | + %w[networking dhcp] => agent['platform'] =~ /fedora-32|el-8-aarch64/ ? '' : @ip_regex, # https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/426 |
| 14 | + %w[networking ip] => @ip_regex, |
| 15 | + %w[networking ip6] => /[a-f0-9]+:+/, |
| 16 | + %w[networking mac] => /[a-f0-9]{2}:/, |
| 17 | + %w[networking mtu] => /\d+/, |
| 18 | + %w[networking netmask] => @netmask_regex, |
| 19 | + %w[networking netmask6] => /[a-f0-9]+:/, |
| 20 | + %w[networking network] => @ip_regex, |
| 21 | + %w[networking network6] => /([a-f0-9]+)?:([a-f0-9]+)?/, |
| 22 | + %w[networking scope6] => /link|host|site|global|compat/ |
22 | 23 | } |
23 | 24 |
|
24 | 25 | agents.each do |agent| |
25 | 26 | primary_interface = fact_on(agent, 'networking.primary') |
26 | 27 | refute_empty(primary_interface) |
27 | 28 |
|
28 | 29 | expected_bindings = { |
29 | | - "networking.interfaces.#{primary_interface}.bindings.0.address" => @ip_regex, |
30 | | - "networking.interfaces.#{primary_interface}.bindings.0.netmask" => @netmask_regex, |
31 | | - "networking.interfaces.#{primary_interface}.bindings.0.network" => @ip_regex, |
32 | | - "networking.interfaces.#{primary_interface}.bindings6.0.address" => /[a-f0-9:]+/, |
33 | | - "networking.interfaces.#{primary_interface}.bindings6.0.netmask" => /[a-f0-9:]+/, |
34 | | - "networking.interfaces.#{primary_interface}.bindings6.0.network" => /[a-f0-9:]+/ |
| 30 | + ['networking', 'interfaces', primary_interface, 'bindings', 0, 'address'] => @ip_regex, |
| 31 | + ['networking', 'interfaces', primary_interface, 'bindings', 0, 'netmask'] => @netmask_regex, |
| 32 | + ['networking', 'interfaces', primary_interface, 'bindings', 0, 'network'] => @ip_regex, |
| 33 | + ['networking', 'interfaces', primary_interface, 'bindings6', 0, 'address'] => /[a-f0-9:]+/, |
| 34 | + ['networking', 'interfaces', primary_interface, 'bindings6', 0, 'netmask'] => /[a-f0-9:]+/, |
| 35 | + ['networking', 'interfaces', primary_interface, 'bindings6', 0, 'network'] => /[a-f0-9:]+/, |
| 36 | + ['networking', 'interfaces', primary_interface, 'bindings6', 0, 'scope6'] => /link|host|site|global|compat/ |
35 | 37 | } |
36 | 38 |
|
37 | 39 | if agent['platform'] =~ /eos|solaris|aix|cisco/ |
38 | 40 | #remove the invalid networking facts on eccentric platforms |
39 | | - expected_networking.delete("networking.ip6") |
40 | | - expected_networking.delete("networking.netmask6") |
41 | | - expected_networking.delete("networking.network6") |
| 41 | + expected_networking.delete(%w[networking ip6]) |
| 42 | + expected_networking.delete(%w[networking netmask6]) |
| 43 | + expected_networking.delete(%w[networking network6]) |
| 44 | + expected_networking.delete(%w[networking scope6]) |
42 | 45 |
|
43 | 46 | #remove invalid bindings for the primary networking interface eccentric platforms |
44 | | - expected_bindings.delete("networking.interfaces.#{primary_interface}.bindings6.0.address") |
45 | | - expected_bindings.delete("networking.interfaces.#{primary_interface}.bindings6.0.netmask") |
46 | | - expected_bindings.delete("networking.interfaces.#{primary_interface}.bindings6.0.network") |
| 47 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings6', 0, 'address']) |
| 48 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings6', 0, 'netmask']) |
| 49 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings6', 0, 'network']) |
| 50 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings6', 0, 'scope6']) |
47 | 51 | end |
48 | 52 |
|
49 | 53 | if agent['platform'] =~ /aix|sparc|cisco|huawei|sles|s390x/ |
50 | 54 | # some of our testing platforms do not use DHCP |
51 | | - expected_networking.delete("networking.dhcp") |
| 55 | + expected_networking.delete(%w[networking dhcp]) |
52 | 56 | end |
53 | 57 |
|
54 | 58 | if agent['platform'] =~ /cisco/ |
55 | 59 | # Cisco main interface does not define netmask or network |
56 | | - expected_networking.delete("networking.network") |
57 | | - expected_networking.delete("networking.netmask") |
| 60 | + expected_networking.delete(%w[networking network]) |
| 61 | + expected_networking.delete(%w[networking netmask]) |
58 | 62 |
|
59 | 63 | #remove invalid bindings for Cisco's primary networking interface |
60 | | - expected_bindings.delete("networking.interfaces.#{primary_interface}.bindings.0.netmask") |
61 | | - expected_bindings.delete("networking.interfaces.#{primary_interface}.bindings.0.network") |
| 64 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings', 0, 'netmask']) |
| 65 | + expected_bindings.delete(['networking', 'interfaces', primary_interface, 'bindings', 0, 'network']) |
62 | 66 | end |
63 | 67 |
|
| 68 | + networking_facts = JSON.parse(on(agent, facter('networking --json')).stdout) |
| 69 | + |
64 | 70 | step "Ensure the Networking fact resolves with reasonable values for at least one interface" do |
65 | | - expected_networking.each do |fact, value| |
66 | | - assert_match(value, fact_on(agent, fact).to_s) |
| 71 | + expected_networking.each do |fact_tokens, regex| |
| 72 | + assert_match(regex, networking_facts.dig(*fact_tokens).to_s) |
67 | 73 | end |
68 | 74 | end |
69 | 75 |
|
70 | 76 | step "Ensure bindings for the primary networking interface are present" do |
71 | | - expected_bindings.each do |fact, value| |
72 | | - assert_match(value, fact_on(agent, fact).to_s) |
| 77 | + expected_bindings.each do |fact_tokens, regex| |
| 78 | + assert_match(regex, networking_facts.dig(*fact_tokens).to_s) |
73 | 79 | end |
74 | 80 | end |
75 | 81 | end |
76 | 82 |
|
77 | 83 | # Verify that IP Address v6 and network v6 is retrieved correctly and does not contain the interface identifier |
78 | 84 | agents.each do |agent| |
79 | 85 | if agent['platform'] =~ /windows/ |
80 | | - step("verify that ipaddress6 is retrieved correctly") do |
81 | | - on(agent, facter("ipaddress6")) do |facter_result| |
| 86 | + step "verify that ipaddress6 is retrieved correctly" do |
| 87 | + on(agent, facter('ipaddress6')) do |facter_result| |
82 | 88 | assert_match(/^[a-fA-F0-9:]+$/, facter_result.stdout.chomp) |
83 | 89 | end |
84 | 90 | end |
85 | 91 |
|
86 | | - step("verify that network6 is retrieved correctly") do |
87 | | - on(agent, facter("network6")) do |facter_result| |
| 92 | + step "verify that network6 is retrieved correctly" do |
| 93 | + on(agent, facter('network6')) do |facter_result| |
88 | 94 | assert_match(/([a-fA-F0-9:]+)?:([a-fA-F0-9:]+)?$/, facter_result.stdout.chomp) |
89 | 95 | end |
90 | 96 | end |
|
0 commit comments