diff options
Diffstat (limited to 'src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp')
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp | 221 |
1 files changed, 109 insertions, 112 deletions
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp index 2f3ddf38518..1ace8c8c019 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp @@ -40,125 +40,122 @@ namespace { - using namespace mongo; - - class WiredTigerFactoryTest : public mongo::unittest::Test { - private: - virtual void setUp() { - ServiceContext* globalEnv = getGlobalServiceContext(); - ASSERT_TRUE(globalEnv); - ASSERT_TRUE(getGlobalServiceContext()->isRegisteredStorageEngine(kWiredTigerEngineName)); - std::unique_ptr<StorageFactoriesIterator> sfi(getGlobalServiceContext()-> - makeStorageFactoriesIterator()); - ASSERT_TRUE(sfi); - bool found = false; - while (sfi->more()) { - const StorageEngine::Factory* currentFactory = sfi->next(); - if (currentFactory->getCanonicalName() == kWiredTigerEngineName) { - found = true; - factory = currentFactory; - break; - } +using namespace mongo; + +class WiredTigerFactoryTest : public mongo::unittest::Test { +private: + virtual void setUp() { + ServiceContext* globalEnv = getGlobalServiceContext(); + ASSERT_TRUE(globalEnv); + ASSERT_TRUE(getGlobalServiceContext()->isRegisteredStorageEngine(kWiredTigerEngineName)); + std::unique_ptr<StorageFactoriesIterator> sfi( + getGlobalServiceContext()->makeStorageFactoriesIterator()); + ASSERT_TRUE(sfi); + bool found = false; + while (sfi->more()) { + const StorageEngine::Factory* currentFactory = sfi->next(); + if (currentFactory->getCanonicalName() == kWiredTigerEngineName) { found = true; + factory = currentFactory; + break; } - ASSERT_TRUE(found); - _oldOptions = wiredTigerGlobalOptions; - } - - virtual void tearDown() { - wiredTigerGlobalOptions = _oldOptions; - factory = NULL; - } - - WiredTigerGlobalOptions _oldOptions; - - protected: - const StorageEngine::Factory* factory; - }; - - void _testValidateMetadata(const StorageEngine::Factory* factory, - const BSONObj& metadataOptions, - bool directoryPerDB, - bool directoryForIndexes, - ErrorCodes::Error expectedCode) { - // It is fine to specify an invalid data directory for the metadata - // as long as we do not invoke read() or write(). - StorageEngineMetadata metadata("no_such_directory"); - metadata.setStorageEngineOptions(metadataOptions); - - StorageGlobalParams storageOptions; - storageOptions.directoryperdb = directoryPerDB; - wiredTigerGlobalOptions.directoryForIndexes = directoryForIndexes; - - Status status = factory->validateMetadata(metadata, storageOptions); - if (expectedCode != status.code()) { - FAIL(str::stream() - << "Unexpected StorageEngine::Factory::validateMetadata result. Expected: " - << ErrorCodes::errorString(expectedCode) << " but got " - << status.toString() - << " instead. metadataOptions: " << metadataOptions - << "; directoryPerDB: " << directoryPerDB - << "; directoryForIndexes: " << directoryForIndexes); + found = true; } + ASSERT_TRUE(found); + _oldOptions = wiredTigerGlobalOptions; } - // Do not validate fields that are not present in metadata. - TEST_F(WiredTigerFactoryTest, ValidateMetadataEmptyOptions) { - _testValidateMetadata(factory, BSONObj(), false, false, ErrorCodes::OK); - _testValidateMetadata(factory, BSONObj(), false, true, ErrorCodes::OK); - _testValidateMetadata(factory, BSONObj(), true, false, ErrorCodes::OK); - _testValidateMetadata(factory, BSONObj(), false, false, ErrorCodes::OK); - } - - TEST_F(WiredTigerFactoryTest, ValidateMetadataDirectoryPerDB) { - _testValidateMetadata(factory, fromjson("{directoryPerDB: 123}"), false, false, - ErrorCodes::FailedToParse); - _testValidateMetadata(factory, fromjson("{directoryPerDB: false}"), false, false, - ErrorCodes::OK); - _testValidateMetadata(factory, fromjson("{directoryPerDB: false}"), true, false, - ErrorCodes::InvalidOptions); - _testValidateMetadata(factory, fromjson("{directoryPerDB: true}"), false, false, - ErrorCodes::InvalidOptions); - _testValidateMetadata(factory, fromjson("{directoryPerDB: true}"), true, false, - ErrorCodes::OK); - } - - TEST_F(WiredTigerFactoryTest, ValidateMetadataDirectoryForIndexes) { - _testValidateMetadata(factory, fromjson("{directoryForIndexes: 123}"), false, false, - ErrorCodes::FailedToParse); - _testValidateMetadata(factory, fromjson("{directoryForIndexes: false}"), false, false, - ErrorCodes::OK); - _testValidateMetadata(factory, fromjson("{directoryForIndexes: false}"), false, true, - ErrorCodes::InvalidOptions); - _testValidateMetadata(factory, fromjson("{directoryForIndexes: true}"), false, false, - ErrorCodes::InvalidOptions); - _testValidateMetadata(factory, fromjson("{directoryForIndexes: true}"), true, true, - ErrorCodes::OK); - } - - void _testCreateMetadataOptions(const StorageEngine::Factory* factory, - bool directoryPerDB, - bool directoryForIndexes) { - StorageGlobalParams storageOptions; - storageOptions.directoryperdb = directoryPerDB; - wiredTigerGlobalOptions.directoryForIndexes = directoryForIndexes; - - BSONObj metadataOptions = factory->createMetadataOptions(storageOptions); - - BSONElement directoryPerDBElement = metadataOptions.getField("directoryPerDB"); - ASSERT_TRUE(directoryPerDBElement.isBoolean()); - ASSERT_EQUALS(directoryPerDB, directoryPerDBElement.boolean()); - - BSONElement directoryForIndexesElement = metadataOptions.getField("directoryForIndexes"); - ASSERT_TRUE(directoryForIndexesElement.isBoolean()); - ASSERT_EQUALS(directoryForIndexes, directoryForIndexesElement.boolean()); + virtual void tearDown() { + wiredTigerGlobalOptions = _oldOptions; + factory = NULL; } - TEST_F(WiredTigerFactoryTest, CreateMetadataOptions) { - _testCreateMetadataOptions(factory, false, false); - _testCreateMetadataOptions(factory, false, true); - _testCreateMetadataOptions(factory, true, false); - _testCreateMetadataOptions(factory, true, true); + WiredTigerGlobalOptions _oldOptions; + +protected: + const StorageEngine::Factory* factory; +}; + +void _testValidateMetadata(const StorageEngine::Factory* factory, + const BSONObj& metadataOptions, + bool directoryPerDB, + bool directoryForIndexes, + ErrorCodes::Error expectedCode) { + // It is fine to specify an invalid data directory for the metadata + // as long as we do not invoke read() or write(). + StorageEngineMetadata metadata("no_such_directory"); + metadata.setStorageEngineOptions(metadataOptions); + + StorageGlobalParams storageOptions; + storageOptions.directoryperdb = directoryPerDB; + wiredTigerGlobalOptions.directoryForIndexes = directoryForIndexes; + + Status status = factory->validateMetadata(metadata, storageOptions); + if (expectedCode != status.code()) { + FAIL(str::stream() + << "Unexpected StorageEngine::Factory::validateMetadata result. Expected: " + << ErrorCodes::errorString(expectedCode) << " but got " << status.toString() + << " instead. metadataOptions: " << metadataOptions << "; directoryPerDB: " + << directoryPerDB << "; directoryForIndexes: " << directoryForIndexes); } +} + +// Do not validate fields that are not present in metadata. +TEST_F(WiredTigerFactoryTest, ValidateMetadataEmptyOptions) { + _testValidateMetadata(factory, BSONObj(), false, false, ErrorCodes::OK); + _testValidateMetadata(factory, BSONObj(), false, true, ErrorCodes::OK); + _testValidateMetadata(factory, BSONObj(), true, false, ErrorCodes::OK); + _testValidateMetadata(factory, BSONObj(), false, false, ErrorCodes::OK); +} + +TEST_F(WiredTigerFactoryTest, ValidateMetadataDirectoryPerDB) { + _testValidateMetadata( + factory, fromjson("{directoryPerDB: 123}"), false, false, ErrorCodes::FailedToParse); + _testValidateMetadata( + factory, fromjson("{directoryPerDB: false}"), false, false, ErrorCodes::OK); + _testValidateMetadata( + factory, fromjson("{directoryPerDB: false}"), true, false, ErrorCodes::InvalidOptions); + _testValidateMetadata( + factory, fromjson("{directoryPerDB: true}"), false, false, ErrorCodes::InvalidOptions); + _testValidateMetadata(factory, fromjson("{directoryPerDB: true}"), true, false, ErrorCodes::OK); +} + +TEST_F(WiredTigerFactoryTest, ValidateMetadataDirectoryForIndexes) { + _testValidateMetadata( + factory, fromjson("{directoryForIndexes: 123}"), false, false, ErrorCodes::FailedToParse); + _testValidateMetadata( + factory, fromjson("{directoryForIndexes: false}"), false, false, ErrorCodes::OK); + _testValidateMetadata( + factory, fromjson("{directoryForIndexes: false}"), false, true, ErrorCodes::InvalidOptions); + _testValidateMetadata( + factory, fromjson("{directoryForIndexes: true}"), false, false, ErrorCodes::InvalidOptions); + _testValidateMetadata( + factory, fromjson("{directoryForIndexes: true}"), true, true, ErrorCodes::OK); +} + +void _testCreateMetadataOptions(const StorageEngine::Factory* factory, + bool directoryPerDB, + bool directoryForIndexes) { + StorageGlobalParams storageOptions; + storageOptions.directoryperdb = directoryPerDB; + wiredTigerGlobalOptions.directoryForIndexes = directoryForIndexes; + + BSONObj metadataOptions = factory->createMetadataOptions(storageOptions); + + BSONElement directoryPerDBElement = metadataOptions.getField("directoryPerDB"); + ASSERT_TRUE(directoryPerDBElement.isBoolean()); + ASSERT_EQUALS(directoryPerDB, directoryPerDBElement.boolean()); + + BSONElement directoryForIndexesElement = metadataOptions.getField("directoryForIndexes"); + ASSERT_TRUE(directoryForIndexesElement.isBoolean()); + ASSERT_EQUALS(directoryForIndexes, directoryForIndexesElement.boolean()); +} + +TEST_F(WiredTigerFactoryTest, CreateMetadataOptions) { + _testCreateMetadataOptions(factory, false, false); + _testCreateMetadataOptions(factory, false, true); + _testCreateMetadataOptions(factory, true, false); + _testCreateMetadataOptions(factory, true, true); +} } // namespace |