summaryrefslogtreecommitdiff
path: root/src/mongo/db/update_index_data_test.cpp
diff options
context:
space:
mode:
authorNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-09-21 14:35:16 -0400
committerNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-10-04 09:53:18 -0400
commit41820e4b371e389e8cbe965dc9aff14f657a9040 (patch)
tree511ef7e3e15a067f0f0a2dd93495b0f3b18e6050 /src/mongo/db/update_index_data_test.cpp
parent1e026f75dc41cca4c7293e42b5b49cb9e46d0ea3 (diff)
downloadmongo-41820e4b371e389e8cbe965dc9aff14f657a9040.tar.gz
SERVER-37058: Update with numeric field names inside an array can cause validation to fail
Diffstat (limited to 'src/mongo/db/update_index_data_test.cpp')
-rw-r--r--src/mongo/db/update_index_data_test.cpp127
1 files changed, 65 insertions, 62 deletions
diff --git a/src/mongo/db/update_index_data_test.cpp b/src/mongo/db/update_index_data_test.cpp
index 167cb632ab1..a01a02fa0c4 100644
--- a/src/mongo/db/update_index_data_test.cpp
+++ b/src/mongo/db/update_index_data_test.cpp
@@ -33,97 +33,100 @@
namespace mongo {
-using std::string;
-
TEST(UpdateIndexDataTest, Simple1) {
UpdateIndexData a;
- a.addPath("a.b");
- ASSERT_TRUE(a.mightBeIndexed("a.b"));
- ASSERT_TRUE(a.mightBeIndexed("a"));
- ASSERT_TRUE(a.mightBeIndexed("a.b.c"));
- ASSERT_TRUE(a.mightBeIndexed("a.$.b"));
+ a.addPath(FieldRef("a.b"_sd));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a.b")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a.b.c")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a.$.b")));
- ASSERT_FALSE(a.mightBeIndexed("b"));
- ASSERT_FALSE(a.mightBeIndexed("a.c"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("b")));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a.c")));
a.clear();
- ASSERT_FALSE(a.mightBeIndexed("a.b"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a.b")));
}
TEST(UpdateIndexDataTest, Simple2) {
UpdateIndexData a;
- a.addPath("ab");
- ASSERT_FALSE(a.mightBeIndexed("a"));
+ a.addPath(FieldRef("ab"_sd));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a")));
a.clear();
- ASSERT_FALSE(a.mightBeIndexed("ab"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("ab")));
}
TEST(UpdateIndexDataTest, Component1) {
UpdateIndexData a;
- a.addPathComponent("a");
- ASSERT_FALSE(a.mightBeIndexed(""));
- ASSERT_TRUE(a.mightBeIndexed("a"));
- ASSERT_TRUE(a.mightBeIndexed("b.a"));
- ASSERT_TRUE(a.mightBeIndexed("a.b"));
- ASSERT_TRUE(a.mightBeIndexed("b.a.c"));
- ASSERT_FALSE(a.mightBeIndexed("b.c"));
- ASSERT_FALSE(a.mightBeIndexed("ab"));
+ a.addPathComponent("a"_sd);
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("b.a")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a.b")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("b.a.c")));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("b.c")));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("ab")));
a.clear();
- ASSERT_FALSE(a.mightBeIndexed("a"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a")));
}
TEST(UpdateIndexDataTest, AllPathsIndexed1) {
UpdateIndexData a;
a.allPathsIndexed();
- ASSERT_TRUE(a.mightBeIndexed("a"));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a")));
a.clear();
- ASSERT_FALSE(a.mightBeIndexed("a"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a")));
}
TEST(UpdateIndexDataTest, AllPathsIndexed2) {
UpdateIndexData a;
a.allPathsIndexed();
- ASSERT_TRUE(a.mightBeIndexed("a"));
- ASSERT_TRUE(a.mightBeIndexed(""));
- a.addPathComponent("a");
- ASSERT_TRUE(a.mightBeIndexed("a"));
- ASSERT_TRUE(a.mightBeIndexed("b"));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("")));
+ a.addPathComponent("a"_sd);
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("a")));
+ ASSERT_TRUE(a.mightBeIndexed(FieldRef("b")));
a.clear();
- ASSERT_FALSE(a.mightBeIndexed("a"));
+ ASSERT_FALSE(a.mightBeIndexed(FieldRef("a")));
}
-TEST(UpdateIndexDataTest, getCanonicalIndexField1) {
- string x;
-
- ASSERT_FALSE(getCanonicalIndexField("a", &x));
- ASSERT_FALSE(getCanonicalIndexField("aaa", &x));
- ASSERT_FALSE(getCanonicalIndexField("a.b", &x));
-
- ASSERT_TRUE(getCanonicalIndexField("a.$", &x));
- ASSERT_EQUALS(x, "a");
- ASSERT_TRUE(getCanonicalIndexField("a.0", &x));
- ASSERT_EQUALS(x, "a");
- ASSERT_TRUE(getCanonicalIndexField("a.123", &x));
- ASSERT_EQUALS(x, "a");
-
- ASSERT_TRUE(getCanonicalIndexField("a.$.b", &x));
- ASSERT_EQUALS(x, "a.b");
- ASSERT_TRUE(getCanonicalIndexField("a.0.b", &x));
- ASSERT_EQUALS(x, "a.b");
- ASSERT_TRUE(getCanonicalIndexField("a.123.b", &x));
- ASSERT_EQUALS(x, "a.b");
-
- ASSERT_FALSE(getCanonicalIndexField("a.$ref", &x));
- ASSERT_FALSE(getCanonicalIndexField("a.$ref.b", &x));
-
-
- ASSERT_FALSE(getCanonicalIndexField("a.c$d.b", &x));
-
- ASSERT_FALSE(getCanonicalIndexField("a.123a", &x));
- ASSERT_FALSE(getCanonicalIndexField("a.a123", &x));
- ASSERT_FALSE(getCanonicalIndexField("a.123a.b", &x));
- ASSERT_FALSE(getCanonicalIndexField("a.a123.b", &x));
+TEST(UpdateIndexDataTest, CanonicalIndexField) {
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("aaa")), FieldRef("aaa"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.b")), FieldRef("a.b"_sd));
+
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.$")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.123")), FieldRef("a"_sd));
+
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.$.b")), FieldRef("a.b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0.b")), FieldRef("a.b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.123.b")), FieldRef("a.b"_sd));
+
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.$ref")), FieldRef("a.$ref"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.$ref.b")),
+ FieldRef("a.$ref.b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.c$d.b")), FieldRef("a.c$d.b"_sd));
+
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.123a")), FieldRef("a.123a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.a123")), FieldRef("a.a123"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.123a.b")),
+ FieldRef("a.123a.b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.a123.b")),
+ FieldRef("a.a123.b"_sd));
+
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.")), FieldRef("a."_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("$")), FieldRef("$"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("$.a")), FieldRef("$.a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.$")), FieldRef("a"_sd));
+}
- ASSERT_FALSE(getCanonicalIndexField("a.", &x));
+TEST(UpdateIndexDataTest, CanonicalIndexFieldForNestedNumericFieldNames) {
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0.0")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.55.01")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0.0.b.1")), FieldRef("a"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0b.1")), FieldRef("a.0b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.0.b.1.2")), FieldRef("a.b"_sd));
+ ASSERT_EQ(UpdateIndexData::getCanonicalIndexField(FieldRef("a.01.02.b.c")), FieldRef("a"_sd));
}
}