#37255 assigned Uncategorized

Tests rely on unspecified row order of SELECT without ORDER BY

Reported by: Yaroslav K Owned by: Yaroslav K
Component: Testing framework Version: dev
Severity: Normal Keywords: test
Cc: Yaroslav K Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Many (~70) tests assert a specific row order for querysets whose SQL has no
ORDER BY. SQL standard does not define that order.

On PostgreSQL the rows usually arrive in physical storage order, which
on a freshly loaded table matches insertion order -- so these assertions
pass by coincidence rather than by contract. That breaks when rows are
updated or deleted and the space is reused, or when the planner picks a
different access path such as an index scan. A test like this can start
failing with no change to Django or to the test itself.

Proposed solution:

  1. add order_by() where the asserted sequence is meaningful
  2. use assertCountEqual() otherwise

Found by running the suite under
pg_disorder.

Change History (0)

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