diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b40407..8ad8ff9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,21 +64,11 @@ jobs: - fedora:rawhide - almalinux:8 - almalinux:latest - # RedHat UBI is mostly garbage due to a profound lack of basic - # packages. It is tested anyway because it's the closest available - # approximation of RHEL, aside from AlmaLinux. Some of the packages - # needed for some tests aren't available, so those tests will be - # skipped. I guess it's still better than nothing. - - registry.access.redhat.com/ubi7/ubi:latest runs-on: ubuntu-latest container: image: ${{ matrix.image }} steps: - - if: ${{ matrix.image != 'registry.access.redhat.com/ubi7/ubi:latest' }} - uses: actions/checkout@v4 - # ubi7 is too old for checkout@v4. - - if: ${{ matrix.image == 'registry.access.redhat.com/ubi7/ubi:latest' }} - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: enable repositories (AlmaLinux 8) if: ${{ matrix.image == 'almalinux:8' }} run: | @@ -93,12 +83,7 @@ jobs: # The --skip-broken argument works around RedHat UBI's missing packages. # (They're only used for testing, so it's OK to not install them.) run: | - inst="dnf --refresh --skip-broken install -y" - case '${{ matrix.image }}' in - # RedHat UBI 7 (RHEL 7) doesn't have dnf. - *ubi7*) inst="yum --skip-broken install -y";; - esac - ${inst} \ + dnf --refresh --skip-broken install -y \ automake \ findutils \ iproute \ diff --git a/t/get_ip_from_if.pl b/t/get_ip_from_if.pl index 6f08e5d..15c66a1 100644 --- a/t/get_ip_from_if.pl +++ b/t/get_ip_from_if.pl @@ -39,23 +39,30 @@ subtest "get_ip_from_interface tests" => sub { } }; -subtest "Get default interface and IP for test system" => sub { +subtest "Get default interface and IP for test system (IPv4)" => sub { my $interface = ddclient::get_default_interface(4); - if ($interface) { - isnt($interface, "lo", "Check for loopback 'lo'"); - isnt($interface, "lo0", "Check for loopback 'lo0'"); - my $ip1 = ddclient::get_ip_from_interface("default", 4); - my $ip2 = ddclient::get_ip_from_interface($interface, 4); - is($ip1, $ip2, "Check IPv4 from default interface"); + plan(skip_all => 'no IPv4 interface') if !$interface; + isnt($interface, "lo", "Check for loopback 'lo'"); + isnt($interface, "lo0", "Check for loopback 'lo0'"); + my $ip1 = ddclient::get_ip_from_interface("default", 4); + my $ip2 = ddclient::get_ip_from_interface($interface, 4); + is($ip1, $ip2, "Check IPv4 from default interface"); + SKIP: { + skip('default interface does not have an appropriate IPv4 addresses') if !$ip1; ok(ddclient::is_ipv4($ip1), "Valid IPv4 from get_ip_from_interface($interface)"); } - $interface = ddclient::get_default_interface(6); - if ($interface) { - isnt($interface, "lo", "Check for loopback 'lo'"); - isnt($interface, "lo0", "Check for loopback 'lo0'"); - my $ip1 = ddclient::get_ip_from_interface("default", 6); - my $ip2 = ddclient::get_ip_from_interface($interface, 6); - is($ip1, $ip2, "Check IPv6 from default interface"); +}; + +subtest "Get default interface and IP for test system (IPv6)" => sub { + my $interface = ddclient::get_default_interface(6); + plan(skip_all => 'no IPv6 interface') if !$interface; + isnt($interface, "lo", "Check for loopback 'lo'"); + isnt($interface, "lo0", "Check for loopback 'lo0'"); + my $ip1 = ddclient::get_ip_from_interface("default", 6); + my $ip2 = ddclient::get_ip_from_interface($interface, 6); + is($ip1, $ip2, "Check IPv6 from default interface"); + SKIP: { + skip('default interface does not have an appropriate IPv6 addresses') if !$ip1; ok(ddclient::is_ipv6($ip1), "Valid IPv6 from get_ip_from_interface($interface)"); } };