|
25 | 25 | * then also delete it in the license file.
|
26 | 26 | */
|
27 | 27 |
|
| 28 | +#include "mongo/platform/basic.h" |
| 29 | + |
28 | 30 | #include "mongo/s/shard_key_pattern.h"
|
29 | 31 |
|
30 | 32 | #include "mongo/db/hasher.h"
|
31 | 33 | #include "mongo/db/json.h"
|
32 | 34 | #include "mongo/db/query/query_test_service_context.h"
|
33 | 35 | #include "mongo/unittest/unittest.h"
|
34 | 36 |
|
| 37 | +namespace mongo { |
35 | 38 | namespace {
|
36 | 39 |
|
37 | 40 | using std::string;
|
38 | 41 |
|
39 |
| -using namespace mongo; |
40 |
| - |
41 |
| -TEST(ShardKeyPattern, ValidShardKeyPatternSingle) { |
42 |
| - BSONObj empty; |
43 |
| - ASSERT(!ShardKeyPattern(empty).isValid()); |
44 |
| - |
45 |
| - // |
46 |
| - // Single field ShardKeyPatterns |
47 |
| - // |
48 |
| - |
49 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1)).isValid()); |
50 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1)).isValid()); |
51 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1.0f)).isValid()); |
52 |
| - ASSERT(ShardKeyPattern(BSON("a" << (long long)1L)).isValid()); |
53 |
| - |
54 |
| - ASSERT(!ShardKeyPattern(BSON("a" << -1)).isValid()); |
55 |
| - ASSERT(!ShardKeyPattern(BSON("a" << -1.0)).isValid()); |
56 |
| - ASSERT(!ShardKeyPattern(BSON("a" |
57 |
| - << "1")) |
58 |
| - .isValid()); |
59 |
| - |
60 |
| - ASSERT(ShardKeyPattern(BSON("a" |
61 |
| - << "hashed")) |
62 |
| - .isValid()); |
63 |
| - ASSERT(!ShardKeyPattern(BSON("a" |
64 |
| - << "hash")) |
65 |
| - .isValid()); |
66 |
| - ASSERT(!ShardKeyPattern(BSON("" << 1)).isValid()); |
67 |
| - ASSERT(!ShardKeyPattern(BSON("." << 1)).isValid()); |
| 42 | +TEST(ShardKeyPattern, SingleFieldShardKeyPatternsValidityCheck) { |
| 43 | + ShardKeyPattern(BSON("a" << 1)); |
| 44 | + ShardKeyPattern(BSON("a" << 1.0f)); |
| 45 | + ShardKeyPattern(BSON("a" << (long long)1L)); |
| 46 | + ShardKeyPattern(BSON("a" |
| 47 | + << "hashed")); |
| 48 | + |
| 49 | + ASSERT_THROWS(ShardKeyPattern({}), DBException); |
| 50 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << -1)), DBException); |
| 51 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << -1.0)), DBException); |
| 52 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" |
| 53 | + << "1")), |
| 54 | + DBException); |
| 55 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" |
| 56 | + << "hash")), |
| 57 | + DBException); |
| 58 | + ASSERT_THROWS(ShardKeyPattern(BSON("" << 1)), DBException); |
| 59 | + ASSERT_THROWS(ShardKeyPattern(BSON("." << 1)), DBException); |
68 | 60 | }
|
69 | 61 |
|
70 |
| -TEST(ShardKeyPattern, ValidShardKeyPatternComposite) { |
71 |
| - // |
72 |
| - // Composite ShardKeyPatterns |
73 |
| - // |
74 |
| - |
75 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1 << "b" << 1)).isValid()); |
76 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1.0f << "b" << 1.0)).isValid()); |
77 |
| - ASSERT(!ShardKeyPattern(BSON("a" << 1 << "b" << -1)).isValid()); |
78 |
| - ASSERT(!ShardKeyPattern(BSON("a" << 1 << "b" |
79 |
| - << "1")) |
80 |
| - .isValid()); |
81 |
| - |
82 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1 << "b" << 1.0 << "c" << 1.0f)).isValid()); |
83 |
| - ASSERT(!ShardKeyPattern(BSON("a" << 1 << "b." << 1.0)).isValid()); |
84 |
| - ASSERT(!ShardKeyPattern(BSON("a" << 1 << "" << 1.0)).isValid()); |
| 62 | +TEST(ShardKeyPattern, CompositeShardKeyPatternsValidityCheck) { |
| 63 | + ShardKeyPattern(BSON("a" << 1 << "b" << 1)); |
| 64 | + ShardKeyPattern(BSON("a" << 1.0f << "b" << 1.0)); |
| 65 | + ShardKeyPattern(BSON("a" << 1 << "b" << 1.0 << "c" << 1.0f)); |
| 66 | + |
| 67 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << 1 << "b" << -1)), DBException); |
| 68 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << 1 << "b" |
| 69 | + << "1")), |
| 70 | + DBException); |
| 71 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << 1 << "b." << 1.0)), DBException); |
| 72 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << 1 << "" << 1.0)), DBException); |
85 | 73 | }
|
86 | 74 |
|
87 |
| -TEST(ShardKeyPattern, ValidShardKeyPatternNested) { |
88 |
| - // |
89 |
| - // Nested ShardKeyPatterns |
90 |
| - // |
91 |
| - |
92 |
| - ASSERT(ShardKeyPattern(BSON("a.b" << 1)).isValid()); |
93 |
| - ASSERT(!ShardKeyPattern(BSON("a.b" << -1)).isValid()); |
94 |
| - ASSERT(ShardKeyPattern(BSON("a.b.c.d" << 1.0)).isValid()); |
95 |
| - |
96 |
| - ASSERT(!ShardKeyPattern(BSON("a" << BSON("b" << 1))).isValid()); |
97 |
| - |
98 |
| - ASSERT(!ShardKeyPattern(BSON("a.b." << 1)).isValid()); |
99 |
| - ASSERT(!ShardKeyPattern(BSON("a.b.." << 1)).isValid()); |
100 |
| - ASSERT(!ShardKeyPattern(BSON("a..b" << 1)).isValid()); |
101 |
| - |
102 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1 << "c.d" << 1.0 << "e.f.g" << 1.0f)).isValid()); |
103 |
| - ASSERT(ShardKeyPattern(BSON("a" << 1 << "a.b" << 1.0 << "a.b.c" << 1.0f)).isValid()); |
104 |
| - |
105 |
| - ASSERT(!ShardKeyPattern(BSON("a" << 1 << "a.b." << 1.0)).isValid()); |
106 |
| - ASSERT(!ShardKeyPattern(BSON("a" << BSON("b" << 1) << "c.d" << 1.0)).isValid()); |
| 75 | +TEST(ShardKeyPattern, NestedShardKeyPatternsValidtyCheck) { |
| 76 | + ShardKeyPattern(BSON("a.b" << 1)); |
| 77 | + ShardKeyPattern(BSON("a.b.c.d" << 1.0)); |
| 78 | + ShardKeyPattern(BSON("a" << 1 << "c.d" << 1.0 << "e.f.g" << 1.0f)); |
| 79 | + ShardKeyPattern(BSON("a" << 1 << "a.b" << 1.0 << "a.b.c" << 1.0f)); |
| 80 | + |
| 81 | + ASSERT_THROWS(ShardKeyPattern(BSON("a.b" << -1)), DBException); |
| 82 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << BSON("b" << 1))), DBException); |
| 83 | + ASSERT_THROWS(ShardKeyPattern(BSON("a.b." << 1)), DBException); |
| 84 | + ASSERT_THROWS(ShardKeyPattern(BSON("a.b.." << 1)), DBException); |
| 85 | + ASSERT_THROWS(ShardKeyPattern(BSON("a..b" << 1)), DBException); |
| 86 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << 1 << "a.b." << 1.0)), DBException); |
| 87 | + ASSERT_THROWS(ShardKeyPattern(BSON("a" << BSON("b" << 1) << "c.d" << 1.0)), DBException); |
107 | 88 | }
|
108 | 89 |
|
109 | 90 | TEST(ShardKeyPattern, IsShardKey) {
|
@@ -501,4 +482,6 @@ TEST(ShardKeyPattern, UniqueIndexCompatibleHashed) {
|
501 | 482 | ASSERT(!indexComp(pattern, BSON("c" << 1)));
|
502 | 483 | ASSERT(!indexComp(pattern, BSON("c" << -1 << "a.b" << 1)));
|
503 | 484 | }
|
504 |
| -} |
| 485 | + |
| 486 | +} // namespace |
| 487 | +} // namespace mongo |
0 commit comments