Re: [LTP] [PATCH] testcases:Fix the failure of shell script to get path

Hao Zeng
2023-05-06T09:32:03Z

On Fri, 2023-05-05 at 19:41 +0200, Petr Vorel wrote:

hi Petr
Thanks very much for your reply.
I will follow your suggestion and submit the V2 version

Best regards
Hao
>
>
> > From 9f372d2d4c9a9df9cda1a7afceddaa2acca27f03 Mon Sep 17 00:00:00
> > 2001
> > From: Hao Zeng <zenghao@kylinos.cn>
> > Date: Fri, 31 Mar 2023 17:04:07 +0800
> > Subject: [LTP] [PATCH] testcases:Fix the failure of shell script to
> > get path
>
> > For example, in the file
> > testcases/kernel/controllers/cpuset/cpuset_funcs.sh, if the path is
> > obtained by
> > find "$CPUSET" -type d | sort | sed -n '2,$p' | tac | while read
> > subdir, the escaped characters will be lost,
> > and by adding the -r option, the escaped characters will be kept as
> > they are without escaping
> > The errors are as follows:
> > /opt/ltp/testcases/bin/cpuset_funcs.sh:line178:
> > /dev/cpuset/machine.slice/machine-
> > qemux2d157x2dzhx2dsxf.scope/vcpu7/tasks: The file or directory is
> > not available
> > rmdir: delete '/dev/cpuset/machine.slice/machine-
> > qemux2d157x2dzhx2dsxf.scope/vcpu7' Failure: The file or directory
> > is not available
> > cpuset_memory_pressure 1 TFAIL: Couldn't remove subdir -
> > /opt/ltp/testcases/bin/cpuset_funcs.sh:line178:
> > /dev/cpuset/machine.slice/machine-
> > qemux2d157x2dzhx2dsxf.scope/vcpu7/tasks: The file or directory is
> > not available
> > rmdir: delete '/dev/cpuset/machine.slice/machine-
> > qemux2d157x2dzhx2dsxf.scope/vcpu7' Failure: The file or directory
> > is not available
> > cpuset_memory_pressure 1 TFAIL: Couldn't remove subdir -
>
> > Signed-off-by: Hao Zeng <zenghao@kylinos.cn>
> > ---
> >  testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh | 2
> > +-
> >  testcases/kernel/controllers/cpuset/cpuset_funcs.sh          | 2
> > +-
> >  testcases/open_posix_testsuite/scripts/generate-makefiles.sh | 2
> > +-
> >  3 files changed, 3 insertions(+), 3 deletions(-)
>
> > diff --git
> > a/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh
> > b/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh
> > index ab73c801b..5cb6bb566 100755
> > --- a/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh
> > +++ b/testcases/kernel/controllers/cpuctl_fj/run_cpuctl_test_fj.sh
> > @@ -63,7 +63,7 @@ cleanup()
> >                 return 0
> >         }
>
> > -       find $CPUCTL -type d | sort | sed -n '2,$p' | tac | while
> > read tmpdir
> > +       find $CPUCTL -type d | sort | sed -n '2,$p' | tac | while
> > read -r tmpdir
> >         do
> >                 while read tmppid
> >                 do
> > diff --git a/testcases/kernel/controllers/cpuset/cpuset_funcs.sh
> > b/testcases/kernel/controllers/cpuset/cpuset_funcs.sh
> > index 87ba7da1f..0cfa0c17e 100755
> > --- a/testcases/kernel/controllers/cpuset/cpuset_funcs.sh
> > +++ b/testcases/kernel/controllers/cpuset/cpuset_funcs.sh
> > @@ -184,7 +184,7 @@ cleanup()
> >         echo $CHILDREN_VALUE > $CLONE_CHILDREN
> >         echo $SCHED_LB_VALUE > $SCHED_LB
>
> > -       find "$CPUSET" -type d | sort | sed -n '2,$p' | tac | while
> > read subdir
> > +       find "$CPUSET" -type d | sort | sed -n '2,$p' | tac | while
> > read -r subdir
> >         do
> >                 while read pid
> >                 do
> > diff --git a/testcases/open_posix_testsuite/scripts/generate-
> > makefiles.sh b/testcases/open_posix_testsuite/scripts/generate-
> > makefiles.sh
> > index 0649c480f..f3af3cede 100755
> > --- a/testcases/open_posix_testsuite/scripts/generate-makefiles.sh
> > +++ b/testcases/open_posix_testsuite/scripts/generate-makefiles.sh
> > @@ -312,7 +312,7 @@ generate_locate_test_makefile buildonly '.test'
> > "$buildonly_compiler_args"
> >  generate_locate_test_makefile runnable '.run-test'
> >  generate_locate_test_makefile test-tools ''
>
> > -find . -name Makefile.1 -exec dirname {} \; | while read dir; do
> > +find . -name Makefile.1 -exec dirname {} \; | while read -r dir;
> > do
> >         if [ -f "$dir/Makefile.2" ]; then
> >                 cat $dir/Makefile.1 $dir/Makefile.2 $dir/Makefile.3
> > > $dir/Makefile
> >         fi
>
> I'd remove change in testcases/open_posix_testsuite/scripts/generate-
> makefiles.sh
> IMHO problematic are only controllers shell scripts. Only cpuset are
> relevant
> to be escaped. Also, we could use systemd-escape:
>
> systemd-escape -u 'machine-qemu\x2d3\x2dzh\x2dnode1.scope' ->
> machine/qemu-3-zh-node1.scope
>
> but there are SUT without systemd, thus let's keep "read -r".
>
> (We already talked about it, but you weren't subscribed, thus
> messages got
> lost, see the details below.)
>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
>
>
> Kind regards,
> Petr
>
> > Dear Petr
> > Thank you for taking the time to reply to my email. I appreciate
> > your prompt
> > response and the valuable information you have provided.
>
> > 在 2023/4/4 21:36, Petr Vorel 写道:
> > > > For example, in the file
> > > > testcases/kernel/controllers/cpuset/cpuset_funcs.sh, if the
> > > > path is obtained by
> > > > find "$CPUSET" -type d | sort | sed -n '2,$p' | tac | while
> > > > read subdir, the escaped characters will be lost,
> > > > and by adding the -r option, the escaped characters will be
> > > > kept as they are without escaping
> > > > The errors are as follows:
> > > > /opt/ltp/testcases/bin/cpuset_funcs.sh:line178:
> > > > /dev/cpuset/machine.slice/machine-
> > > > qemux2d157x2dzhx2dsxf.scope/vcpu7/tasks: The file or directory
> > > > is not available
> > > Could you print the path how it looks like with ls:
>
> > > ls -l /dev/cpuset/machine.slice/
> > ls -l /dev/cpuset/machine.slice/
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cgroup.clone_children
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cgroup.procs
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.cpu_exclusive
> > -rw-r--r-- 1 root root 0  Apr  4 17:41  cpuset.cpus
> > -r--r--r-- 1 root root 0  Apr  5 13:44  cpuset.effective_cpus
> > -r--r--r-- 1 root root 0  Apr  5 13:44  cpuset.effective_mems
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.mem_exclusive
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.mem_hardwall
> > -rw-r--r-- 1 root root 0  Apr  4 17:41  cpuset.memory_migrate
> > -r--r--r-- 1 root root 0  Apr  5 13:44  cpuset.memory_pressure
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.memory_spread_page
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.memory_spread_slab
> > -rw-r--r-- 1 root root 0  Apr  4 17:41  cpuset.mems
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  cpuset.sched_load_balance
> > -rw-r--r-- 1 root root 0  Apr  5 13:44
> > cpuset.sched_relax_domain_level
> > drwxr-xr-x 6 root root 0  Apr  5 13:44
> > 'machine-qemu\x2d3\x2dzh\x2dnode1.scope'
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  notify_on_release
> > -rw-r--r-- 1 root root 0  Apr  5 13:44  tasks
>
> > > FYI cgroup tests written in shell are broken by design, we write
> > > new tests in C.
> > > Not sure if these old tests are relevant enough to be rewritten
> > > into C.
>
> > > ...
> > get it
> > > > +++ b/testcases/open_posix_testsuite/scripts/generate-
> > > > makefiles.sh
> > > > @@ -312,7 +312,7 @@ generate_locate_test_makefile buildonly
> > > > '.test' "$buildonly_compiler_args"
> > > >   generate_locate_test_makefile runnable '.run-test'
> > > >   generate_locate_test_makefile test-tools ''
> > > > -find . -name Makefile.1 -exec dirname {} \; | while read dir;
> > > > do
> > > > +find . -name Makefile.1 -exec dirname {} \; | while read -r
> > > > dir; do
> > > I don't think it's needed for open posix.
> > I agree with your viewpoint.
>
> > > Kind regards,
> > > Petr
> > Best regards
> > Hao