/** * Check the bad raw exception. * Create a primary block a payload block and a raw canonical without any flags. * Add all of them into a raw bundle. * The bundle must throw an exception, because no last block flag is found. * Create the canonical block with the raw data, set the flag. Create the new raw * bundle, now no exception will be through. */ TEST(BundleTest, BadRawException) { std::pair<uint64_t, uint64_t> time = TimestampManager::getInstance() ->getTimestamp(); PrimaryBlock pb = PrimaryBlock("Source", "Destination", time.first, time.second); PayloadBlock pb1 = PayloadBlock("This is a payload"); std::stringstream ss; ss << static_cast<uint8_t>(2) << SDNV::encode(std::bitset<7>().to_ulong()); std::string data = std::to_string(rand() + 1); ss << SDNV::encode(data.size()) << data; std::string canonical = ss.str(); ss.str(std::string()); ss << pb.toRaw() << pb1.toRaw() << canonical; ASSERT_THROW(Bundle(ss.str()), BundleCreationException); // Add last block flag to canonical. ss.str(std::string()); ss << static_cast<uint8_t>(2) << SDNV::encode(std::bitset<7>().to_ulong()) << SDNV::encode(data.size()) << data; CanonicalBlock cb = CanonicalBlock(ss.str()); cb.setProcFlag(CanonicalBlockControlFlags::LAST_BLOCK); ss.str(std::string()); ss << pb.toRaw() << pb1.toRaw() << cb.toRaw(); ASSERT_NO_THROW(Bundle(ss.str())); // Check Exception when two payload blocks are present ss.str(std::string()); ss << pb.toRaw() << pb1.toRaw() << pb1.toRaw() << cb.toRaw(); ASSERT_THROW(Bundle(ss.str()), BundleCreationException); }
bool Bundle::operator>(const Bundle& other) const { return PrimaryBlock(*this) > other; }