mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-12 16:20:06 +00:00
40e04e053c
This is done if we want to show a public IP, internal IP, or a VPN. In the VPN case, what we actually want is to display an indicator that a VPN is active, instead of the VPN IP itself. We parse the IP here anyway, because we want to save some specific code there.
242 lines
No EOL
6.9 KiB
Bash
Executable file
242 lines
No EOL
6.9 KiB
Bash
Executable file
#!/usr/bin/env zsh
|
|
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
|
|
|
# Required for shunit2 to run correctly
|
|
setopt shwordsplit
|
|
SHUNIT_PARENT=$0
|
|
|
|
function setUp() {
|
|
export TERM="xterm-256color"
|
|
|
|
# Test specific
|
|
P9K_HOME=$(pwd)
|
|
FOLDER=/tmp/powerlevel9k-test
|
|
mkdir -p $FOLDER
|
|
mkdir $FOLDER/bin
|
|
mkdir $FOLDER/sbin
|
|
}
|
|
|
|
function tearDown() {
|
|
# Go back to powerlevel9k folder
|
|
cd "${P9K_HOME}"
|
|
# Remove eventually created test-specific folder
|
|
rm -fr "${FOLDER}"
|
|
|
|
unset FOLDER
|
|
unset P9K_HOME
|
|
}
|
|
|
|
function fakeIfconfig() {
|
|
local INTERFACE1="${1}"
|
|
[[ -z "${INTERFACE1}" ]] && INTERFACE1="eth0"
|
|
local INTERFACE1_IP="1.2.3.4"
|
|
local INTERFACE2="${2}"
|
|
[[ -z "${INTERFACE2}" ]] && INTERFACE2="disabled-if2"
|
|
local INTERFACE2_IP="5.6.7.8"
|
|
# Fake ifconfig
|
|
cat > $FOLDER/sbin/ifconfig <<EOF
|
|
#!/usr/bin/env zsh
|
|
|
|
if [[ "\$*" =~ '-l' ]]; then
|
|
echo "docker0 tun1 ${INTERFACE1} ${INTERFACE2} lo"
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "\$*" =~ '${INTERFACE1}' ]]; then
|
|
cat <<INNER
|
|
tun1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
|
|
inet ${INTERFACE1_IP} txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
INNER
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "\$*" =~ '${INTERFACE2}' ]]; then
|
|
cat <<INNER
|
|
tun1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
|
|
inet ${INTERFACE2_IP} txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
INNER
|
|
exit 0
|
|
fi
|
|
|
|
|
|
# If neither INTERFACE1 nor INTERFACE2 is queried, fake a offline (DOWN) interface.
|
|
# We assume if there is at least one argument, we queried for a specific interface.
|
|
if [[ "\$#" -gt 0 ]]; then
|
|
cat <<INNER
|
|
tun1: flags=4099<DOWN,BROADCAST,MULTICAST> mtu 1500
|
|
inet 5.5.5.5 txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
INNER
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "\$#" -eq 0 ]]; then
|
|
cat <<INNER
|
|
docker0: flags=4099<DOWN,BROADCAST,MULTICAST> mtu 1500
|
|
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
|
|
ether 02:42:8f:5c:ed:51 txqueuelen 0 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
|
|
tun1: flags=4099<DOWN,BROADCAST,MULTICAST> mtu 1500
|
|
inet 10.20.30.40 txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
|
|
${INTERFACE1}: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
|
|
inet ${INTERFACE1_IP} txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
|
|
${INTERFACE2}: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
|
|
inet ${INTERFACE2_IP} txqueuelen 1000 (Ethernet)
|
|
RX packets 0 bytes 0 (0.0 B)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 0 bytes 0 (0.0 B)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
device interrupt 16 memory 0xe8200000-e8220000
|
|
|
|
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
|
|
inet 127.0.0.1 netmask 255.0.0.0
|
|
inet6 ::1 prefixlen 128 scopeid 0x10<host>
|
|
loop txqueuelen 1000 (Local Loopback)
|
|
RX packets 5136 bytes 328651 (320.9 KiB)
|
|
RX errors 0 dropped 0 overruns 0 frame 0
|
|
TX packets 5136 bytes 328651 (320.9 KiB)
|
|
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
|
INNER
|
|
exit 0
|
|
fi
|
|
EOF
|
|
chmod +x $FOLDER/sbin/ifconfig
|
|
}
|
|
|
|
function fakeIp() {
|
|
local INTERFACE1="${1}"
|
|
[[ -z "${INTERFACE1}" ]] && INTERFACE1="eth0"
|
|
local INTERFACE2="${2}"
|
|
[[ -z "${INTERFACE2}" ]] && INTERFACE2="disabled-if2"
|
|
cat > $FOLDER/sbin/ip <<EOF
|
|
#!/usr/bin/env zsh
|
|
|
|
if [[ "\$*" =~ '-brief.*show' ]]; then
|
|
cat <<INNER
|
|
lo UNKNOWN 127.0.0.1/8
|
|
${INTERFACE1} UP 1.2.3.4/24
|
|
${INTERFACE2} UP 5.4.3.2/16
|
|
docker0 DOWN 172.17.0.1/16
|
|
INNER
|
|
fi
|
|
|
|
if [[ "\$*" =~ 'show ${INTERFACE1}' ]]; then
|
|
cat <<INNER
|
|
3: ${INTERFACE1}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
|
|
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
|
|
valid_lft forever preferred_lft forever
|
|
INNER
|
|
fi
|
|
|
|
if [[ "\$*" =~ 'show ${INTERFACE2}' ]]; then
|
|
cat <<INNER
|
|
3: ${INTERFACE2}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
|
|
inet 1.2.3.4 brd 10.0.2.255 scope global eth0
|
|
valid_lft forever preferred_lft forever
|
|
INNER
|
|
fi
|
|
EOF
|
|
|
|
chmod +x $FOLDER/sbin/ip
|
|
}
|
|
|
|
function testIpSegmentPrintsNothingOnOsxIfNotConnected() {
|
|
cat > $FOLDER/sbin/ifconfig <<EOF
|
|
#!/usr/bin/env zsh
|
|
|
|
echo "not connected"
|
|
EOF
|
|
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS="OSX" # Fake OSX
|
|
|
|
assertEquals "" "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
function testIpSegmentPrintsNothingOnLinuxIfNotConnected() {
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS="Linux" # Fake Linux
|
|
|
|
cat > $FOLDER/sbin/ip <<EOF
|
|
#!/usr/bin/env zsh
|
|
|
|
echo "not connected"
|
|
EOF
|
|
chmod +x $FOLDER/sbin/ip
|
|
|
|
assertEquals "" "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
function testIpSegmentWorksOnOsxWithNoInterfaceSpecified() {
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS='OSX' # Fake OSX
|
|
|
|
fakeIfconfig "eth1" "eth2"
|
|
|
|
assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 " "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
function testIpSegmentWorksOnOsxWithInterfaceSpecified() {
|
|
fakeIfconfig "eth1"
|
|
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS='OSX' # Fake OSX
|
|
|
|
assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 " "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
function testIpSegmentWorksOnLinuxWithNoInterfaceSpecified() {
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS='Linux' # Fake Linux
|
|
|
|
fakeIp "eth0"
|
|
|
|
assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 " "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
function testIpSegmentWorksOnLinuxWithInterfaceSpecified() {
|
|
fakeIp "eth3"
|
|
|
|
# Load Powerlevel9k
|
|
source powerlevel9k.zsh-theme
|
|
local OS='Linux' # Fake Linux
|
|
|
|
assertEquals "%K{006} %F{000}IP %f%F{000}1.2.3.4 " "$(prompt_ip left 1 false "$FOLDER")"
|
|
}
|
|
|
|
source shunit2/shunit2 |