Re: [PATCH net-next v7 12/12] selftests: ncdevmem: Add automated test
On 11/04, Joe Damato wrote:
> On Mon, Nov 04, 2024 at 10:14:30AM -0800, Stanislav Fomichev wrote:
> > Only RX side for now and small message to test the setup.
> > In the future, we can extend it to TX side and to testing
> > both sides with a couple of megs of data.
> >
> > make \
> > -C tools/testing/selftests \
> > TARGETS="drivers/hw/net" \
> > install INSTALL_PATH=~/tmp/ksft
> >
> > scp ~/tmp/ksft ${HOST}:
> > scp ~/tmp/ksft ${PEER}:
> >
> > cfg+="NETIF=${DEV}\n"
> > cfg+="LOCAL_V6=${HOST_IP}\n"
> > cfg+="REMOTE_V6=${PEER_IP}\n"
> > cfg+="REMOTE_TYPE=ssh\n"
> > cfg+="REMOTE_ARGS=root@${PEER}\n"
> >
> > echo -e "$cfg" | ssh root@${HOST} "cat > ksft/drivers/net/net.config"
> > ssh root@${HOST} "cd ksft && ./run_kselftest.sh -t drivers/net:devmem.py"
> >
> > Reviewed-by: Mina Almasry
> > Signed-off-by: Stanislav Fomichev
> > ---
> > .../testing/selftests/drivers/net/hw/Makefile | 1 +
> > .../selftests/drivers/net/hw/devmem.py| 45 +++
> > 2 files changed, 46 insertions(+)
> > create mode 100755 tools/testing/selftests/drivers/net/hw/devmem.py
> >
> > diff --git a/tools/testing/selftests/drivers/net/hw/Makefile
> > b/tools/testing/selftests/drivers/net/hw/Makefile
> > index 182348f4bd40..1c6a77480923 100644
> > --- a/tools/testing/selftests/drivers/net/hw/Makefile
> > +++ b/tools/testing/selftests/drivers/net/hw/Makefile
> > @@ -3,6 +3,7 @@
> > TEST_PROGS = \
> > csum.py \
> > devlink_port_split.py \
> > + devmem.py \
> > ethtool.sh \
> > ethtool_extended_state.sh \
> > ethtool_mm.sh \
> > diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py
> > b/tools/testing/selftests/drivers/net/hw/devmem.py
> > new file mode 100755
> > index ..1416c31ff81e
> > --- /dev/null
> > +++ b/tools/testing/selftests/drivers/net/hw/devmem.py
> > @@ -0,0 +1,45 @@
> > +#!/usr/bin/env python3
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +from lib.py import ksft_run, ksft_exit
> > +from lib.py import ksft_eq, KsftSkipEx
> > +from lib.py import NetDrvEpEnv
> > +from lib.py import bkg, cmd, rand_port, wait_port_listen
> > +from lib.py import ksft_disruptive
> > +
> > +
> > +def require_devmem(cfg):
> > +if not hasattr(cfg, "_devmem_probed"):
> > +port = rand_port()
> > +probe_command = f"./ncdevmem -f {cfg.ifname}"
> > +cfg._devmem_supported = cmd(probe_command, fail=False,
> > shell=True).ret == 0
> > +cfg._devmem_probed = True
> > +
> > +if not cfg._devmem_supported:
> > +raise KsftSkipEx("Test requires devmem support")
> > +
> > +
> > +@ksft_disruptive
> > +def check_rx(cfg) -> None:
> > +cfg.require_v6()
> > +require_devmem(cfg)
> > +
> > +port = rand_port()
> > +listen_cmd = f"./ncdevmem -l -f {cfg.ifname} -s {cfg.v6} -p {port}"
> > +
> > +with bkg(listen_cmd) as nc:
> > +wait_port_listen(port)
> > +cmd(f"echo -e \"hello\\nworld\"| nc {cfg.v6} {port}",
> > host=cfg.remote, shell=True)
>
> FWIW, in the v3 of the series I submit, Jakub asked me to replace nc
> with socat due to issues with nc [1].
>
> Your usage of nc seems pretty basic though, so maybe it's fine?
>
> [1]: https://lore.kernel.org/netdev/[email protected]/
Since I'm doing a respin anyway will try to move to socat as well to keep it
uniform, thanks!
Re: [PATCH net-next v7 12/12] selftests: ncdevmem: Add automated test
On Mon, 4 Nov 2024 16:15:10 -0800 Joe Damato wrote:
> > +with bkg(listen_cmd) as nc:
> > +wait_port_listen(port)
> > +cmd(f"echo -e \"hello\\nworld\"| nc {cfg.v6} {port}",
> > host=cfg.remote, shell=True)
>
> FWIW, in the v3 of the series I submit, Jakub asked me to replace nc
> with socat due to issues with nc [1].
>
> Your usage of nc seems pretty basic though, so maybe it's fine?
Good catch, let's not use nc. I seem to recall it's also funny about
address family selection. Also may be useful to add a helper for sending
simple strings from remote to avoid having this problem again.
Re: [PATCH net-next v7 12/12] selftests: ncdevmem: Add automated test
On Mon, Nov 04, 2024 at 10:14:30AM -0800, Stanislav Fomichev wrote:
> Only RX side for now and small message to test the setup.
> In the future, we can extend it to TX side and to testing
> both sides with a couple of megs of data.
>
> make \
> -C tools/testing/selftests \
> TARGETS="drivers/hw/net" \
> install INSTALL_PATH=~/tmp/ksft
>
> scp ~/tmp/ksft ${HOST}:
> scp ~/tmp/ksft ${PEER}:
>
> cfg+="NETIF=${DEV}\n"
> cfg+="LOCAL_V6=${HOST_IP}\n"
> cfg+="REMOTE_V6=${PEER_IP}\n"
> cfg+="REMOTE_TYPE=ssh\n"
> cfg+="REMOTE_ARGS=root@${PEER}\n"
>
> echo -e "$cfg" | ssh root@${HOST} "cat > ksft/drivers/net/net.config"
> ssh root@${HOST} "cd ksft && ./run_kselftest.sh -t drivers/net:devmem.py"
>
> Reviewed-by: Mina Almasry
> Signed-off-by: Stanislav Fomichev
> ---
> .../testing/selftests/drivers/net/hw/Makefile | 1 +
> .../selftests/drivers/net/hw/devmem.py| 45 +++
> 2 files changed, 46 insertions(+)
> create mode 100755 tools/testing/selftests/drivers/net/hw/devmem.py
>
> diff --git a/tools/testing/selftests/drivers/net/hw/Makefile
> b/tools/testing/selftests/drivers/net/hw/Makefile
> index 182348f4bd40..1c6a77480923 100644
> --- a/tools/testing/selftests/drivers/net/hw/Makefile
> +++ b/tools/testing/selftests/drivers/net/hw/Makefile
> @@ -3,6 +3,7 @@
> TEST_PROGS = \
> csum.py \
> devlink_port_split.py \
> + devmem.py \
> ethtool.sh \
> ethtool_extended_state.sh \
> ethtool_mm.sh \
> diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py
> b/tools/testing/selftests/drivers/net/hw/devmem.py
> new file mode 100755
> index ..1416c31ff81e
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/net/hw/devmem.py
> @@ -0,0 +1,45 @@
> +#!/usr/bin/env python3
> +# SPDX-License-Identifier: GPL-2.0
> +
> +from lib.py import ksft_run, ksft_exit
> +from lib.py import ksft_eq, KsftSkipEx
> +from lib.py import NetDrvEpEnv
> +from lib.py import bkg, cmd, rand_port, wait_port_listen
> +from lib.py import ksft_disruptive
> +
> +
> +def require_devmem(cfg):
> +if not hasattr(cfg, "_devmem_probed"):
> +port = rand_port()
> +probe_command = f"./ncdevmem -f {cfg.ifname}"
> +cfg._devmem_supported = cmd(probe_command, fail=False,
> shell=True).ret == 0
> +cfg._devmem_probed = True
> +
> +if not cfg._devmem_supported:
> +raise KsftSkipEx("Test requires devmem support")
> +
> +
> +@ksft_disruptive
> +def check_rx(cfg) -> None:
> +cfg.require_v6()
> +require_devmem(cfg)
> +
> +port = rand_port()
> +listen_cmd = f"./ncdevmem -l -f {cfg.ifname} -s {cfg.v6} -p {port}"
> +
> +with bkg(listen_cmd) as nc:
> +wait_port_listen(port)
> +cmd(f"echo -e \"hello\\nworld\"| nc {cfg.v6} {port}",
> host=cfg.remote, shell=True)
FWIW, in the v3 of the series I submit, Jakub asked me to replace nc
with socat due to issues with nc [1].
Your usage of nc seems pretty basic though, so maybe it's fine?
[1]: https://lore.kernel.org/netdev/[email protected]/
[PATCH net-next v7 12/12] selftests: ncdevmem: Add automated test
Only RX side for now and small message to test the setup.
In the future, we can extend it to TX side and to testing
both sides with a couple of megs of data.
make \
-C tools/testing/selftests \
TARGETS="drivers/hw/net" \
install INSTALL_PATH=~/tmp/ksft
scp ~/tmp/ksft ${HOST}:
scp ~/tmp/ksft ${PEER}:
cfg+="NETIF=${DEV}\n"
cfg+="LOCAL_V6=${HOST_IP}\n"
cfg+="REMOTE_V6=${PEER_IP}\n"
cfg+="REMOTE_TYPE=ssh\n"
cfg+="REMOTE_ARGS=root@${PEER}\n"
echo -e "$cfg" | ssh root@${HOST} "cat > ksft/drivers/net/net.config"
ssh root@${HOST} "cd ksft && ./run_kselftest.sh -t drivers/net:devmem.py"
Reviewed-by: Mina Almasry
Signed-off-by: Stanislav Fomichev
---
.../testing/selftests/drivers/net/hw/Makefile | 1 +
.../selftests/drivers/net/hw/devmem.py| 45 +++
2 files changed, 46 insertions(+)
create mode 100755 tools/testing/selftests/drivers/net/hw/devmem.py
diff --git a/tools/testing/selftests/drivers/net/hw/Makefile
b/tools/testing/selftests/drivers/net/hw/Makefile
index 182348f4bd40..1c6a77480923 100644
--- a/tools/testing/selftests/drivers/net/hw/Makefile
+++ b/tools/testing/selftests/drivers/net/hw/Makefile
@@ -3,6 +3,7 @@
TEST_PROGS = \
csum.py \
devlink_port_split.py \
+ devmem.py \
ethtool.sh \
ethtool_extended_state.sh \
ethtool_mm.sh \
diff --git a/tools/testing/selftests/drivers/net/hw/devmem.py
b/tools/testing/selftests/drivers/net/hw/devmem.py
new file mode 100755
index ..1416c31ff81e
--- /dev/null
+++ b/tools/testing/selftests/drivers/net/hw/devmem.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+
+from lib.py import ksft_run, ksft_exit
+from lib.py import ksft_eq, KsftSkipEx
+from lib.py import NetDrvEpEnv
+from lib.py import bkg, cmd, rand_port, wait_port_listen
+from lib.py import ksft_disruptive
+
+
+def require_devmem(cfg):
+if not hasattr(cfg, "_devmem_probed"):
+port = rand_port()
+probe_command = f"./ncdevmem -f {cfg.ifname}"
+cfg._devmem_supported = cmd(probe_command, fail=False, shell=True).ret
== 0
+cfg._devmem_probed = True
+
+if not cfg._devmem_supported:
+raise KsftSkipEx("Test requires devmem support")
+
+
+@ksft_disruptive
+def check_rx(cfg) -> None:
+cfg.require_v6()
+require_devmem(cfg)
+
+port = rand_port()
+listen_cmd = f"./ncdevmem -l -f {cfg.ifname} -s {cfg.v6} -p {port}"
+
+with bkg(listen_cmd) as nc:
+wait_port_listen(port)
+cmd(f"echo -e \"hello\\nworld\"| nc {cfg.v6} {port}", host=cfg.remote,
shell=True)
+
+ksft_eq(nc.stdout.strip(), "hello\nworld")
+
+
+def main() -> None:
+with NetDrvEpEnv(__file__) as cfg:
+ksft_run([check_rx],
+ args=(cfg, ))
+ksft_exit()
+
+
+if __name__ == "__main__":
+main()
--
2.47.0

