#26677 closed Cleanup/optimization (fixed)
Run i18n tests on disposable FS tree instead of source code
Reported by: | Ramiro Morales | Owned by: | Ramiro Morales |
---|---|---|---|
Component: | Internationalization | Version: | dev |
Severity: | Normal | Keywords: | tests isolation i18n serializemixin unit unittest |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Currently, tests that exercise translatable literal extraction to .po
files by makemessages (located on test_extraction.py
) and test that exercise compilation of .po
files to .mo
files by compilemessages (test_compilation.py
) are run under the test/i18n
test source code tree creating subdirectories and files under the different work projects/applications located there.
Proposal is to copy the relevant filesystem tree to a tempdir as provided by runtests.py
+ tempfile.mkdtemp()
as part of every test case setup.
This has the following advantages:
- Avoid weird bogus errors and failures caused by stray directories left by previous runs/debugging sessions.
- Allows us to solve the fact that currently tests on
test_compilation.py
aren't marked as needing seralized execution and are actually being run in parallel. This, for instance, causes a couple of consecutive runs of the i18n test on my Ubuntu 1.4.04 system to report misleading failures, most probably because of race conditions. - Ensure actual isolation among test cases
- Allow each of these test cases to be actually run in in parallel by our existing machinery. This allows us to be able to stop relying on
django.test.testcases.SerializeMixin
These changes possibly aren't visible on our CI infrastructure as every job there always use a clean tree but can be of help to those running the test suite and/or working on i18n tests.
Other tests (tests.py
, test_percents.py
) don't have write access to disk so they are unaffected.
Change History (14)
comment:1 by , 8 years ago
comment:2 by , 8 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 8 years ago
Summary: | Run i18n tests on disposablle FS tree instead of source code → Run i18n tests on disposable FS tree instead of source code |
---|
comment:4 by , 8 years ago
Component: | Testing framework → Internationalization |
---|---|
Has patch: | set |
Triage Stage: | Unreviewed → Accepted |
comment:5 by , 8 years ago
Description: | modified (diff) |
---|
follow-up: 8 comment:7 by , 8 years ago
I did that in a bunch of other places when I implemented test parallelization. To test it, I just made the entire source tree readonly, ran the tests and saw what broke.
I gave up for i18n tests because it required too extensive changes. It's great to see that you're picking up the flag! Indeed, once you've managed to isolate each test in its own temporary directory, you can remove SerializeMixin
, and the tests will be faster.
While you're there you could check how much I/O these tests perform. I/O may be a bottleneck even with a SSD e.g. if each test copies 50 files where 5 would suffice. IIRC the total runtime of the i18n tests was about 4 seconds with a SSD, so there isn't a huge lot to gain and I didn't spend much time optimizing it. Over a few thousands runs, improvements would compound, though.
comment:8 by , 8 years ago
Patch needs improvement: | unset |
---|
Replying to aaugustin:
Indeed, once you've managed to isolate each test in its own temporary directory, you can remove
SerializeMixin
, and the tests will be faster.
Exactly, that's one of the included changes.
While you're there you could check how much I/O these tests perform. I/O may be a bottleneck even with a SSD e.g. if each test copies 50 files where 5 would suffice. IIRC the total runtime of the i18n tests was about 4 seconds with a SSD, so there isn't a huge lot to gain and I didn't spend much time optimizing it. Over a few thousands runs, improvements would compound, though.
Will do some testing. No SDD here but will see what conclussion can be made.
Thanks!
comment:9 by , 8 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
PR