TEST(AssertUtils, MassertTypedExtraInfoWorks) { try { msgasserted(ErrorExtraInfoExample(123), ""); } catch (const DBException& ex) { ASSERT(ex.extraInfo()); ASSERT(ex.extraInfo<ErrorExtraInfoExample>()); ASSERT_EQ(ex.extraInfo<ErrorExtraInfoExample>()->data, 123); } try { massert(ErrorExtraInfoExample(123), "", false); } catch (const ExceptionFor<ErrorCodes::ForTestingErrorExtraInfo>& ex) { ASSERT(ex.extraInfo()); ASSERT(ex.extraInfo<ErrorExtraInfoExample>()); ASSERT_EQ(ex.extraInfo<ErrorExtraInfoExample>()->data, 123); ASSERT_EQ(ex->data, 123); } }
TEST(Commands, appendCommandStatusErrorExtraInfo) { BSONObjBuilder actualResult; const Status status(ErrorExtraInfoExample(123), "not again!"); CommandHelpers::appendCommandStatus(actualResult, status); BSONObjBuilder expectedResult; expectedResult.append("ok", 0.0); expectedResult.append("errmsg", status.reason()); expectedResult.append("code", status.code()); expectedResult.append("codeName", ErrorCodes::errorString(status.code())); expectedResult.append("data", 123); ASSERT_BSONOBJ_EQ(actualResult.obj(), expectedResult.obj()); }
TEST(AssertUtils, UassertStatusOKPreservesExtraInfo) { const auto status = Status(ErrorExtraInfoExample(123), ""); try { uassertStatusOK(status); } catch (const DBException& ex) { ASSERT(ex.extraInfo()); ASSERT(ex.extraInfo<ErrorExtraInfoExample>()); ASSERT_EQ(ex.extraInfo<ErrorExtraInfoExample>()->data, 123); } try { uassertStatusOK(status); } catch (const ExceptionFor<ErrorCodes::ForTestingErrorExtraInfo>& ex) { ASSERT(ex.extraInfo()); ASSERT(ex.extraInfo<ErrorExtraInfoExample>()); ASSERT_EQ(ex.extraInfo<ErrorExtraInfoExample>()->data, 123); ASSERT_EQ(ex->data, 123); } }