Opened 11 years ago
Last modified 8 months ago
#21143 new Bug
runtests might execute queries against the normal database instead of the testdatabase
Reported by: | Florian Apolloner | Owned by: | nobody |
---|---|---|---|
Component: | Testing framework | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Ülgen Sarıkavak | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The way our testrunner currently works is that it constructs the test classes before creating the test database and resetting the database names. This causes module level queries (which you shouldn't have, but…) to be executed against the main database resulting in errors like:
Traceback (most recent call last): File "/usr/lib/python3.3/unittest/case.py", line 384, in _executeTestPart function() File "/usr/lib/python3.3/unittest/loader.py", line 32, in testFailure raise exception ImportError: Failed to import test module: transactions_regress.tests Traceback (most recent call last): File "/var/lib/jenkins/jobs/Django/workspace/database/mysql_gis/python/python3.3/django/db/utils.py", line 101, in inner return func(*args, **kwargs) File "/var/lib/jenkins/jobs/Django/workspace/database/mysql_gis/python/python3.3/django/db/backends/mysql/base.py", line 131, in execute return self.cursor.execute(query, args) File "/usr/local/lib/python3.3/dist-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg/MySQLdb/cursors.py", line 185, in execute self.errorhandler(self, exc, value) File "/usr/local/lib/python3.3/dist-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg/MySQLdb/connections.py", line 37, in defaulterrorhandler raise errorvalue File "/usr/local/lib/python3.3/dist-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg/MySQLdb/cursors.py", line 172, in execute r = self._query(query) File "/usr/local/lib/python3.3/dist-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg/MySQLdb/cursors.py", line 332, in _query rowcount = self._do_query(q) File "/usr/local/lib/python3.3/dist-packages/MySQL_python-1.2.3-py3.3-linux-x86_64.egg/MySQLdb/cursors.py", line 296, in _do_query db.query(q) _mysql_exceptions.OperationalError: (1050, "Table 'INTROSPECT_TEST' already exists")
In the case above this is caused by two parallel testruns against different TEST_NAMEs but the same NAME in the database config. It would be nice if we could fix that.
Change History (6)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
There is no need for a testproject, since this can be exposed by Django's testsuite itself… See the current fix in https://github.com/django/django/commit/4fcc1e4ad8d153f41132b171c231b6d5d4086c28 (I refed the ticket there, but apperently trac didn't pick it up)
comment:3 by , 11 years ago
Oh OK, my mistake, now I understand, "our testrunner" is the Django's testrunner. I'll check the fix.
comment:5 by , 8 years ago
Yeah, we might check if we can delay test discovery till settings are configured properly (ie for testing)
comment:6 by , 8 months ago
Cc: | added |
---|
Can you provide a minimal test project (settings and your testrunner) in which the queries are executed again the normal database?
So that the problem can be reproduced and investigated.