Opened 2 years ago

Last modified 8 months ago

#23251 assigned Bug

Use a temporary folder to store uploaded files during tests

Reported by: shai Owned by: sasha0
Component: Testing framework Version: master
Severity: Normal Keywords: file storage upload
Cc: mjtamlyn Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Today, when running tests, Django uses the production storage for uploaded files -- meaning any tests which upload files will save copies of them, under different names, for every test run.

We need to treat this essentially like we treat mail -- during tests, a special file-storage should be set up to receive the uploads. Like with mail, it is probably better for this folder to be kept after the test run ends, and be cleared only when the tests are run again; but this is of lower priority.

This should be the default, or enabled easily in settings.

As @apollo13 noted, Django's own tests define an environment variable:

TEMP_DIR = tempfile.mkdtemp(prefix='django_')
os.environ['DJANGO_TEST_TEMP_DIR'] = TEMP_DIR

and all storages used in the suite use it or a subfolder. This alone, however, is not enough for user tests, as there is currently no way to define separate storages for test and production.

Change History (11)

comment:1 Changed 2 years ago by timgraham

  • Triage Stage changed from Unreviewed to Accepted

comment:2 Changed 2 years ago by pavel_shpilev

  • Owner changed from nobody to pavel_shpilev
  • Status changed from new to assigned

comment:3 Changed 21 months ago by berkerpeksag

  • Needs documentation unset
  • Needs tests unset

Pavel, do you working on this? If not, I can take a look at this.

comment:4 Changed 21 months ago by pavel_shpilev

  • Owner pavel_shpilev deleted
  • Status changed from assigned to new

Oops, sorry. I was sure I deassigned myself.
Please, feel free to take it over.

comment:5 Changed 10 months ago by carljm

FWIW, there's also django-inmemorystorage, which is even simpler/faster. But it wouldn't allow leaving the files around after a failed test run for inspection.

comment:6 follow-up: Changed 10 months ago by mjtamlyn

  • Cc mjtamlyn added

As discussed on the mailing list this links nicely to the idea of a STORAGES setting, and a new temp storage backend for testing purposes like some of our other dummy back ends.

I think it also relates to ideas in #24721 about test extensions, so that the temo storage could (optionally?) be cleared in teardown/teardowntestdata or similar.

Last edited 8 months ago by timgraham (previous) (diff)

comment:7 Changed 8 months ago by sasha0

  • Owner set to sasha0
  • Status changed from new to assigned

comment:8 in reply to: ↑ 6 Changed 8 months ago by sasha0

Replying to mjtamlyn:

As discussed on the mailing list[1] this links nicely to the idea of a STORAGES setting, and a new temp storage backend for testing purposes like some of our other dummy back ends.

Link is pointing to changeset, not mailing list. Could you please update it? Thanks.

comment:9 follow-up: Changed 8 months ago by timgraham

I edited comment 6 to add the link.

comment:10 in reply to: ↑ 9 Changed 8 months ago by sasha0

Replying to timgraham:

I edited comment 6 to add the link.

Thanks, I've reviewed.

So basically the idea is to introduce STORAGES setting, move there DEFAULT_FILE_STORAGE and STATICFILES_STORAGE settings and finally introduce separate storage backend for testing?

comment:11 Changed 8 months ago by aaugustin

I created #26029 to track the concept of multiple file storage backends, which may indeed make this easier to implement.

Note: See TracTickets for help on using tickets.
Back to Top