Skip to content

Commit

Permalink
_ip_addresses: Add option to complete all/v4/v6 addresses, add unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
scop committed Apr 22, 2018
1 parent 9214270 commit dc72400
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 4 deletions.
16 changes: 12 additions & 4 deletions bash_completion
Original file line number Diff line number Diff line change
Expand Up @@ -912,15 +912,23 @@ _configured_interfaces()
}

# Local IP addresses.
# -4: IPv4 addresses only (default)
# -6: IPv6 addresses only
# -a: All addresses
#
_ip_addresses()
{
local n
case $1 in
-a) n='6\?' ;;
-6) n='6' ;;
esac
local PATH=$PATH:/sbin
COMPREPLY+=( $( compgen -W \
"$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null | command sed -ne \
local addrs=$( { LC_ALL=C ifconfig -a || ip addr show; } 2>/dev/null |
command sed -ne \
's/.*addr:\([^[:space:]]*\).*/\1/p' -ne \
's|.*inet[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p' )" \
-- "$cur" ) )
"s|.*inet$n[[:space:]]\{1,\}\([^[:space:]/]*\).*|\1|p" )
COMPREPLY+=( $( compgen -W "$addrs" -- "$cur" ) )
}

# This function completes on available kernels
Expand Down
53 changes: 53 additions & 0 deletions test/unit/_ip_addresses.exp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
proc setup {} {
assert_bash_exec {unset COMPREPLY cur}
save_env

assert_bash_exec { \
_ia() { local cur=$(_get_cword);unset COMPREPLY;_ip_addresses; }; \
complete -F _ia ia \
}
assert_bash_exec { \
_iaa() { local cur=$(_get_cword);unset COMPREPLY;_ip_addresses -a; }; \
complete -F _iaa iaa \
}
assert_bash_exec { \
_ia6() { local cur=$(_get_cword);unset COMPREPLY;_ip_addresses -6; }; \
complete -F _ia6 ia6 \
}
}

proc teardown {} {
assert_bash_exec {unset COMPREPLY cur}
assert_bash_exec {unset -f _ia _iaa _ia6}
assert_env_unmodified
}

setup


# TODO: add/robustify conditions on expected failures or unsupported setups
# ...so that there's no need for junk like CI/DIST special-casing

set test "_ip_addresses should run without errors"
assert_bash_exec {_ip_addresses} $test
sync_after_int

set test "_ip_addresses -a should complete ip addresses"
assert_complete_any "iaa "
sync_after_int

set test "_ip_addresses should complete ipv4 addresses"
assert_complete_any "ia "
sync_after_int

set test "_ip_addresses -6 should complete ipv6 addresses"
if {[info exists ::env(CI)] &&
[info exists ::env(DIST)] && $::env(DIST) == "fedoradev"} {
unsupported $test
} else {
assert_complete_any "ia6 "
}
sync_after_int


teardown

0 comments on commit dc72400

Please sign in to comment.