Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
a5b1428b
Commit
a5b1428b
authored
Mar 29, 2013
by
Jay Zoldak
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1760 from MITx/feature/will/speed_up_unit_tests
Feature/will/speed up unit tests
parents
f6e9b2ed
d044d5c4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
97 additions
and
32 deletions
+97
-32
cms/djangoapps/contentstore/tests/utils.py
+82
-23
lms/djangoapps/courseware/mock_xqueue_server/test_mock_xqueue_server.py
+15
-9
lms/djangoapps/courseware/tests/tests.py
+0
-0
No files found.
cms/djangoapps/contentstore/tests/utils.py
View file @
a5b1428b
'''
Utilities for contentstore tests
'''
#pylint: disable=W0603
import
json
import
copy
from
uuid
import
uuid4
...
...
@@ -17,36 +23,89 @@ class ModuleStoreTestCase(TestCase):
collection with templates before running the TestCase
and drops it they are finished. """
def
_pre_setup
(
self
):
super
(
ModuleStoreTestCase
,
self
)
.
_pre_setup
()
@staticmethod
def
flush_mongo_except_templates
():
'''
Delete everything in the module store except templates
'''
modulestore
=
xmodule
.
modulestore
.
django
.
modulestore
()
# This query means: every item in the collection
# that is not a template
query
=
{
"_id.course"
:
{
"$ne"
:
"templates"
}}
# Remove everything except templates
modulestore
.
collection
.
remove
(
query
)
@staticmethod
def
load_templates_if_necessary
():
'''
Load templates into the modulestore only if they do not already exist.
We need the templates, because they are copied to create
XModules such as sections and problems
'''
modulestore
=
xmodule
.
modulestore
.
django
.
modulestore
()
# Count the number of templates
query
=
{
"_id.course"
:
"templates"
}
num_templates
=
modulestore
.
collection
.
find
(
query
)
.
count
()
if
num_templates
<
1
:
update_templates
()
@classmethod
def
setUpClass
(
cls
):
'''
Flush the mongo store and set up templates
'''
# Use a uuid to differentiate
# the mongo collections on jenkins.
self
.
orig_MODULESTORE
=
copy
.
deepcopy
(
settings
.
MODULESTORE
)
self
.
test_MODULESTORE
=
self
.
orig_MODULESTORE
self
.
test_MODULESTORE
[
'default'
][
'OPTIONS'
][
'collection'
]
=
'modulestore_
%
s'
%
uuid4
()
.
hex
self
.
test_MODULESTORE
[
'direct'
][
'OPTIONS'
][
'collection'
]
=
'modulestore_
%
s'
%
uuid4
()
.
hex
settings
.
MODULESTORE
=
self
.
test_MODULESTORE
# Flush and initialize the module store
# It needs the templates because it creates new records
# by cloning from the template.
# Note that if your test module gets in some weird state
# (though it shouldn't), do this manually
# from the bash shell to drop it:
# $ mongo test_xmodule --eval "db.dropDatabase()"
cls
.
orig_modulestore
=
copy
.
deepcopy
(
settings
.
MODULESTORE
)
test_modulestore
=
cls
.
orig_modulestore
test_modulestore
[
'default'
][
'OPTIONS'
][
'collection'
]
=
'modulestore_
%
s'
%
uuid4
()
.
hex
test_modulestore
[
'direct'
][
'OPTIONS'
][
'collection'
]
=
'modulestore_
%
s'
%
uuid4
()
.
hex
xmodule
.
modulestore
.
django
.
_MODULESTORES
=
{}
update_templates
()
settings
.
MODULESTORE
=
test_modulestore
TestCase
.
setUpClass
()
@classmethod
def
tearDownClass
(
cls
):
'''
Revert to the old modulestore settings
'''
# Clean up by dropping the collection
modulestore
=
xmodule
.
modulestore
.
django
.
modulestore
()
modulestore
.
collection
.
drop
()
# Restore the original modulestore settings
settings
.
MODULESTORE
=
cls
.
orig_modulestore
def
_pre_setup
(
self
):
'''
Remove everything but the templates before each test
'''
# Flush anything that is not a template
ModuleStoreTestCase
.
flush_mongo_except_templates
()
# Check that we have templates loaded; if not, load them
ModuleStoreTestCase
.
load_templates_if_necessary
()
# Call superclass implementation
super
(
ModuleStoreTestCase
,
self
)
.
_pre_setup
()
def
_post_teardown
(
self
):
# Make sure you flush out the modulestore.
# Drop the collection at the end of the test,
# otherwise there will be lingering collections leftover
# from executing the tests.
xmodule
.
modulestore
.
django
.
_MODULESTORES
=
{}
xmodule
.
modulestore
.
django
.
modulestore
()
.
collection
.
drop
()
settings
.
MODULESTORE
=
self
.
orig_MODULESTORE
'''
Flush everything we created except the templates
'''
# Flush anything that is not a template
ModuleStoreTestCase
.
flush_mongo_except_templates
()
# Call superclass implementation
super
(
ModuleStoreTestCase
,
self
)
.
_post_teardown
()
...
...
lms/djangoapps/courseware/mock_xqueue_server/test_mock_xqueue_server.py
View file @
a5b1428b
...
...
@@ -3,10 +3,11 @@ import unittest
import
threading
import
json
import
urllib
import
urlparse
import
time
from
mock_xqueue_server
import
MockXQueueServer
,
MockXQueueRequestHandler
from
nose.plugins.skip
import
SkipTest
class
MockXQueueServerTest
(
unittest
.
TestCase
):
'''
...
...
@@ -22,11 +23,16 @@ class MockXQueueServerTest(unittest.TestCase):
def
setUp
(
self
):
# This is a test of the test setup,
# so it does not need to run as part of the unit test suite
# You can re-enable it by commenting out the line below
raise
SkipTest
# Create the server
server_port
=
8034
self
.
server_url
=
'http://127.0.0.1:
%
d'
%
server_port
self
.
server
=
MockXQueueServer
(
server_port
,
{
'correct'
:
True
,
'score'
:
1
,
'msg'
:
''
})
{
'correct'
:
True
,
'score'
:
1
,
'msg'
:
''
})
# Start the server in a separate daemon thread
server_thread
=
threading
.
Thread
(
target
=
self
.
server
.
serve_forever
)
...
...
@@ -48,18 +54,18 @@ class MockXQueueServerTest(unittest.TestCase):
callback_url
=
'http://127.0.0.1:8000/test_callback'
grade_header
=
json
.
dumps
({
'lms_callback_url'
:
callback_url
,
'lms_key'
:
'test_queuekey'
,
'queue_name'
:
'test_queue'
})
'lms_key'
:
'test_queuekey'
,
'queue_name'
:
'test_queue'
})
grade_body
=
json
.
dumps
({
'student_info'
:
'test'
,
'grader_payload'
:
'test'
,
'student_response'
:
'test'
})
grade_request
=
{
'xqueue_header'
:
grade_header
,
'xqueue_body'
:
grade_body
}
'xqueue_body'
:
grade_body
}
response_handle
=
urllib
.
urlopen
(
self
.
server_url
+
'/xqueue/submit'
,
urllib
.
urlencode
(
grade_request
))
urllib
.
urlencode
(
grade_request
))
response_dict
=
json
.
loads
(
response_handle
.
read
())
...
...
@@ -71,8 +77,8 @@ class MockXQueueServerTest(unittest.TestCase):
# Expect that the server tries to post back the grading info
xqueue_body
=
json
.
dumps
({
'correct'
:
True
,
'score'
:
1
,
'msg'
:
'<div></div>'
})
'msg'
:
'<div></div>'
})
expected_callback_dict
=
{
'xqueue_header'
:
grade_header
,
'xqueue_body'
:
xqueue_body
}
'xqueue_body'
:
xqueue_body
}
MockXQueueRequestHandler
.
post_to_url
.
assert_called_with
(
callback_url
,
expected_callback_dict
)
expected_callback_dict
)
lms/djangoapps/courseware/tests/tests.py
View file @
a5b1428b
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment