@@ -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 )
0 commit comments