aboutsummaryrefslogtreecommitdiff
path: root/test/segments/vpn_ip.spec
blob: 870126e582af8e99dec1c5153dc7f15a5cbf47ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/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() {
    # Fake ifconfig
  cat > $FOLDER/sbin/ifconfig <<EOF
#!/usr/bin/env zsh

if [[ "\$#" -gt 0 ]]; then
  cat <<INNER
tun1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 1.2.3.4  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

  cat <<INNER
docker0: flags=4099<UP,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<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 1.2.3.4  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
EOF
  chmod +x $FOLDER/sbin/ifconfig
}

function fakeIp() {
  local INTERFACE1="${1}"
  [[ -z "${INTERFACE1}" ]] && INTERFACE1="tun0"
  local INTERFACE2="${2}"
  [[ -z "${INTERFACE2}" ]] && INTERFACE2="disabled-if2"
  cat > $FOLDER/sbin/ip <<EOF
#!/usr/bin/env zsh

  if [[ "\$*" == 'link ls up' ]]; then
    cat <<INNER
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ${INTERFACE1}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff
3: ${INTERFACE2}: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:7e:84:45 brd ff:ff:ff:ff:ff:ff
INNER
  fi

  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 testVpnIpSegmentPrintsNothingOnOsxIfNotConnected() {
  # Load Powerlevel9k
  source powerlevel9k.zsh-theme
  local OS="OSX" # Fake OSX

  cat > $FOLDER/sbin/ifconfig <<EOF
#!/usr/bin/env zsh

echo "not connected"
EOF
  chmod +x $FOLDER/sbin/ifconfig

  assertEquals "" "$(prompt_vpn_ip left 1 false "$FOLDER")"
}

function testVpnIpSegmentPrintsNothingOnLinuxIfNotConnected() {
  # 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_vpn_ip left 1 false "$FOLDER")"
}

function testVpnIpSegmentWorksOnOsxWithInterfaceSpecified() {
  local POWERLEVEL9K_VPN_IP_INTERFACE='tun1'

  fakeIfconfig

  # Load Powerlevel9k
  source powerlevel9k.zsh-theme
  local OS='OSX' # Fake OSX

  assertEquals "%K{006} %F{000}(vpn) %F{000}1.2.3.4 " "$(prompt_vpn_ip left 1 false "$FOLDER")"
}

function testVpnIpSegmentWorksOnLinuxWithInterfaceSpecified() {
    local POWERLEVEL9K_VPN_IP_INTERFACE='tun1'
    
    fakeIp "tun1"

    # Load Powerlevel9k
    source powerlevel9k.zsh-theme
    local OS='Linux' # Fake Linux

    assertEquals "%K{006} %F{000}(vpn) %F{000}1.2.3.4 " "$(prompt_vpn_ip left 1 false "$FOLDER")"
}

# vpn_ip is not capable of handling multiple vpn interfaces ATM.
# function testVpnIpSegmentWorksOnLinuxWithMultipleInterfacesSpecified() {
#     local POWERLEVEL9K_VPN_IP_INTERFACE=(tun0 tun1)
    
#     fakeIp "tun0" "tun1"

#     # Load Powerlevel9k
#     source powerlevel9k.zsh-theme
#     local OS='Linux' # Fake Linux

# setopt xtrace
#     assertEquals "%K{006} %F{000}(vpn) %F{000}10.0.2.15 " "$(prompt_vpn_ip left 1 false "$FOLDER")"
#     unsetopt xtrace
# }

source shunit2/shunit2