Browse Source

tools: make --repeat work with -j in test.py

The repeat option in test.py did not work as expected if `-j` was set to
more than one. Repeated tests running at the same time could share temp
directories and cause test failures. This was observed with:

    tools/test.py -J --repeat=10 parallel/test-fs-watch-recursive

By using copy.deepCopy(), the repeated tests are separate objects and
not references to the same objects. Setting `thread_id` on one of them
will now not change the `thread_id` on all of them. And `thread_id` is
how the temp directory (and common.PORT as well) are determined.

Refs: https://github.com/nodejs/node/pull/9228
PR-URL: https://github.com/nodejs/node/pull/9249
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
v6.x
Rich Trott 8 years ago
committed by Myles Borins
parent
commit
2388648bea
  1. 5
      tools/test.py

5
tools/test.py

@ -42,6 +42,7 @@ import threading
import utils import utils
import multiprocessing import multiprocessing
import errno import errno
import copy
from os.path import join, dirname, abspath, basename, isdir, exists from os.path import join, dirname, abspath, basename, isdir, exists
from datetime import datetime from datetime import datetime
@ -792,7 +793,9 @@ class TestRepository(TestSuite):
tests = self.GetConfiguration(context).ListTests(current_path, path, tests = self.GetConfiguration(context).ListTests(current_path, path,
arch, mode) arch, mode)
for t in tests: t.variant_flags = v for t in tests: t.variant_flags = v
result += tests * context.repeat result += tests
for i in range(1, context.repeat):
result += copy.deepcopy(tests)
def GetTestStatus(self, context, sections, defs): def GetTestStatus(self, context, sections, defs):
self.GetConfiguration(context).GetTestStatus(sections, defs) self.GetConfiguration(context).GetTestStatus(sections, defs)

Loading…
Cancel
Save