fix: force reset of modulestore data for test cases
In #8bdf59b, the SplitModuleStore was given a Django ORM backed store for active version data (i.e. "which version is currently published?"). This started to cause sporadic test failures depending on the test ordering, such as this module: openedx/features/course_experience/tests/views/test_course_home.py The root cause was that the database table holding these active versions was not being properly cleared after tests, probably because of the odd ordering we do MongoDB vs. Django ORM data initialization in the ModuleStoreTestCase and SharedModuleStoreTestCase classes. This is an overly broad hammer fix for this, because: 1. The obvious thing to add it into the ModuleStoreIsolationMixin didn't seem to work. 2. While overly broad, it's a small bit of code and should be safe. 3. It's more urgent to fix this flakiness in the build (affecting maybe 1/4 test runs?) ASAP, rather than tracking this down.
This commit is contained in:
@@ -19,6 +19,7 @@ from django.test.utils import override_settings
|
||||
from lms.djangoapps.courseware.field_overrides import OverrideFieldData
|
||||
from openedx.core.djangolib.testing.utils import CacheIsolationMixin, CacheIsolationTestCase, FilteredQueryCountMixin
|
||||
from openedx.core.lib.tempdir import mkdtemp_clean
|
||||
from common.djangoapps.split_modulestore_django.models import SplitModulestoreCourseIndex
|
||||
from common.djangoapps.student.models import CourseEnrollment
|
||||
from common.djangoapps.student.tests.factories import AdminFactory, UserFactory, InstructorFactory
|
||||
from common.djangoapps.student.tests.factories import StaffFactory
|
||||
@@ -28,7 +29,6 @@ from xmodule.modulestore.django import SignalHandler, clear_existing_modulestore
|
||||
from xmodule.modulestore.tests.factories import XMODULE_FACTORY_LOCK
|
||||
from xmodule.modulestore.tests.mongo_connection import MONGO_HOST, MONGO_PORT_NUM
|
||||
|
||||
|
||||
class CourseUserType(Enum):
|
||||
"""
|
||||
Types of users to be used when testing a course.
|
||||
@@ -470,6 +470,12 @@ class SharedModuleStoreTestCase(
|
||||
cls.end_modulestore_isolation()
|
||||
super().tearDownClass()
|
||||
|
||||
# Overly broad hammer that breaks abstraction barrier to clear data from
|
||||
# the table underlying the Django ORM backed modulestore active versions
|
||||
# lookup. This has to go _after_ the super().tearDownClass call above,
|
||||
# or it doesn't work.
|
||||
SplitModulestoreCourseIndex.objects.all().delete()
|
||||
|
||||
def setUp(self):
|
||||
# OverrideFieldData.provider_classes is always reset to `None` so
|
||||
# that they're recalculated for every test
|
||||
@@ -530,6 +536,12 @@ class ModuleStoreTestCase(
|
||||
def tearDownClass(cls):
|
||||
super().tearDownClass()
|
||||
|
||||
# Overly broad hammer that breaks abstraction barrier to clear data from
|
||||
# the table underlying the Django ORM backed modulestore active versions
|
||||
# lookup. This has to go _after_ the super().tearDownClass call above,
|
||||
# or it doesn't work.
|
||||
SplitModulestoreCourseIndex.objects.all().delete()
|
||||
|
||||
def setUp(self):
|
||||
"""
|
||||
Creates a test User if `self.CREATE_USER` is True.
|
||||
|
||||
Reference in New Issue
Block a user