Skip to content

Commit f82706c

Browse files
prashantmitalShaneHarvey
authored andcommitted
PYTHON-1597 Don't run Change Stream tests on MMAPv1 (mongodb#356)
1 parent 4f3b646 commit f82706c

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

test/__init__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ def __init__(self):
162162
self.nodes = set()
163163
self.replica_set_name = None
164164
self.cmd_line = None
165+
self.server_status = None
165166
self.version = Version(-1) # Needs to be comparable with Version
166167
self.auth_enabled = False
167168
self.test_commands_enabled = False
@@ -248,6 +249,7 @@ def _init_client(self):
248249
# May not have this if OperationFailure was raised earlier.
249250
self.cmd_line = self.client.admin.command('getCmdLineOpts')
250251

252+
self.server_status = self.client.admin.command('serverStatus')
251253
self.ismaster = ismaster = self.client.admin.command('isMaster')
252254
self.sessions_enabled = 'logicalSessionTimeoutMinutes' in ismaster
253255

@@ -424,6 +426,25 @@ def require_connection(self, func):
424426
"Cannot connect to MongoDB on %s" % (self.pair,),
425427
func=func)
426428

429+
def require_no_mmap(self, func):
430+
"""Run a test only if the server is not using the MMAPv1 storage
431+
engine. Only works for standalone and replica sets; tests are
432+
run regardless of storage engine on sharded clusters. """
433+
def is_not_mmap():
434+
if self.is_mongos:
435+
return True
436+
try:
437+
storage_engine = self.server_status.get(
438+
'storageEngine').get('name')
439+
except AttributeError:
440+
# Raised if the storageEngine key does not exist or if
441+
# self.server_status is None.
442+
return False
443+
return storage_engine != 'mmapv1'
444+
445+
return self._require(
446+
is_not_mmap, "Storage engine must not be MMAPv1", func=func)
447+
427448
def require_version_min(self, *ver):
428449
"""Run a test only if the server version is at least ``version``."""
429450
other_version = Version(*ver)

test/test_change_stream.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class TestClusterChangeStream(IntegrationTest):
5454

5555
@classmethod
5656
@client_context.require_version_min(4, 0, 0, -1)
57+
@client_context.require_no_mmap
5758
@client_context.require_no_standalone
5859
def setUpClass(cls):
5960
super(TestClusterChangeStream, cls).setUpClass()
@@ -97,6 +98,7 @@ class TestDatabaseChangeStream(IntegrationTest):
9798

9899
@classmethod
99100
@client_context.require_version_min(4, 0, 0, -1)
101+
@client_context.require_no_mmap
100102
@client_context.require_no_standalone
101103
def setUpClass(cls):
102104
super(TestDatabaseChangeStream, cls).setUpClass()
@@ -147,6 +149,7 @@ class TestCollectionChangeStream(IntegrationTest):
147149

148150
@classmethod
149151
@client_context.require_version_min(3, 5, 11)
152+
@client_context.require_no_mmap
150153
@client_context.require_no_standalone
151154
def setUpClass(cls):
152155
super(TestCollectionChangeStream, cls).setUpClass()
@@ -645,6 +648,8 @@ def create_tests():
645648

646649
for test in scenario_def['tests']:
647650
new_test = create_test(scenario_def, test)
651+
new_test = client_context.require_no_mmap(new_test)
652+
648653
if 'minServerVersion' in test:
649654
min_ver = tuple(
650655
int(elt) for

0 commit comments

Comments
 (0)