Re: [PATCH 1/3] perf test: Shell - Limit to only run executable scripts in tests

Arnaldo Carvalho de Melo
2022-04-11T19:08:51Z

Em Sun, Apr 10, 2022 at 09:24:10AM +0800, Leo Yan escreveu:
> On Wed, Mar 09, 2022 at 12:28:57PM +0000, carsten.haitzler@foss.arm.com wrote:
> > From: Carsten Haitzler <carsten.haitzler@arm.com>
> >
> > Perf test's shell runner will just run everything in the tests
> > directory (as long as it's not another directory or does not begin
> > with a dot), but sometimes you find files in there that are not shell
> > scripts - perf.data output for example if you do some testing and then
> > the next time you run perf test it tries to run these. Check the files
> > are executable so they are actually intended to be test scripts and
> > not just some "random junk" files there.
> >
> > Signed-off-by: Carsten Haitzler <carsten.haitzler@arm.com>
>
> Reviewed-by: Leo Yan <leo.yan@linaro.org>

Thanks, applied.

- Arnaldo

> > ---
> > tools/perf/tests/builtin-test.c | 4 +++-
> > tools/perf/util/path.c | 14 +++++++++++++-
> > tools/perf/util/path.h | 1 +
> > 3 files changed, 17 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
> > index fac3717d9ba1..3c34cb766724 100644
> > --- a/tools/perf/tests/builtin-test.c
> > +++ b/tools/perf/tests/builtin-test.c
> > @@ -296,7 +296,9 @@ static const char *shell_test__description(char *description, size_t size,
> >
> > #define for_each_shell_test(entlist, nr, base, ent) \
> > for (int __i = 0; __i < nr && (ent = entlist[__i]); __i++) \
> > - if (!is_directory(base, ent) && ent->d_name[0] != '.')
> > + if (!is_directory(base, ent) && \
> > + is_executable_file(base, ent) && \
> > + ent->d_name[0] != '.')
> >
> > static const char *shell_tests__dir(char *path, size_t size)
> > {
> > diff --git a/tools/perf/util/path.c b/tools/perf/util/path.c
> > index caed0336429f..ce80b79be103 100644
> > --- a/tools/perf/util/path.c
> > +++ b/tools/perf/util/path.c
> > @@ -86,9 +86,21 @@ bool is_directory(const char *base_path, const struct dirent *dent)
> > char path[PATH_MAX];
> > struct stat st;
> >
> > - sprintf(path, "%s/%s", base_path, dent->d_name);
> > + snprintf(path, sizeof(path), "%s/%s", base_path, dent->d_name);
> > if (stat(path, &st))
> > return false;
> >
> > return S_ISDIR(st.st_mode);
> > }
> > +
> > +bool is_executable_file(const char *base_path, const struct dirent *dent)
> > +{
> > + char path[PATH_MAX];
> > + struct stat st;
> > +
> > + snprintf(path, sizeof(path), "%s/%s", base_path, dent->d_name);
> > + if (stat(path, &st))
> > + return false;
> > +
> > + return !S_ISDIR(st.st_mode) && (st.st_mode & S_IXUSR);
> > +}
> > diff --git a/tools/perf/util/path.h b/tools/perf/util/path.h
> > index 083429b7efa3..d94902c22222 100644
> > --- a/tools/perf/util/path.h
> > +++ b/tools/perf/util/path.h
> > @@ -12,5 +12,6 @@ int path__join3(char *bf, size_t size, const char *path1, const char *path2, con
> >
> > bool is_regular_file(const char *file);
> > bool is_directory(const char *base_path, const struct dirent *dent);
> > +bool is_executable_file(const char *base_path, const struct dirent *dent);
> >
> > #endif /* _PERF_PATH_H */
> > --
> > 2.32.0
> >

--

- Arnaldo