Index: media/cast/logging/serialize_deserialize_test.cc |
diff --git a/media/cast/logging/serialize_deserialize_test.cc b/media/cast/logging/serialize_deserialize_test.cc |
index 759968deb2b786cb923d15452972494f8dfef777..9be6ff0f7f0d1056403025e9030eced889896412 100644 |
--- a/media/cast/logging/serialize_deserialize_test.cc |
+++ b/media/cast/logging/serialize_deserialize_test.cc |
@@ -14,6 +14,7 @@ |
using media::cast::proto::AggregatedFrameEvent; |
using media::cast::proto::AggregatedPacketEvent; |
using media::cast::proto::BasePacketEvent; |
+using media::cast::proto::LogMetadata; |
namespace { |
@@ -29,6 +30,8 @@ const media::cast::CastLoggingEvent kVideoPacketEvents[] = { |
// The frame event fields cycle through these numbers. |
const int kEncodedFrameSize[] = {512, 425, 399, 400, 237}; |
const int kDelayMillis[] = {15, 4, 8, 42, 23, 16}; |
+ |
+const int kMaxSerializedBytes = 10000; |
} |
namespace media { |
@@ -36,109 +39,186 @@ namespace cast { |
class SerializeDeserializeTest : public ::testing::Test { |
protected: |
- SerializeDeserializeTest() : serializer_(kMaxSerializedLogBytes) {} |
+ SerializeDeserializeTest() |
+ : serialized_(new char[kMaxSerializedBytes]), output_bytes_(0) {} |
virtual ~SerializeDeserializeTest() {} |
- LogSerializer serializer_; |
-}; |
+ void Init() { |
+ metadata_.set_first_rtp_timestamp(12345678 * 90); |
+ metadata_.set_is_audio(false); |
+ metadata_.set_num_frame_events(10); |
+ metadata_.set_num_packet_events(10); |
+ |
+ int64 event_time_micros = 0; |
+ // Insert frame and packet events with RTP timestamps 0, 90, 180, ... |
+ for (int i = 0; i < metadata_.num_frame_events(); i++) { |
+ linked_ptr<AggregatedFrameEvent> frame_event(new AggregatedFrameEvent); |
+ frame_event->set_relative_rtp_timestamp(i * 90); |
+ for (uint32 event_index = 0; event_index < arraysize(kVideoFrameEvents); |
+ ++event_index) { |
+ frame_event->add_event_type( |
+ ToProtoEventType(kVideoFrameEvents[event_index])); |
+ frame_event->add_event_timestamp_micros(event_time_micros); |
+ event_time_micros += 1024; |
+ } |
+ frame_event->set_encoded_frame_size( |
+ kEncodedFrameSize[i % arraysize(kEncodedFrameSize)]); |
+ frame_event->set_delay_millis(kDelayMillis[i % arraysize(kDelayMillis)]); |
-TEST_F(SerializeDeserializeTest, Basic) { |
- RtpTimestamp first_rtp_timestamp = 12345678 * 90; |
- FrameEventMap frame_event_map; |
- PacketEventMap packet_event_map; |
- |
- int64 event_time_micros = 0; |
- // Insert frame and packet events with RTP timestamps 0, 90, 180, ... |
- for (int i = 0; i < 10; i++) { |
- linked_ptr<AggregatedFrameEvent> frame_event(new AggregatedFrameEvent); |
- frame_event->set_relative_rtp_timestamp(i * 90); |
- for (uint32 event_index = 0; event_index < arraysize(kVideoFrameEvents); |
- ++event_index) { |
- frame_event->add_event_type( |
- ToProtoEventType(kVideoFrameEvents[event_index])); |
- frame_event->add_event_timestamp_micros(event_time_micros); |
- event_time_micros += 1024; |
+ frame_event_map_.insert( |
+ std::make_pair(frame_event->relative_rtp_timestamp(), frame_event)); |
} |
- frame_event->set_encoded_frame_size( |
- kEncodedFrameSize[i % arraysize(kEncodedFrameSize)]); |
- frame_event->set_delay_millis(kDelayMillis[i % arraysize(kDelayMillis)]); |
- frame_event_map.insert( |
- std::make_pair(frame_event->relative_rtp_timestamp(), frame_event)); |
+ event_time_micros = 0; |
+ int packet_id = 0; |
+ for (int i = 0; i < metadata_.num_packet_events(); i++) { |
+ linked_ptr<AggregatedPacketEvent> packet_event(new AggregatedPacketEvent); |
+ packet_event->set_relative_rtp_timestamp(i * 90); |
+ for (int j = 0; j < 10; j++) { |
+ BasePacketEvent* base_event = packet_event->add_base_packet_event(); |
+ base_event->set_packet_id(packet_id); |
+ packet_id++; |
+ for (uint32 event_index = 0; |
+ event_index < arraysize(kVideoPacketEvents); |
+ ++event_index) { |
+ base_event->add_event_type( |
+ ToProtoEventType(kVideoPacketEvents[event_index])); |
+ base_event->add_event_timestamp_micros(event_time_micros); |
+ event_time_micros += 256; |
+ } |
+ } |
+ packet_event_map_.insert( |
+ std::make_pair(packet_event->relative_rtp_timestamp(), packet_event)); |
+ } |
} |
- event_time_micros = 0; |
- int packet_id = 0; |
- for (int i = 0; i < 10; i++) { |
- linked_ptr<AggregatedPacketEvent> packet_event(new AggregatedPacketEvent); |
- packet_event->set_relative_rtp_timestamp(i * 90); |
- for (int j = 0; j < 10; j++) { |
- BasePacketEvent* base_event = packet_event->add_base_packet_event(); |
- base_event->set_packet_id(packet_id); |
- packet_id++; |
- for (uint32 event_index = 0; event_index < arraysize(kVideoPacketEvents); |
- ++event_index) { |
- base_event->add_event_type( |
- ToProtoEventType(kVideoPacketEvents[event_index])); |
- base_event->add_event_timestamp_micros(event_time_micros); |
- event_time_micros += 256; |
- } |
+ void Verify(const LogMetadata& returned_metadata, |
+ const FrameEventMap& returned_frame_events, |
+ const PacketEventMap& returned_packet_events) { |
+ EXPECT_EQ(metadata_.SerializeAsString(), |
+ returned_metadata.SerializeAsString()); |
+ |
+ // Check that the returned map is equal to the original map. |
+ EXPECT_EQ(frame_event_map_.size(), returned_frame_events.size()); |
+ for (FrameEventMap::const_iterator frame_it = returned_frame_events.begin(); |
+ frame_it != returned_frame_events.end(); |
+ ++frame_it) { |
+ FrameEventMap::iterator original_it = |
+ frame_event_map_.find(frame_it->first); |
+ ASSERT_NE(frame_event_map_.end(), original_it); |
+ // Compare protos by serializing and checking the bytes. |
+ EXPECT_EQ(original_it->second->SerializeAsString(), |
+ frame_it->second->SerializeAsString()); |
+ frame_event_map_.erase(original_it); |
+ } |
+ EXPECT_TRUE(frame_event_map_.empty()); |
+ |
+ EXPECT_EQ(packet_event_map_.size(), returned_packet_events.size()); |
+ for (PacketEventMap::const_iterator packet_it = |
+ returned_packet_events.begin(); |
+ packet_it != returned_packet_events.end(); |
+ ++packet_it) { |
+ PacketEventMap::iterator original_it = |
+ packet_event_map_.find(packet_it->first); |
+ ASSERT_NE(packet_event_map_.end(), original_it); |
+ // Compare protos by serializing and checking the bytes. |
+ EXPECT_EQ(original_it->second->SerializeAsString(), |
+ packet_it->second->SerializeAsString()); |
+ packet_event_map_.erase(original_it); |
} |
- packet_event_map.insert( |
- std::make_pair(packet_event->relative_rtp_timestamp(), packet_event)); |
+ EXPECT_TRUE(packet_event_map_.empty()); |
} |
- media::cast::proto::LogMetadata metadata; |
- metadata.set_is_audio(false); |
- metadata.set_first_rtp_timestamp(first_rtp_timestamp); |
- metadata.set_num_frame_events(frame_event_map.size()); |
- metadata.set_num_packet_events(packet_event_map.size()); |
- bool success = serializer_.SerializeEventsForStream( |
- metadata, frame_event_map, packet_event_map); |
- uint32 length = serializer_.GetSerializedLength(); |
- scoped_ptr<std::string> serialized = serializer_.GetSerializedLogAndReset(); |
+ LogMetadata metadata_; |
+ FrameEventMap frame_event_map_; |
+ PacketEventMap packet_event_map_; |
+ scoped_ptr<char[]> serialized_; |
+ int output_bytes_; |
+}; |
+ |
+TEST_F(SerializeDeserializeTest, Uncompressed) { |
+ bool compressed = false; |
+ Init(); |
+ |
+ bool success = SerializeEvents(metadata_, |
+ frame_event_map_, |
+ packet_event_map_, |
+ compressed, |
+ kMaxSerializedBytes, |
+ serialized_.get(), |
+ &output_bytes_); |
ASSERT_TRUE(success); |
- ASSERT_EQ(length, serialized->size()); |
+ ASSERT_GT(output_bytes_, 0); |
FrameEventMap returned_frame_events; |
PacketEventMap returned_packet_events; |
- media::cast::proto::LogMetadata returned_metadata; |
- success = DeserializeEvents(*serialized, |
+ LogMetadata returned_metadata; |
+ success = DeserializeEvents(serialized_.get(), |
+ output_bytes_, |
+ compressed, |
&returned_metadata, |
&returned_frame_events, |
&returned_packet_events); |
ASSERT_TRUE(success); |
- EXPECT_FALSE(returned_metadata.is_audio()); |
- EXPECT_EQ(first_rtp_timestamp, returned_metadata.first_rtp_timestamp()); |
- |
- // Check that the returned map is equal to the original map. |
- EXPECT_EQ(frame_event_map.size(), returned_frame_events.size()); |
- for (FrameEventMap::iterator frame_it = returned_frame_events.begin(); |
- frame_it != returned_frame_events.end(); |
- ++frame_it) { |
- FrameEventMap::iterator original_it = frame_event_map.find(frame_it->first); |
- ASSERT_NE(frame_event_map.end(), original_it); |
- // Compare protos by serializing and checking the bytes. |
- EXPECT_EQ(original_it->second->SerializeAsString(), |
- frame_it->second->SerializeAsString()); |
- frame_event_map.erase(original_it); |
- } |
- EXPECT_TRUE(frame_event_map.empty()); |
- |
- EXPECT_EQ(packet_event_map.size(), returned_packet_events.size()); |
- for (PacketEventMap::iterator packet_it = returned_packet_events.begin(); |
- packet_it != returned_packet_events.end(); |
- ++packet_it) { |
- PacketEventMap::iterator original_it = |
- packet_event_map.find(packet_it->first); |
- ASSERT_NE(packet_event_map.end(), original_it); |
- // Compare protos by serializing and checking the bytes. |
- EXPECT_EQ(original_it->second->SerializeAsString(), |
- packet_it->second->SerializeAsString()); |
- packet_event_map.erase(original_it); |
- } |
- EXPECT_TRUE(packet_event_map.empty()); |
+ |
+ Verify(returned_metadata, returned_frame_events, returned_packet_events); |
+} |
+ |
+TEST_F(SerializeDeserializeTest, UncompressedInsufficientSpace) { |
+ bool compressed = false; |
+ Init(); |
+ serialized_.reset(new char[100]); |
+ bool success = SerializeEvents(metadata_, |
+ frame_event_map_, |
+ packet_event_map_, |
+ compressed, |
+ 100, |
+ serialized_.get(), |
+ &output_bytes_); |
+ EXPECT_FALSE(success); |
+ EXPECT_EQ(0, output_bytes_); |
+} |
+ |
+TEST_F(SerializeDeserializeTest, Compressed) { |
+ bool compressed = true; |
+ Init(); |
+ bool success = SerializeEvents(metadata_, |
+ frame_event_map_, |
+ packet_event_map_, |
+ compressed, |
+ kMaxSerializedBytes, |
+ serialized_.get(), |
+ &output_bytes_); |
+ ASSERT_TRUE(success); |
+ ASSERT_GT(output_bytes_, 0); |
+ |
+ FrameEventMap returned_frame_events; |
+ PacketEventMap returned_packet_events; |
+ LogMetadata returned_metadata; |
+ success = DeserializeEvents(serialized_.get(), |
+ output_bytes_, |
+ compressed, |
+ &returned_metadata, |
+ &returned_frame_events, |
+ &returned_packet_events); |
+ ASSERT_TRUE(success); |
+ Verify(returned_metadata, returned_frame_events, returned_packet_events); |
+} |
+ |
+TEST_F(SerializeDeserializeTest, CompressedInsufficientSpace) { |
+ bool compressed = true; |
+ Init(); |
+ serialized_.reset(new char[100]); |
+ bool success = SerializeEvents(metadata_, |
+ frame_event_map_, |
+ packet_event_map_, |
+ compressed, |
+ 100, |
+ serialized_.get(), |
+ &output_bytes_); |
+ EXPECT_FALSE(success); |
+ EXPECT_EQ(0, output_bytes_); |
} |
} // namespace cast |