diff options
author | Nick Zolnierz <nicholas.zolnierz@mongodb.com> | 2018-09-21 14:35:16 -0400 |
---|---|---|
committer | Nick Zolnierz <nicholas.zolnierz@mongodb.com> | 2018-10-04 09:53:18 -0400 |
commit | 41820e4b371e389e8cbe965dc9aff14f657a9040 (patch) | |
tree | 511ef7e3e15a067f0f0a2dd93495b0f3b18e6050 /src/mongo/db/update_index_data_test.cpp | |
parent | 1e026f75dc41cca4c7293e42b5b49cb9e46d0ea3 (diff) | |
download | mongo-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.cpp | 127 |
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)); } } |