Attention is currently required from: flichtenheld, its_Giaan, plaisthos.

Hello its_Giaan, plaisthos,

I'd like you to reexamine a change. Please visit

    http://gerrit.openvpn.net/c/openvpn/+/1586?usp=email

to look at the new patch set (#2).

The following approvals got outdated and were removed:
Code-Review+2 by its_Giaan


Change subject: test_networking: Allow to test --netns
......................................................................

test_networking: Allow to test --netns

While here also do some cleanups:
- Run under set -eu to better catch errors
- Some comment improvments
- Fix argument handling in test_networking, it
  actually ignored the interface argument

Change-Id: Ibaf84cba0124320f7c49e28d1b3364dac9e8b6d9
Signed-off-by: Frank Lichtenheld <[email protected]>
---
M tests/t_net.sh
M tests/unit_tests/openvpn/test_networking.c
2 files changed, 58 insertions(+), 34 deletions(-)


  git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/86/1586/2

diff --git a/tests/t_net.sh b/tests/t_net.sh
index 8134832..e388971 100755
--- a/tests/t_net.sh
+++ b/tests/t_net.sh
@@ -1,8 +1,14 @@
 #!/usr/bin/env bash
+# Requires bash due to array handling

-IFACE="ovpn-dummy0"
+set -eu
+
+IFACE="${IFACE:-ovpn-dummy0}"
+NETNS=${NETNS:-}
 UNIT_TEST="./unit_tests/openvpn/networking_testdriver"
+# Tests 0 to LAST_AUTO_TEST output a ip command to compare results
 LAST_AUTO_TEST=7
+# Tests after LAST_AUTO_TEST are only executed, no comparison
 LAST_TEST=8

 srcdir="${srcdir:-.}"
@@ -12,33 +18,19 @@

 # bail out right away on non-linux. NetLink (the object of this test) is only
 # used on Linux, therefore testing other platform is not needed.
-#
-# Note: statements in the rest of the script may not even pass syntax check on
-# solaris/bsd. It uses /bin/bash
 if [ "$(uname -s)" != "Linux" ]; then
     echo "$0: this test runs only on Linux. SKIPPING TEST."
     exit 77
 fi

-# Commands used to retrieve the network state.
-# State is retrieved after running sitnl and after running
-# iproute commands. The two are then compared and expected to be equal.
-typeset -a GET_STATE
-GET_STATE[0]="ip link show dev $IFACE | sed 's/^[0-9]\+: //'"
-GET_STATE[1]="ip addr show dev $IFACE | sed 's/^[0-9]\+: //'"
-GET_STATE[2]="ip route show dev $IFACE"
-GET_STATE[3]="ip -6 route show dev $IFACE"
-
-LAST_STATE=$((${#GET_STATE[@]} - 1))
-
 reload_dummy()
 {
-    $RUN_SUDO ip link del $IFACE
-    $RUN_SUDO ip link add $IFACE address 00:11:22:33:44:55 type dummy
-    $RUN_SUDO ip link set dev $IFACE state up
+    $RUN_SUDO $IP_EXEC ip link del $IFACE || true
+    $RUN_SUDO $IP_EXEC ip link add $IFACE address 00:11:22:33:44:55 type dummy
+    $RUN_SUDO $IP_EXEC ip link set dev $IFACE state up

     if [ $? -ne 0 ]; then
-        echo "can't create interface $IFACE"
+        echo "can't create interface $IFACE $IP_NETNS"
         exit 1
     fi
 }
@@ -51,7 +43,7 @@
         # the unit-test prints to stdout the iproute command corresponding
         # to the sitnl operation being executed.
         # Format is "CMD: <commandhere>"
-        OUT=$($RUN_SUDO $UNIT_TEST $k $IFACE)
+        OUT=$($RUN_SUDO $UNIT_TEST $k $IFACE $NETNS)
         # ensure unit test worked properly
         if [ $? -ne 0 ]; then
             echo "unit-test $k errored out:"
@@ -60,7 +52,7 @@
         fi

         NEW=$(echo "$OUT" | sed -n 's/CMD: //p')
-        CMD="$CMD $RUN_SUDO $NEW ;"
+        CMD="$CMD $IP_EXEC $NEW ;"
     done

     # collect state for later comparison
@@ -72,13 +64,18 @@

 ## execution starts here

+set +eu
+
 # t_client.rc required only for RUN_SUDO definition
+RUN_SUDO=
 if [ -r "${top_builddir}"/t_client.rc ]; then
     . "${top_builddir}"/t_client.rc
 elif [ -r "${srcdir}"/t_client.rc ]; then
     . "${srcdir}"/t_client.rc
 fi

+set -eu
+
 if [ ! -x "$openvpn" ]; then
     echo "no (executable) openvpn binary in current build tree. FAIL." >&2
     exit 1
@@ -129,6 +126,24 @@
     fi
 fi

+IP_EXEC="$RUN_SUDO"
+if [ -n "$NETNS" ]; then
+    echo "Using netns $NETNS"
+    [ -f "/run/netns/$NETNS" ] || $RUN_SUDO ip netns add "$NETNS"
+    IP_EXEC="$RUN_SUDO ip netns exec $NETNS"
+fi
+
+# Commands used to retrieve the network state.
+# State is retrieved after running sitnl and after running
+# iproute commands. The two are then compared and expected to be equal.
+typeset -a GET_STATE
+GET_STATE[0]="$IP_EXEC ip link show dev $IFACE | sed 's/^[0-9]\+: //'"
+GET_STATE[1]="$IP_EXEC ip addr show dev $IFACE | sed 's/^[0-9]\+: //'"
+GET_STATE[2]="$IP_EXEC ip route show dev $IFACE"
+GET_STATE[3]="$IP_EXEC ip -6 route show dev $IFACE"
+
+LAST_STATE=$((${#GET_STATE[@]} - 1))
+
 for i in $(seq 0 $LAST_AUTO_TEST); do
     # reload dummy module to cleanup state
     reload_dummy
@@ -167,7 +182,7 @@
 done

 # remove interface for good
-$RUN_SUDO ip link del $IFACE
+$IP_EXEC ip link del $IFACE

 for i in $(seq $(($LAST_AUTO_TEST + 1)) ${LAST_TEST}); do
     $RUN_SUDO $UNIT_TEST $i
diff --git a/tests/unit_tests/openvpn/test_networking.c 
b/tests/unit_tests/openvpn/test_networking.c
index 1c9cac1..4e2cce8 100644
--- a/tests/unit_tests/openvpn/test_networking.c
+++ b/tests/unit_tests/openvpn/test_networking.c
@@ -6,26 +6,27 @@
 #include <cmocka.h>

 static char *iface = "ovpn-dummy0";
+static openvpn_net_ctx_t *ctx = NULL;

 static int
 net__iface_up(bool up)
 {
     printf("CMD: ip link set %s %s\n", iface, up ? "up" : "down");

-    return net_iface_up(NULL, iface, up);
+    return net_iface_up(ctx, iface, up);
 }

 static int
 net__iface_new(const char *name, const char *type)
 {
-    return net_iface_new(NULL, name, type, NULL);
+    return net_iface_new(ctx, name, type, NULL);
 }

 static int
 net__iface_type(const char *name, const char *type)
 {
     char ret_type[IFACE_TYPE_LEN_MAX];
-    int ret = net_iface_type(NULL, name, ret_type);
+    int ret = net_iface_type(ctx, name, ret_type);
     if (ret == 0)
     {
         assert_string_equal(type, ret_type);
@@ -37,7 +38,7 @@
 static int
 net__iface_del(const char *name)
 {
-    return net_iface_del(NULL, name);
+    return net_iface_del(ctx, name);
 }

 static int
@@ -45,7 +46,7 @@
 {
     printf("CMD: ip link set %s mtu %d\n", iface, mtu);

-    return net_iface_mtu_set(NULL, iface, mtu);
+    return net_iface_mtu_set(ctx, iface, mtu);
 }

 static int
@@ -64,7 +65,7 @@

     printf("CMD: ip addr add %s/%d dev %s broadcast +\n", addr_str, prefixlen, 
iface);

-    return net_addr_v4_add(NULL, iface, &addr, prefixlen);
+    return net_addr_v4_add(ctx, iface, &addr, prefixlen);
 }

 static int
@@ -81,7 +82,7 @@

     printf("CMD: ip -6 addr add %s/%d dev %s\n", addr_str, prefixlen, iface);

-    return net_addr_v6_add(NULL, iface, &addr, prefixlen);
+    return net_addr_v6_add(ctx, iface, &addr, prefixlen);
 }

 static int
@@ -110,7 +111,7 @@
     }
     printf("\n");

-    return net_route_v4_add(NULL, &dst, prefixlen, NULL, iface, 0, metric);
+    return net_route_v4_add(ctx, &dst, prefixlen, NULL, iface, 0, metric);
 }

 static int
@@ -146,7 +147,7 @@
     }
     printf("\n");

-    return net_route_v4_add(NULL, &dst, prefixlen, &gw, iface, 0, metric);
+    return net_route_v4_add(ctx, &dst, prefixlen, &gw, iface, 0, metric);
 }

 static int
@@ -173,7 +174,7 @@
     }
     printf("\n");

-    return net_route_v6_add(NULL, &dst, prefixlen, NULL, iface, 0, metric);
+    return net_route_v6_add(ctx, &dst, prefixlen, NULL, iface, 0, metric);
 }

 static int
@@ -206,7 +207,7 @@
     }
     printf("\n");
 
-    return net_route_v6_add(NULL, &dst, prefixlen, &gw, iface, 0, metric);
+    return net_route_v6_add(ctx, &dst, prefixlen, &gw, iface, 0, metric);
 }

 static void
@@ -232,11 +233,19 @@
         return 0;
     }

-    if (argc > 3)
+    if (argc >= 3)
     {
         iface = argv[2];
     }

+    if (argc >= 4)
+    {
+        ctx = malloc(sizeof(*ctx));
+        CLEAR(*ctx);
+        ctx->netns = argv[3];
+        ctx->gc = gc_new();
+    }
+
     test = atoi(argv[1]);
     switch (test)
     {

--
To view, visit http://gerrit.openvpn.net/c/openvpn/+/1586?usp=email
To unsubscribe, or for help writing mail filters, visit 
http://gerrit.openvpn.net/settings?usp=email

Gerrit-MessageType: newpatchset
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: Ibaf84cba0124320f7c49e28d1b3364dac9e8b6d9
Gerrit-Change-Number: 1586
Gerrit-PatchSet: 2
Gerrit-Owner: flichtenheld <[email protected]>
Gerrit-Reviewer: its_Giaan <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
Gerrit-Attention: its_Giaan <[email protected]>
Gerrit-Attention: flichtenheld <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to