From 0380ac1465fcd05e2577351d5df226eb6bbccaa5 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Tue, 2 Oct 2018 18:01:59 -0400 Subject: SERVER-37365 Don't use `ignore()` in some tests. It shouldn't be necessary to explicitly ignore status returns in functions when testing their throw behavior - the test is sufficient to indicate that `Status` is ignored. --- src/mongo/db/auth/authorization_session_test.cpp | 2 +- src/mongo/db/catalog/database_test.cpp | 3 +- src/mongo/db/catalog/drop_database_test.cpp | 4 +-- src/mongo/db/catalog/rename_collection_test.cpp | 7 ++-- .../db/keys_collection_manager_sharding_test.cpp | 7 ++-- src/mongo/db/logical_clock_test.cpp | 3 +- src/mongo/db/repl/rs_rollback_test.cpp | 37 ++++++++-------------- src/mongo/db/repl/storage_interface_impl_test.cpp | 30 ++++++++---------- src/mongo/db/repl/sync_tail_test.cpp | 21 ++++++------ src/mongo/db/views/view_catalog_test.cpp | 16 ++++------ src/mongo/dbtests/validate_tests.cpp | 3 +- src/mongo/unittest/unittest.h | 32 ++++++++++++++++++- src/mongo/unittest/unittest_main.cpp | 2 -- 13 files changed, 85 insertions(+), 82 deletions(-) (limited to 'src/mongo') diff --git a/src/mongo/db/auth/authorization_session_test.cpp b/src/mongo/db/auth/authorization_session_test.cpp index 35eb7e5c56d..4ae564a3518 100644 --- a/src/mongo/db/auth/authorization_session_test.cpp +++ b/src/mongo/db/auth/authorization_session_test.cpp @@ -845,7 +845,7 @@ TEST_F(AuthorizationSessionTest, AddPrivilegesForStageFailsIfOutNamespaceIsNotVa << "")); BSONObj cmdObj = BSON("aggregate" << testFooNss.coll() << "pipeline" << pipeline << "cursor" << BSONObj()); - ASSERT_THROWS_CODE(authzSession->checkAuthForAggregate(testFooNss, cmdObj, false).ignore(), + ASSERT_THROWS_CODE(authzSession->checkAuthForAggregate(testFooNss, cmdObj, false), AssertionException, ErrorCodes::InvalidNamespace); } diff --git a/src/mongo/db/catalog/database_test.cpp b/src/mongo/db/catalog/database_test.cpp index 2554b5e3df6..a64e61b12c8 100644 --- a/src/mongo/db/catalog/database_test.cpp +++ b/src/mongo/db/catalog/database_test.cpp @@ -315,8 +315,7 @@ void _testDropCollectionThrowsExceptionIfThereAreIndexesInProgress(OperationCont ASSERT_GREATER_THAN(indexCatalog->numIndexesInProgress(opCtx), 0); WriteUnitOfWork wuow(opCtx); - ASSERT_THROWS_CODE( - db->dropCollection(opCtx, nss.ns()).transitional_ignore(), AssertionException, 40461); + ASSERT_THROWS_CODE(db->dropCollection(opCtx, nss.ns()), AssertionException, 40461); }); } diff --git a/src/mongo/db/catalog/drop_database_test.cpp b/src/mongo/db/catalog/drop_database_test.cpp index 9cf3c7eefa7..7ede18b7321 100644 --- a/src/mongo/db/catalog/drop_database_test.cpp +++ b/src/mongo/db/catalog/drop_database_test.cpp @@ -301,7 +301,7 @@ TEST_F(DropDatabaseTest, DropDatabaseResetsDropPendingStateOnException) { auto db = autoDb.getDb(); ASSERT_TRUE(db); - ASSERT_THROWS_CODE_AND_WHAT(dropDatabase(_opCtx.get(), _nss.db().toString()).ignore(), + ASSERT_THROWS_CODE_AND_WHAT(dropDatabase(_opCtx.get(), _nss.db().toString()), AssertionException, ErrorCodes::OperationFailed, "onDropCollection() failed"); @@ -455,7 +455,7 @@ TEST_F(DropDatabaseTest, TEST_F(DropDatabaseTest, DropDatabaseFailsToDropAdmin) { NamespaceString adminNSS(NamespaceString::kAdminDb, "foo"); _createCollection(_opCtx.get(), adminNSS); - ASSERT_THROWS_CODE_AND_WHAT(dropDatabase(_opCtx.get(), adminNSS.db().toString()).ignore(), + ASSERT_THROWS_CODE_AND_WHAT(dropDatabase(_opCtx.get(), adminNSS.db().toString()), AssertionException, ErrorCodes::IllegalOperation, "Dropping the 'admin' database is prohibited."); diff --git a/src/mongo/db/catalog/rename_collection_test.cpp b/src/mongo/db/catalog/rename_collection_test.cpp index e74ae6ed833..35c28353486 100644 --- a/src/mongo/db/catalog/rename_collection_test.cpp +++ b/src/mongo/db/catalog/rename_collection_test.cpp @@ -1070,10 +1070,9 @@ TEST_F(RenameCollectionTest, RenameCollectionAcrossDatabaseDropsTemporaryCollect _insertDocument(_opCtx.get(), _sourceNss, BSON("_id" << 0)); _opObserver->onInsertsThrows = true; _opObserver->oplogEntries.clear(); - ASSERT_THROWS_CODE( - renameCollection(_opCtx.get(), _sourceNss, _targetNssDifferentDb, {}).ignore(), - AssertionException, - ErrorCodes::OperationFailed); + ASSERT_THROWS_CODE(renameCollection(_opCtx.get(), _sourceNss, _targetNssDifferentDb, {}), + AssertionException, + ErrorCodes::OperationFailed); _checkOplogEntries(_opObserver->oplogEntries, {"create", "index", "drop"}); } diff --git a/src/mongo/db/keys_collection_manager_sharding_test.cpp b/src/mongo/db/keys_collection_manager_sharding_test.cpp index 005eaf049d8..994840091c3 100644 --- a/src/mongo/db/keys_collection_manager_sharding_test.cpp +++ b/src/mongo/db/keys_collection_manager_sharding_test.cpp @@ -90,10 +90,9 @@ TEST_F(KeysManagerShardedTest, GetKeyForValidationTimesOutIfRefresherIsNotRunnin operationContext()->setDeadlineAfterNowBy(Microseconds(250 * 1000), ErrorCodes::ExceededTimeLimit); - ASSERT_THROWS(keyManager() - ->getKeyForValidation(operationContext(), 1, LogicalTime(Timestamp(100, 0))) - .status_with_transitional_ignore(), - DBException); + ASSERT_THROWS( + keyManager()->getKeyForValidation(operationContext(), 1, LogicalTime(Timestamp(100, 0))), + DBException); } TEST_F(KeysManagerShardedTest, GetKeyForValidationErrorsIfKeyDoesntExist) { diff --git a/src/mongo/db/logical_clock_test.cpp b/src/mongo/db/logical_clock_test.cpp index 0db83d6dbee..5a895dca22e 100644 --- a/src/mongo/db/logical_clock_test.cpp +++ b/src/mongo/db/logical_clock_test.cpp @@ -326,8 +326,7 @@ TEST_F(LogicalClockTest, RejectsLogicalTimesGreaterThanMaxTime) { auto almostMaxSecs = Seconds(maxVal) - LogicalClock::kMaxAcceptableLogicalClockDriftSecs + Seconds(10); setMockClockSourceTime(Date_t::fromDurationSinceEpoch(almostMaxSecs)); - ASSERT_THROWS(getClock()->advanceClusterTime(beyondMaxTime).transitional_ignore(), - std::exception); + ASSERT_THROWS(getClock()->advanceClusterTime(beyondMaxTime), std::exception); ASSERT_TRUE(getClock()->getClusterTime() == LogicalTime()); } diff --git a/src/mongo/db/repl/rs_rollback_test.cpp b/src/mongo/db/repl/rs_rollback_test.cpp index 8b254a65988..11133a1bd6f 100644 --- a/src/mongo/db/repl/rs_rollback_test.cpp +++ b/src/mongo/db/repl/rs_rollback_test.cpp @@ -246,8 +246,7 @@ TEST_F(RSRollbackTest, RemoteGetRollbackIdThrows) { RollbackSourceLocal(stdx::make_unique()), {}, _coordinator, - _replicationProcess.get()) - .transitional_ignore(), + _replicationProcess.get()), AssertionException, ErrorCodes::UnknownError); } @@ -270,8 +269,7 @@ TEST_F(RSRollbackTest, RemoteGetRollbackIdDiffersFromRequiredRBID) { RollbackSourceLocal(stdx::make_unique()), 1, _coordinator, - _replicationProcess.get()) - .transitional_ignore(), + _replicationProcess.get()), AssertionException, ErrorCodes::duplicateCodeForTest(40506)); } @@ -1521,8 +1519,7 @@ TEST_F(RSRollbackTest, RollbackCollModCommandFailsIfRBIDChangesWhileSyncingColle rollbackSource, 0, _coordinator, - _replicationProcess.get()) - .transitional_ignore(), + _replicationProcess.get()), DBException, 40508); ASSERT(rollbackSource.getCollectionInfoCalled); @@ -2029,9 +2026,8 @@ TEST(RSRollbackTest, LocalEntryWithoutNsIsFatal) { << "" << "o" << BSON("_id" << 1 << "a" << 1)); - ASSERT_THROWS( - updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false), + RSFatalException); } TEST(RSRollbackTest, LocalEntryWithoutOIsFatal) { @@ -2065,9 +2061,8 @@ TEST(RSRollbackTest, LocalEntryWithoutOIsFatal) { << "test.t" << "o" << BSONObj()); - ASSERT_THROWS( - updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false), + RSFatalException); } TEST(RSRollbackTest, LocalUpdateEntryWithoutO2IsFatal) { @@ -2103,9 +2098,8 @@ TEST(RSRollbackTest, LocalUpdateEntryWithoutO2IsFatal) { << "test.t" << "o" << BSON("_id" << 1 << "a" << 1)); - ASSERT_THROWS( - updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false), + RSFatalException); } TEST(RSRollbackTest, LocalUpdateEntryWithEmptyO2IsFatal) { @@ -2143,9 +2137,8 @@ TEST(RSRollbackTest, LocalUpdateEntryWithEmptyO2IsFatal) { << BSON("_id" << 1 << "a" << 1) << "o2" << BSONObj()); - ASSERT_THROWS( - updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, invalidOplogEntry, false), + RSFatalException); } DEATH_TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutSessionIdIsFatal, "invariant") { @@ -2165,8 +2158,7 @@ DEATH_TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutSessionIdIsFatal, "in const auto stmtId = BSON("stmtId" << 1); const auto noSessionId = noSessionIdOrStmtId.addField(stmtId.firstElement()); - ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, noSessionId, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, noSessionId, false), RSFatalException); } DEATH_TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutStmtIdIsFatal, "invariant") { @@ -2187,8 +2179,7 @@ DEATH_TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutStmtIdIsFatal, "invar const auto lsid = makeLogicalSessionIdForTest(); const auto sessionId = BSON("lsid" << lsid.toBSON()); const auto noStmtId = noSessionIdOrStmtId.addField(sessionId.firstElement()); - ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, noStmtId, false).transitional_ignore(), - RSFatalException); + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, noStmtId, false), RSFatalException); } TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutTxnTableUUIDIsFatal) { @@ -2212,7 +2203,7 @@ TEST_F(RSRollbackTest, LocalEntryWithTxnNumberWithoutTxnTableUUIDIsFatal) { << lsid.toBSON()); FixUpInfo fui; - ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, entryWithTxnNumber, false).ignore(), + ASSERT_THROWS(updateFixUpInfoFromLocalOplogEntry(fui, entryWithTxnNumber, false), RSFatalException); } diff --git a/src/mongo/db/repl/storage_interface_impl_test.cpp b/src/mongo/db/repl/storage_interface_impl_test.cpp index c14d6a9c00b..66787596d28 100644 --- a/src/mongo/db/repl/storage_interface_impl_test.cpp +++ b/src/mongo/db/repl/storage_interface_impl_test.cpp @@ -525,7 +525,7 @@ TEST_F(StorageInterfaceImplTest, InsertDocumentThrowsNamespaceNotFoundIfOplogUUI auto opCtx = getOperationContext(); StorageInterfaceImpl storage; ASSERT_THROWS_CODE( - storage.insertDocuments(opCtx, {"local", UUID::gen()}, transformInserts({op})).ignore(), + storage.insertDocuments(opCtx, {"local", UUID::gen()}, transformInserts({op})), DBException, ErrorCodes::NamespaceNotFound); } @@ -1910,10 +1910,9 @@ TEST_F(StorageInterfaceImplTest, FindByIdThrowsIfUUIDNotInCatalog) { auto obj = BSON("_id" << "kyle"); StorageInterfaceImpl storage; - ASSERT_THROWS_CODE( - storage.findById(opCtx, {"local", UUID::gen()}, obj["_id"]).getStatus().ignore(), - DBException, - ErrorCodes::NamespaceNotFound); + ASSERT_THROWS_CODE(storage.findById(opCtx, {"local", UUID::gen()}, obj["_id"]).getStatus(), + DBException, + ErrorCodes::NamespaceNotFound); } TEST_F(StorageInterfaceImplTest, FindByIdReturnsNamespaceNotFoundWhenDatabaseDoesNotExist) { @@ -2003,10 +2002,9 @@ TEST_F(StorageInterfaceImplTest, DeleteByIdThrowsIfUUIDNotInCatalog) { auto obj = BSON("_id" << "kyle"); StorageInterfaceImpl storage; - ASSERT_THROWS_CODE( - storage.deleteById(opCtx, {"local", UUID::gen()}, obj["_id"]).getStatus().ignore(), - DBException, - ErrorCodes::NamespaceNotFound); + ASSERT_THROWS_CODE(storage.deleteById(opCtx, {"local", UUID::gen()}, obj["_id"]).getStatus(), + DBException, + ErrorCodes::NamespaceNotFound); } TEST_F(StorageInterfaceImplTest, DeleteByIdReturnsNamespaceNotFoundWhenDatabaseDoesNotExist) { @@ -2078,7 +2076,7 @@ TEST_F(StorageInterfaceImplTest, UpsertByIdThrowsIfUUIDNotInCatalog) { auto obj = BSON("_id" << "kyle"); StorageInterfaceImpl storage; - ASSERT_THROWS_CODE(storage.upsertById(opCtx, {"local", UUID::gen()}, obj["_id"], obj).ignore(), + ASSERT_THROWS_CODE(storage.upsertById(opCtx, {"local", UUID::gen()}, obj["_id"], obj), DBException, ErrorCodes::NamespaceNotFound); } @@ -2265,17 +2263,15 @@ TEST_F(StorageInterfaceImplTest, auto unknownUpdateOp = BSON("$unknownUpdateOp" << BSON("x" << 1000)); ASSERT_THROWS_CODE_AND_WHAT( - storage.upsertById(opCtx, nss, BSON("" << 1).firstElement(), unknownUpdateOp).ignore(), + storage.upsertById(opCtx, nss, BSON("" << 1).firstElement(), unknownUpdateOp), AssertionException, ErrorCodes::FailedToParse, "Unknown modifier: $unknownUpdateOp"); - ASSERT_THROWS_CODE(storage - .upsertById(opCtx, - {nss.db().toString(), *options.uuid}, - BSON("" << 1).firstElement(), - unknownUpdateOp) - .ignore(), + ASSERT_THROWS_CODE(storage.upsertById(opCtx, + {nss.db().toString(), *options.uuid}, + BSON("" << 1).firstElement(), + unknownUpdateOp), DBException, ErrorCodes::FailedToParse); } diff --git a/src/mongo/db/repl/sync_tail_test.cpp b/src/mongo/db/repl/sync_tail_test.cpp index 6c2d6d42258..32cb9afa7f2 100644 --- a/src/mongo/db/repl/sync_tail_test.cpp +++ b/src/mongo/db/repl/sync_tail_test.cpp @@ -232,9 +232,8 @@ auto parseFromOplogEntryArray(const BSONObj& obj, int elem) { TEST_F(SyncTailTest, SyncApplyNoNamespaceBadOp) { const BSONObj op = BSON("op" << "x"); - ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync).ignore(), - ExceptionFor); + ASSERT_THROWS(SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync), + ExceptionFor); } TEST_F(SyncTailTest, SyncApplyNoNamespaceNoOp) { @@ -249,16 +248,15 @@ TEST_F(SyncTailTest, SyncApplyBadOp) { << "x" << "ns" << "test.t"); - ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync).ignore(), - ExceptionFor); + ASSERT_THROWS(SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync), + ExceptionFor); } TEST_F(SyncTailTest, SyncApplyInsertDocumentDatabaseMissing) { NamespaceString nss("test.t"); auto op = makeOplogEntry(OpTypeEnum::kInsert, nss, {}); ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary).ignore(), + SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary), ExceptionFor); } @@ -274,7 +272,7 @@ TEST_F(SyncTailTest, SyncApplyInsertDocumentCollectionLookupByUUIDFails) { NamespaceString otherNss(nss.getSisterNS("othername")); auto op = makeOplogEntry(OpTypeEnum::kInsert, otherNss, kUuid); ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary).ignore(), + SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary), ExceptionFor); } @@ -294,7 +292,7 @@ TEST_F(SyncTailTest, SyncApplyInsertDocumentCollectionMissing) { // implicitly create the collection and lock the database in MODE_X. auto op = makeOplogEntry(OpTypeEnum::kInsert, nss, {}); ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary).ignore(), + SyncTail::syncApply(_opCtx.get(), op.toBSON(), OplogApplication::Mode::kSecondary), ExceptionFor); ASSERT_FALSE(collectionExists(_opCtx.get(), nss)); } @@ -382,9 +380,8 @@ TEST_F(SyncTailTest, SyncApplyCommandThrowsException) { << BSON("create" << "t")); // This test relies on the namespace type check in applyCommand_inlock(). - ASSERT_THROWS( - SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync).ignore(), - ExceptionFor); + ASSERT_THROWS(SyncTail::syncApply(_opCtx.get(), op, OplogApplication::Mode::kInitialSync), + ExceptionFor); } DEATH_TEST_F(SyncTailTest, MultiApplyAbortsWhenNoOperationsAreGiven, "!ops.empty()") { diff --git a/src/mongo/db/views/view_catalog_test.cpp b/src/mongo/db/views/view_catalog_test.cpp index ac22a1b6247..28200ffc616 100644 --- a/src/mongo/db/views/view_catalog_test.cpp +++ b/src/mongo/db/views/view_catalog_test.cpp @@ -220,8 +220,7 @@ TEST_F(ViewCatalogFixture, CreateViewWithPipelineFailsOnInvalidStageName) { auto invalidPipeline = BSON_ARRAY(BSON("INVALID_STAGE_NAME" << 1)); ASSERT_THROWS( - viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation) - .transitional_ignore(), + viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation), AssertionException); } @@ -233,8 +232,7 @@ TEST_F(ReplViewCatalogFixture, CreateViewWithPipelineFailsOnIneligibleStage) { auto invalidPipeline = BSON_ARRAY(BSON("$changeStream" << BSONObj())); ASSERT_THROWS_CODE( - viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation) - .ignore(), + viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation), AssertionException, ErrorCodes::OptionNotSupportedOnView); } @@ -248,8 +246,7 @@ TEST_F(ReplViewCatalogFixture, CreateViewWithPipelineFailsOnIneligibleStagePersi << "someOtherCollection")); ASSERT_THROWS_CODE( - viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation) - .ignore(), + viewCatalog.createView(opCtx.get(), viewName, viewOn, invalidPipeline, emptyCollation), AssertionException, ErrorCodes::OptionNotSupportedOnView); } @@ -424,10 +421,9 @@ TEST_F(ReplViewCatalogFixture, ModifyViewWithPipelineFailsOnIneligibleStage) { ASSERT_OK(viewCatalog.createView(opCtx.get(), viewName, viewOn, validPipeline, emptyCollation)); // Now attempt to replace it with a pipeline containing $changeStream. - ASSERT_THROWS_CODE( - viewCatalog.modifyView(opCtx.get(), viewName, viewOn, invalidPipeline).ignore(), - AssertionException, - ErrorCodes::OptionNotSupportedOnView); + ASSERT_THROWS_CODE(viewCatalog.modifyView(opCtx.get(), viewName, viewOn, invalidPipeline), + AssertionException, + ErrorCodes::OptionNotSupportedOnView); } TEST_F(ViewCatalogFixture, LookupMissingView) { diff --git a/src/mongo/dbtests/validate_tests.cpp b/src/mongo/dbtests/validate_tests.cpp index 5cc747e128f..ddc62bffc0e 100644 --- a/src/mongo/dbtests/validate_tests.cpp +++ b/src/mongo/dbtests/validate_tests.cpp @@ -698,8 +698,7 @@ public: << "background" << false << "partialFilterExpression" - << BSON("a" << BSON("$eq" << 2)))) - .transitional_ignore(), + << BSON("a" << BSON("$eq" << 2)))), AssertionException); // Create a partial geo index that does not index the document. diff --git a/src/mongo/unittest/unittest.h b/src/mongo/unittest/unittest.h index 29a6c76f5b9..17e9c9416b3 100644 --- a/src/mongo/unittest/unittest.h +++ b/src/mongo/unittest/unittest.h @@ -152,6 +152,36 @@ ::mongo::StringData(EXPECTED_WHAT)); \ })) +/** + * This internal helper is used to ignore warnings about unused results. Some unit tests which test + * `ASSERT_THROWS` and its variations are used on functions which both throw and return `Status` or + * `StatusWith` objects. Although such function designs are undesirable, they do exist, presently. + * Therefore this internal helper macro is used by `ASSERT_THROWS` and its variations to silence + * such warnings without forcing the caller to invoke `.ignore()` on the called function. + * + * NOTE: This macro should NOT be used inside regular unit test code to ignore unchecked `Status` or + * `StatusWith` instances -- if a `Status` or `StatusWith` result is to be ignored, please use the + * normal `.ignore()` code. This macro exists only to make using `ASSERT_THROWS` less inconvenient + * on functions which both throw and return `Status` or `StatusWith`. + */ +//#define UNIT_TEST_INTERNALS_IGNORE_UNUSED_RESULT_WARNINGS(STATEMENT) +#ifdef __GNUC__ +// The `(void) 0`s are to permit more readable formatting of these in-macro pragma statements. +#define UNIT_TEST_INTERNALS_IGNORE_UNUSED_RESULT_WARNINGS(STATEMENT) \ + do { \ + _Pragma("GCC diagnostic push")(void) 0; \ + _Pragma("GCC diagnostic ignored \"-Wunused\"")(void) 0; \ + _Pragma("GCC diagnostic ignored \"-Wunused-result\"")(void) 0; \ + STATEMENT; \ + _Pragma("GCC diagnostic pop")(void) 0; \ + } while (false) +#else +#define UNIT_TEST_INTERNALS_IGNORE_UNUSED_RESULT_WARNINGS(STATEMENT) \ + do { \ + STATEMENT; \ + } while (false) +#endif + /** * Behaves like ASSERT_THROWS, above, but also calls CHECK(caughtException) which may contain * additional assertions. @@ -159,7 +189,7 @@ #define ASSERT_THROWS_WITH_CHECK(STATEMENT, EXCEPTION_TYPE, CHECK) \ do { \ try { \ - STATEMENT; \ + UNIT_TEST_INTERNALS_IGNORE_UNUSED_RESULT_WARNINGS(STATEMENT); \ FAIL("Expected statement " #STATEMENT " to throw " #EXCEPTION_TYPE \ " but it threw nothing."); \ } catch (const EXCEPTION_TYPE& ex) { \ diff --git a/src/mongo/unittest/unittest_main.cpp b/src/mongo/unittest/unittest_main.cpp index 33e99099020..a5910a5b50c 100644 --- a/src/mongo/unittest/unittest_main.cpp +++ b/src/mongo/unittest/unittest_main.cpp @@ -1,5 +1,3 @@ -// mongo/unittest/unittest_main.cpp - /* Copyright 2010 10gen Inc. * * This program is free software: you can redistribute it and/or modify -- cgit v1.2.1