diff options
Diffstat (limited to 'src/mongo/s/catalog/type_chunk_test.cpp')
-rw-r--r-- | src/mongo/s/catalog/type_chunk_test.cpp | 259 |
1 files changed, 123 insertions, 136 deletions
diff --git a/src/mongo/s/catalog/type_chunk_test.cpp b/src/mongo/s/catalog/type_chunk_test.cpp index 35d9f578d5f..bc22f23ddb1 100644 --- a/src/mongo/s/catalog/type_chunk_test.cpp +++ b/src/mongo/s/catalog/type_chunk_test.cpp @@ -37,139 +37,126 @@ namespace { - using namespace mongo; - - using std::string; - - TEST(ChunkType, MissingRequiredFields) { - ChunkType chunk; - BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); - - BSONObj objModNS = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::min(BSON("a" << 10 << "b" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(objModNS); - ASSERT_FALSE(chunkRes.isOK()); - - BSONObj objModName = BSON(ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10 << "b" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - chunkRes = ChunkType::fromBSON(objModName); - ASSERT_FALSE(chunkRes.isOK()); - - BSONObj objModKeys = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - chunkRes = ChunkType::fromBSON(objModKeys); - ASSERT_FALSE(chunkRes.isOK()); - - BSONObj objModShard = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10 << "b" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::version(version)); - chunkRes = ChunkType::fromBSON(objModShard); - ASSERT_FALSE(chunkRes.isOK()); - } - - TEST(ChunkType, DifferentNumberOfColumns) { - BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); - BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10 << "b" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT(chunkRes.isOK()); - ASSERT_FALSE(chunkRes.getValue().validate().isOK()); - } - - TEST(ChunkType, DifferentColumns) { - BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); - BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10)) << - ChunkType::max(BSON("b" << 20)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT(chunkRes.isOK()); - ASSERT_FALSE(chunkRes.getValue().validate().isOK()); - } - - TEST(ChunkType, NotAscending) { - BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); - BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 20)) << - ChunkType::max(BSON("a" << 10)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT(chunkRes.isOK()); - ASSERT_FALSE(chunkRes.getValue().validate().isOK()); - } - - TEST(ChunkType, NewFormatVersion) { - ChunkType chunk; - OID epoch = OID::gen(); - BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << epoch); - BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::version(version) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT(chunkRes.isOK()); - chunk = chunkRes.getValue(); - - ASSERT_EQUALS(chunk.getName(), "test.mycol-a_MinKey"); - ASSERT_EQUALS(chunk.getNS(), "test.mycol"); - ASSERT_EQUALS(chunk.getMin(), BSON("a" << 10)); - ASSERT_EQUALS(chunk.getMax(), BSON("a" << 20)); - ChunkVersion fetchedVersion = chunk.getVersion(); - ASSERT_EQUALS(fetchedVersion._combined, 1ULL); - ASSERT_EQUALS(fetchedVersion._epoch, epoch); - ASSERT_EQUALS(chunk.getShard(), "shard0001"); - ASSERT_TRUE(chunk.validate().isOK()); - } - - TEST(ChunkType, OldFormatVersion) { - ChunkType chunk; - OID epoch = OID::gen(); - BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") << - ChunkType::ns("test.mycol") << - ChunkType::min(BSON("a" << 10)) << - ChunkType::max(BSON("a" << 20)) << - ChunkType::DEPRECATED_lastmod(Date_t::fromMillisSinceEpoch(1)) << - ChunkType::DEPRECATED_epoch(epoch) << - ChunkType::shard("shard0001")); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT(chunkRes.isOK()); - chunk = chunkRes.getValue(); - - ASSERT_EQUALS(chunk.getName(), "test.mycol-a_MinKey"); - ASSERT_EQUALS(chunk.getNS(), "test.mycol"); - ASSERT_EQUALS(chunk.getMin(), BSON("a" << 10)); - ASSERT_EQUALS(chunk.getMax(), BSON("a" << 20)); - ChunkVersion fetchedVersion = chunk.getVersion(); - ASSERT_EQUALS(fetchedVersion._combined, 1ULL); - ASSERT_EQUALS(fetchedVersion._epoch, epoch); - ASSERT_EQUALS(chunk.getShard(), "shard0001"); - ASSERT_TRUE(chunk.validate().isOK()); - } - - TEST(ChunkType, BadType) { - BSONObj obj = BSON(ChunkType::name() << 0); - StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); - ASSERT_FALSE(chunkRes.isOK()); - } - -} // unnamed namespace +using namespace mongo; + +using std::string; + +TEST(ChunkType, MissingRequiredFields) { + ChunkType chunk; + BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); + + BSONObj objModNS = + BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::min(BSON("a" << 10 << "b" << 10)) << ChunkType::max(BSON("a" << 20)) + << ChunkType::version(version) << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(objModNS); + ASSERT_FALSE(chunkRes.isOK()); + + BSONObj objModName = + BSON(ChunkType::ns("test.mycol") + << ChunkType::min(BSON("a" << 10 << "b" << 10)) << ChunkType::max(BSON("a" << 20)) + << ChunkType::version(version) << ChunkType::shard("shard0001")); + chunkRes = ChunkType::fromBSON(objModName); + ASSERT_FALSE(chunkRes.isOK()); + + BSONObj objModKeys = BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::version(version) + << ChunkType::shard("shard0001")); + chunkRes = ChunkType::fromBSON(objModKeys); + ASSERT_FALSE(chunkRes.isOK()); + + BSONObj objModShard = + BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 10 << "b" << 10)) + << ChunkType::max(BSON("a" << 20)) << ChunkType::version(version)); + chunkRes = ChunkType::fromBSON(objModShard); + ASSERT_FALSE(chunkRes.isOK()); +} + +TEST(ChunkType, DifferentNumberOfColumns) { + BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); + BSONObj obj = + BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 10 << "b" << 10)) + << ChunkType::max(BSON("a" << 20)) << ChunkType::version(version) + << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT(chunkRes.isOK()); + ASSERT_FALSE(chunkRes.getValue().validate().isOK()); +} + +TEST(ChunkType, DifferentColumns) { + BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); + BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 10)) + << ChunkType::max(BSON("b" << 20)) << ChunkType::version(version) + << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT(chunkRes.isOK()); + ASSERT_FALSE(chunkRes.getValue().validate().isOK()); +} + +TEST(ChunkType, NotAscending) { + BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << OID::gen()); + BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 20)) + << ChunkType::max(BSON("a" << 10)) << ChunkType::version(version) + << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT(chunkRes.isOK()); + ASSERT_FALSE(chunkRes.getValue().validate().isOK()); +} + +TEST(ChunkType, NewFormatVersion) { + ChunkType chunk; + OID epoch = OID::gen(); + BSONArray version = BSON_ARRAY(Date_t::fromMillisSinceEpoch(1) << epoch); + BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 10)) + << ChunkType::max(BSON("a" << 20)) << ChunkType::version(version) + << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT(chunkRes.isOK()); + chunk = chunkRes.getValue(); + + ASSERT_EQUALS(chunk.getName(), "test.mycol-a_MinKey"); + ASSERT_EQUALS(chunk.getNS(), "test.mycol"); + ASSERT_EQUALS(chunk.getMin(), BSON("a" << 10)); + ASSERT_EQUALS(chunk.getMax(), BSON("a" << 20)); + ChunkVersion fetchedVersion = chunk.getVersion(); + ASSERT_EQUALS(fetchedVersion._combined, 1ULL); + ASSERT_EQUALS(fetchedVersion._epoch, epoch); + ASSERT_EQUALS(chunk.getShard(), "shard0001"); + ASSERT_TRUE(chunk.validate().isOK()); +} + +TEST(ChunkType, OldFormatVersion) { + ChunkType chunk; + OID epoch = OID::gen(); + BSONObj obj = BSON(ChunkType::name("test.mycol-a_MinKey") + << ChunkType::ns("test.mycol") << ChunkType::min(BSON("a" << 10)) + << ChunkType::max(BSON("a" << 20)) + << ChunkType::DEPRECATED_lastmod(Date_t::fromMillisSinceEpoch(1)) + << ChunkType::DEPRECATED_epoch(epoch) << ChunkType::shard("shard0001")); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT(chunkRes.isOK()); + chunk = chunkRes.getValue(); + + ASSERT_EQUALS(chunk.getName(), "test.mycol-a_MinKey"); + ASSERT_EQUALS(chunk.getNS(), "test.mycol"); + ASSERT_EQUALS(chunk.getMin(), BSON("a" << 10)); + ASSERT_EQUALS(chunk.getMax(), BSON("a" << 20)); + ChunkVersion fetchedVersion = chunk.getVersion(); + ASSERT_EQUALS(fetchedVersion._combined, 1ULL); + ASSERT_EQUALS(fetchedVersion._epoch, epoch); + ASSERT_EQUALS(chunk.getShard(), "shard0001"); + ASSERT_TRUE(chunk.validate().isOK()); +} + +TEST(ChunkType, BadType) { + BSONObj obj = BSON(ChunkType::name() << 0); + StatusWith<ChunkType> chunkRes = ChunkType::fromBSON(obj); + ASSERT_FALSE(chunkRes.isOK()); +} + +} // unnamed namespace |