Message ID | 20210204173045.1138504-4-dlatypov@google.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Brendan Higgins |
Headers | show |
Series | kunit: support running subsets of test suites from kunit.py | expand |
On Thu, Feb 4, 2021 at 9:31 AM Daniel Latypov <dlatypov@google.com> wrote: > > This is a bug that has been present since the first version of this > code. > Using [] as a default parameter is dangerous, since it's mutable. > > Example using the REPL: > >>> def bad(param = []): > ... param.append(len(param)) > ... print(param) > ... > >>> bad() > [0] > >>> bad() > [0, 1] > > This wasn't a concern in the past since it would just keep appending the > same values to it. > > E.g. before, `args` would just grow in size like: > [mem=1G', 'console=tty'] > [mem=1G', 'console=tty', mem=1G', 'console=tty'] > > But with now filter_glob, this is more dangerous, e.g. > run_kernel(filter_glob='my-test*') # default modified here > run_kernel() # filter_glob still applies here! > That earlier `filter_glob` will affect all subsequent calls that don't > specify `args`. > > Note: currently the kunit tool only calls run_kernel() at most once, so > it's not possible to trigger any negative side-effects right now. > > Fixes: 6ebf5866f2e8 ("kunit: tool: add Python wrappers for running KUnit tests") > Signed-off-by: Daniel Latypov <dlatypov@google.com> Whoah, nice catch! I didn't even know that was a thing! Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py index 71b1942f5ccd..6dd3cf6e8efa 100644 --- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -199,7 +199,9 @@ class LinuxSourceTree(object): return False return self.validate_config(build_dir) - def run_kernel(self, args=[], build_dir='', filter_glob='', timeout=None) -> Iterator[str]: + def run_kernel(self, args=None, build_dir='', filter_glob='', timeout=None) -> Iterator[str]: + if not args: + args = [] args.extend(['mem=1G', 'console=tty']) if filter_glob: args.append('kunit.filter_glob='+filter_glob)