summaryrefslogtreecommitdiff
path: root/src/mongo/logv2/redaction_test.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
commit959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch)
treeacc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/logv2/redaction_test.cpp
parent76588293975fc059cf076779e4283e6ffaf8afff (diff)
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/logv2/redaction_test.cpp')
-rw-r--r--src/mongo/logv2/redaction_test.cpp95
1 files changed, 93 insertions, 2 deletions
diff --git a/src/mongo/logv2/redaction_test.cpp b/src/mongo/logv2/redaction_test.cpp
index dda840a4681..ca61f7ec295 100644
--- a/src/mongo/logv2/redaction_test.cpp
+++ b/src/mongo/logv2/redaction_test.cpp
@@ -34,6 +34,7 @@
#include "mongo/base/error_extra_info.h"
#include "mongo/bson/bsonobjbuilder.h"
#include "mongo/bson/bsontypes.h"
+#include "mongo/bson/json.h"
#include "mongo/db/jsobj.h"
#include "mongo/logv2/log_util.h"
#include "mongo/unittest/unittest.h"
@@ -140,8 +141,6 @@ TEST(RedactEncryptedStringTest, BasicStrings) {
}
BSONObj obj = builder.done();
- std::cout << "This is obj: " << obj.toString() << std::endl;
-
auto redactedStr = R"({ type6: "###", string: "string", nestedobj: { subobj: "###" } })";
ASSERT_EQ(redact(obj).toString(), redactedStr);
@@ -149,6 +148,98 @@ TEST(RedactEncryptedStringTest, BasicStrings) {
ASSERT_EQ(redact(obj).toString(), obj.toString());
}
+TEST(RedactSensitiveStringTest, BasicStrings) {
+ BSONObjBuilder builder{};
+ builder.appendBinData("type8", sizeof(zero), BinDataType::Sensitive, zero);
+ builder.append("string", "string");
+ {
+ BSONObjBuilder sub(builder.subobjStart("nestedobj"));
+ sub.appendBinData("subobj", sizeof(zero), BinDataType::Sensitive, zero);
+ }
+ const BSONObj obj = builder.done();
+
+ {
+ logv2::setShouldRedactBinDataEncrypt(true);
+ logv2::setShouldRedactLogs(true);
+
+ // Fully-redacted logs should just redact everything
+ const auto redactedStr = R"({ type8: "###", string: "###", nestedobj: { subobj: "###" } })";
+ ASSERT_EQ(redact(obj).toString(), redactedStr);
+ }
+
+ {
+ const auto redactedStr =
+ R"({ type8: "###", string: "string", nestedobj: { subobj: "###" } })";
+ // The setting for redacting logs shouldn't affect sensitive BinData.
+ logv2::setShouldRedactLogs(false);
+ ASSERT_EQ(redact(obj).toString(), redactedStr);
+
+ // The setting for redacting encrypted BinData shouldn't affect sensitive BinData, either.
+ logv2::setShouldRedactBinDataEncrypt(false);
+ ASSERT_EQ(redact(obj).toString(), redactedStr);
+ }
+}
+
+TEST(RedactSensitiveStringTest, NestedStrings) {
+ // The setting for redacting logs shouldn't affect sensitive BinData.
+ logv2::setShouldRedactBinDataEncrypt(false);
+ // The setting for redacting encrypted BinData shouldn't affect sensitive BinData, either.
+ logv2::setShouldRedactLogs(false);
+
+ BSONObjBuilder builder{};
+
+ // Test for [ "###", { ...: "###" }, ... ] shape cases.
+ {
+ auto subarray = BSONObjBuilder(builder.subarrayStart("subarray"));
+ subarray.appendBinData("0", sizeof(zero), BinDataType::Sensitive, zero);
+
+ for (auto nSubobjs = 0; nSubobjs < 3; ++nSubobjs) {
+ BSONObjBuilder(subarray.subobjStart("subobj"))
+ .appendBinData("type8", sizeof(zero), BinDataType::Sensitive, zero);
+ }
+ }
+
+ // Test for { ...: "###", ...: [ "###", ... ] } shape cases.
+ {
+ auto subobj = BSONObjBuilder(builder.subobjStart("subobj"));
+ subobj.appendBinData("type8", sizeof(zero), BinDataType::Sensitive, zero);
+
+ auto subarray = BSONObjBuilder(subobj.subarrayStart("subarray"));
+ for (auto nSubobjs = 0; nSubobjs < 3; ++nSubobjs) {
+ subarray.appendBinData("0", sizeof(zero), BinDataType::Sensitive, zero);
+ }
+ }
+
+ // Test for [ [ [ "###", ... ] ] ] shape cases.
+ {
+ auto subarray1 = BSONObjBuilder(builder.subarrayStart("subarrays"));
+ auto subarray2 = BSONObjBuilder(subarray1.subarrayStart("subarray"));
+ auto subarray3 = BSONObjBuilder(subarray2.subarrayStart("subarray"));
+ for (auto nSubobjs = 0; nSubobjs < 3; ++nSubobjs) {
+ subarray3.appendBinData("0", sizeof(zero), BinDataType::Sensitive, zero);
+ }
+ }
+
+ // Test for { ...: { ...: { ...: "###" } } } shape cases.
+ {
+ auto subobj1 = BSONObjBuilder(builder.subobjStart("subobjs"));
+ auto subobj2 = BSONObjBuilder(subobj1.subobjStart("subobj"));
+ auto subobj3 = BSONObjBuilder(subobj2.subobjStart("subobj"));
+ subobj3.appendBinData("type8", sizeof(zero), BinDataType::Sensitive, zero);
+ }
+
+ const BSONObj obj = builder.done();
+
+ // Type 8 values should all be redacted.
+ const BSONObj expected = fromjson(R"({
+ subarray: [ "###", { type8: "###" }, { type8: "###" }, { type8: "###" } ],
+ subobj: { type8: "###", subarray: [ "###", "###", "###" ] },
+ subarrays: [ [ [ "###", "###", "###" ] ] ],
+ subobjs: { subobj: { subobj: { type8: "###" } } }
+ })");
+ ASSERT_EQ(redact(obj).toString(), expected.toString());
+}
+
void testBSONCases(std::vector<BSONStringPair>& testCases) {
for (auto m : testCases) {
ASSERT_EQ(redact(m.first).toString(), m.second);