mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
selftests: ovpn: add notification parsing and matching
To verify that netlink notifications are correctly emitted and contain the expected fields, this commit uses the tools/net/ynl/pyynl/cli.py script to create multicast listeners. These listeners record the captured notifications to a JSON file, which is later compared to the expected output. Cc: linux-kselftest@vger.kernel.org Cc: shuah@kernel.org Cc: horms@kernel.org Signed-off-by: Ralf Lici <ralf@mandelbit.com> Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
This commit is contained in:
parent
c841b676da
commit
77de28cd7c
|
|
@ -23,7 +23,14 @@ endif
|
||||||
LDLIBS += $(NL_LDLIBS)
|
LDLIBS += $(NL_LDLIBS)
|
||||||
|
|
||||||
|
|
||||||
TEST_FILES = common.sh
|
TEST_FILES = \
|
||||||
|
common.sh \
|
||||||
|
data64.key \
|
||||||
|
json \
|
||||||
|
tcp_peers.txt \
|
||||||
|
udp_peers.txt \
|
||||||
|
../../../../net/ynl/pyynl/cli.py \
|
||||||
|
# end of TEST_FILES
|
||||||
|
|
||||||
TEST_PROGS := \
|
TEST_PROGS := \
|
||||||
test-chachapoly.sh \
|
test-chachapoly.sh \
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,18 @@
|
||||||
UDP_PEERS_FILE=${UDP_PEERS_FILE:-udp_peers.txt}
|
UDP_PEERS_FILE=${UDP_PEERS_FILE:-udp_peers.txt}
|
||||||
TCP_PEERS_FILE=${TCP_PEERS_FILE:-tcp_peers.txt}
|
TCP_PEERS_FILE=${TCP_PEERS_FILE:-tcp_peers.txt}
|
||||||
OVPN_CLI=${OVPN_CLI:-./ovpn-cli}
|
OVPN_CLI=${OVPN_CLI:-./ovpn-cli}
|
||||||
|
YNL_CLI=${YNL_CLI:-../../../../net/ynl/pyynl/cli.py}
|
||||||
ALG=${ALG:-aes}
|
ALG=${ALG:-aes}
|
||||||
PROTO=${PROTO:-UDP}
|
PROTO=${PROTO:-UDP}
|
||||||
FLOAT=${FLOAT:-0}
|
FLOAT=${FLOAT:-0}
|
||||||
|
|
||||||
|
JQ_FILTER='map(select(.msg.peer | has("remote-ipv6") | not)) |
|
||||||
|
map(del(.msg.ifindex)) | sort_by(.msg.peer.id)[]'
|
||||||
LAN_IP="11.11.11.11"
|
LAN_IP="11.11.11.11"
|
||||||
|
|
||||||
|
declare -A tmp_jsons=()
|
||||||
|
declare -A listener_pids=()
|
||||||
|
|
||||||
create_ns() {
|
create_ns() {
|
||||||
ip netns add peer${1}
|
ip netns add peer${1}
|
||||||
}
|
}
|
||||||
|
|
@ -48,6 +54,14 @@ setup_ns() {
|
||||||
ip -n peer${1} link set tun${1} up
|
ip -n peer${1} link set tun${1} up
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup_listener() {
|
||||||
|
file=$(mktemp)
|
||||||
|
PYTHONUNBUFFERED=1 ip netns exec peer${p} ${YNL_CLI} --family ovpn \
|
||||||
|
--subscribe peers --output-json --duration 40 > ${file} &
|
||||||
|
listener_pids[$1]=$!
|
||||||
|
tmp_jsons[$1]="${file}"
|
||||||
|
}
|
||||||
|
|
||||||
add_peer() {
|
add_peer() {
|
||||||
if [ "${PROTO}" == "UDP" ]; then
|
if [ "${PROTO}" == "UDP" ]; then
|
||||||
if [ ${1} -eq 0 ]; then
|
if [ ${1} -eq 0 ]; then
|
||||||
|
|
@ -82,6 +96,24 @@ add_peer() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
compare_ntfs() {
|
||||||
|
if [ ${#tmp_jsons[@]} -gt 0 ]; then
|
||||||
|
[ "$FLOAT" == 1 ] && suffix="-float"
|
||||||
|
expected="json/peer${1}${suffix}.json"
|
||||||
|
received="${tmp_jsons[$1]}"
|
||||||
|
|
||||||
|
kill -TERM ${listener_pids[$1]} || true
|
||||||
|
wait ${listener_pids[$1]} || true
|
||||||
|
printf "Checking notifications for peer ${1}... "
|
||||||
|
if diff <(jq -s "${JQ_FILTER}" ${expected}) \
|
||||||
|
<(jq -s "${JQ_FILTER}" ${received}); then
|
||||||
|
echo "OK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f ${received} || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
# some ovpn-cli processes sleep in background so they need manual poking
|
# some ovpn-cli processes sleep in background so they need manual poking
|
||||||
killall $(basename ${OVPN_CLI}) 2>/dev/null || true
|
killall $(basename ${OVPN_CLI}) 2>/dev/null || true
|
||||||
|
|
@ -104,5 +136,3 @@ if [ "${PROTO}" == "UDP" ]; then
|
||||||
else
|
else
|
||||||
NUM_PEERS=${NUM_PEERS:-$(wc -l ${TCP_PEERS_FILE} | awk '{print $1}')}
|
NUM_PEERS=${NUM_PEERS:-$(wc -l ${TCP_PEERS_FILE} | awk '{print $1}')}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
9
tools/testing/selftests/net/ovpn/json/peer0-float.json
Normal file
9
tools/testing/selftests/net/ovpn/json/peer0-float.json
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{"name": "peer-float-ntf", "msg": {"ifindex": 0, "peer": {"id": 1, "remote-ipv4": "10.10.1.3", "remote-port": 1}}}
|
||||||
|
{"name": "peer-float-ntf", "msg": {"ifindex": 0, "peer": {"id": 2, "remote-ipv4": "10.10.2.3", "remote-port": 1}}}
|
||||||
|
{"name": "peer-float-ntf", "msg": {"ifindex": 0, "peer": {"id": 3, "remote-ipv4": "10.10.3.3", "remote-port": 1}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 1}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 2}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 3}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 4}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 5}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 6}}}
|
||||||
6
tools/testing/selftests/net/ovpn/json/peer0.json
Normal file
6
tools/testing/selftests/net/ovpn/json/peer0.json
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 1}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 2}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 3}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 4}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 5}}}
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 6}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer1-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer1-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer1.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer1.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer1.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 1}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer2-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer2-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer2.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer2.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer2.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "userspace", "id": 2}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer3-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer3-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer3.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer3.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer3.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 3}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer4-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer4-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer4.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer4.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer4.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 4}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer5-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer5-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer5.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer5.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer5.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 5}}}
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer6-float.json
Symbolic link
1
tools/testing/selftests/net/ovpn/json/peer6-float.json
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
peer6.json
|
||||||
1
tools/testing/selftests/net/ovpn/json/peer6.json
Normal file
1
tools/testing/selftests/net/ovpn/json/peer6.json
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{"name": "peer-del-ntf", "msg": {"ifindex": 0, "peer": {"del-reason": "expired", "id": 6}}}
|
||||||
|
|
@ -3,3 +3,4 @@
|
||||||
3 5.5.5.4
|
3 5.5.5.4
|
||||||
4 5.5.5.5
|
4 5.5.5.5
|
||||||
5 5.5.5.6
|
5 5.5.5.6
|
||||||
|
6 5.5.5.7
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,10 @@ for p in $(seq 0 ${NUM_PEERS}); do
|
||||||
create_ns ${p}
|
create_ns ${p}
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for p in $(seq 0 ${NUM_PEERS}); do
|
||||||
|
setup_listener ${p}
|
||||||
|
done
|
||||||
|
|
||||||
for p in $(seq 0 ${NUM_PEERS}); do
|
for p in $(seq 0 ${NUM_PEERS}); do
|
||||||
setup_ns ${p} 5.5.5.$((${p} + 1))/24 ${MTU}
|
setup_ns ${p} 5.5.5.$((${p} + 1))/24 ${MTU}
|
||||||
done
|
done
|
||||||
|
|
@ -112,6 +116,10 @@ for p in $(seq 3 ${NUM_PEERS}); do
|
||||||
done
|
done
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
|
for p in $(seq 0 ${NUM_PEERS}); do
|
||||||
|
compare_ntfs ${p}
|
||||||
|
done
|
||||||
|
|
||||||
cleanup
|
cleanup
|
||||||
|
|
||||||
modprobe -r ovpn || true
|
modprobe -r ovpn || true
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user