| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Joint LogSerializer and LogDeserializer testing to make sure they stay in | 5 // Joint LogSerializer and LogDeserializer testing to make sure they stay in |
| 6 // sync. | 6 // sync. |
| 7 | 7 |
| 8 #include "base/memory/scoped_ptr.h" |
| 8 #include "media/cast/logging/log_deserializer.h" | 9 #include "media/cast/logging/log_deserializer.h" |
| 9 #include "media/cast/logging/log_serializer.h" | 10 #include "media/cast/logging/log_serializer.h" |
| 10 #include "media/cast/logging/logging_defines.h" | 11 #include "media/cast/logging/logging_defines.h" |
| 11 #include "media/cast/logging/proto/proto_utils.h" | 12 #include "media/cast/logging/proto/proto_utils.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 14 |
| 14 using media::cast::proto::AggregatedFrameEvent; | 15 using media::cast::proto::AggregatedFrameEvent; |
| 15 using media::cast::proto::AggregatedPacketEvent; | 16 using media::cast::proto::AggregatedPacketEvent; |
| 16 using media::cast::proto::BasePacketEvent; | 17 using media::cast::proto::BasePacketEvent; |
| 17 using media::cast::proto::LogMetadata; | 18 using media::cast::proto::LogMetadata; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 ++event_index) { | 60 ++event_index) { |
| 60 frame_event->add_event_type( | 61 frame_event->add_event_type( |
| 61 ToProtoEventType(kVideoFrameEvents[event_index])); | 62 ToProtoEventType(kVideoFrameEvents[event_index])); |
| 62 frame_event->add_event_timestamp_ms(event_time_ms); | 63 frame_event->add_event_timestamp_ms(event_time_ms); |
| 63 event_time_ms += 1024; | 64 event_time_ms += 1024; |
| 64 } | 65 } |
| 65 frame_event->set_encoded_frame_size( | 66 frame_event->set_encoded_frame_size( |
| 66 kEncodedFrameSize[i % arraysize(kEncodedFrameSize)]); | 67 kEncodedFrameSize[i % arraysize(kEncodedFrameSize)]); |
| 67 frame_event->set_delay_millis(kDelayMillis[i % arraysize(kDelayMillis)]); | 68 frame_event->set_delay_millis(kDelayMillis[i % arraysize(kDelayMillis)]); |
| 68 | 69 |
| 69 frame_event_map_.insert( | 70 frame_event_list_.push_back(frame_event); |
| 70 std::make_pair(frame_event->relative_rtp_timestamp(), frame_event)); | |
| 71 } | 71 } |
| 72 | 72 |
| 73 event_time_ms = 0; | 73 event_time_ms = 0; |
| 74 int packet_id = 0; | 74 int packet_id = 0; |
| 75 for (int i = 0; i < metadata_.num_packet_events(); i++) { | 75 for (int i = 0; i < metadata_.num_packet_events(); i++) { |
| 76 linked_ptr<AggregatedPacketEvent> packet_event(new AggregatedPacketEvent); | 76 linked_ptr<AggregatedPacketEvent> packet_event(new AggregatedPacketEvent); |
| 77 packet_event->set_relative_rtp_timestamp(i * 90); | 77 packet_event->set_relative_rtp_timestamp(i * 90); |
| 78 for (int j = 0; j < 10; j++) { | 78 for (int j = 0; j < 10; j++) { |
| 79 BasePacketEvent* base_event = packet_event->add_base_packet_event(); | 79 BasePacketEvent* base_event = packet_event->add_base_packet_event(); |
| 80 base_event->set_packet_id(packet_id); | 80 base_event->set_packet_id(packet_id); |
| 81 packet_id++; | 81 packet_id++; |
| 82 for (uint32 event_index = 0; | 82 for (uint32 event_index = 0; |
| 83 event_index < arraysize(kVideoPacketEvents); | 83 event_index < arraysize(kVideoPacketEvents); |
| 84 ++event_index) { | 84 ++event_index) { |
| 85 base_event->add_event_type( | 85 base_event->add_event_type( |
| 86 ToProtoEventType(kVideoPacketEvents[event_index])); | 86 ToProtoEventType(kVideoPacketEvents[event_index])); |
| 87 base_event->add_event_timestamp_ms(event_time_ms); | 87 base_event->add_event_timestamp_ms(event_time_ms); |
| 88 event_time_ms += 256; | 88 event_time_ms += 256; |
| 89 } | 89 } |
| 90 } | 90 } |
| 91 packet_event_map_.insert( | 91 packet_event_list_.push_back(packet_event); |
| 92 std::make_pair(packet_event->relative_rtp_timestamp(), packet_event)); | |
| 93 } | 92 } |
| 94 } | 93 } |
| 95 | 94 |
| 96 void Verify(const DeserializedLog& video_log) { | 95 void Verify(const DeserializedLog& video_log) { |
| 97 const LogMetadata& returned_metadata = video_log.metadata; | 96 const LogMetadata& returned_metadata = video_log.metadata; |
| 98 const FrameEventMap& returned_frame_events = video_log.frame_events; | 97 const FrameEventMap& returned_frame_events = video_log.frame_events; |
| 99 const PacketEventMap& returned_packet_events = video_log.packet_events; | 98 const PacketEventMap& returned_packet_events = video_log.packet_events; |
| 100 | 99 |
| 101 EXPECT_EQ(metadata_.SerializeAsString(), | 100 EXPECT_EQ(metadata_.SerializeAsString(), |
| 102 returned_metadata.SerializeAsString()); | 101 returned_metadata.SerializeAsString()); |
| 103 | 102 |
| 104 // Check that the returned map is equal to the original map. | 103 // Check that the returned map is equal to the original map. |
| 105 EXPECT_EQ(frame_event_map_.size(), returned_frame_events.size()); | 104 EXPECT_EQ(frame_event_list_.size(), returned_frame_events.size()); |
| 106 for (FrameEventMap::const_iterator frame_it = returned_frame_events.begin(); | 105 for (FrameEventMap::const_iterator frame_it = returned_frame_events.begin(); |
| 107 frame_it != returned_frame_events.end(); | 106 frame_it != returned_frame_events.end(); |
| 108 ++frame_it) { | 107 ++frame_it) { |
| 109 FrameEventMap::iterator original_it = | 108 FrameEventList::iterator original_it = frame_event_list_.begin(); |
| 110 frame_event_map_.find(frame_it->first); | 109 ASSERT_NE(frame_event_list_.end(), original_it); |
| 111 ASSERT_NE(frame_event_map_.end(), original_it); | |
| 112 // Compare protos by serializing and checking the bytes. | 110 // Compare protos by serializing and checking the bytes. |
| 113 EXPECT_EQ(original_it->second->SerializeAsString(), | 111 EXPECT_EQ((*original_it)->SerializeAsString(), |
| 114 frame_it->second->SerializeAsString()); | 112 frame_it->second->SerializeAsString()); |
| 115 frame_event_map_.erase(original_it); | 113 frame_event_list_.erase(frame_event_list_.begin()); |
| 116 } | 114 } |
| 117 EXPECT_TRUE(frame_event_map_.empty()); | 115 EXPECT_TRUE(frame_event_list_.empty()); |
| 118 | 116 |
| 119 EXPECT_EQ(packet_event_map_.size(), returned_packet_events.size()); | 117 EXPECT_EQ(packet_event_list_.size(), returned_packet_events.size()); |
| 120 for (PacketEventMap::const_iterator packet_it = | 118 for (PacketEventMap::const_iterator packet_it = |
| 121 returned_packet_events.begin(); | 119 returned_packet_events.begin(); |
| 122 packet_it != returned_packet_events.end(); | 120 packet_it != returned_packet_events.end(); |
| 123 ++packet_it) { | 121 ++packet_it) { |
| 124 PacketEventMap::iterator original_it = | 122 PacketEventList::iterator original_it = packet_event_list_.begin(); |
| 125 packet_event_map_.find(packet_it->first); | 123 ASSERT_NE(packet_event_list_.end(), original_it); |
| 126 ASSERT_NE(packet_event_map_.end(), original_it); | |
| 127 // Compare protos by serializing and checking the bytes. | 124 // Compare protos by serializing and checking the bytes. |
| 128 EXPECT_EQ(original_it->second->SerializeAsString(), | 125 EXPECT_EQ((*original_it)->SerializeAsString(), |
| 129 packet_it->second->SerializeAsString()); | 126 packet_it->second->SerializeAsString()); |
| 130 packet_event_map_.erase(original_it); | 127 packet_event_list_.erase(packet_event_list_.begin()); |
| 131 } | 128 } |
| 132 EXPECT_TRUE(packet_event_map_.empty()); | 129 EXPECT_TRUE(packet_event_list_.empty()); |
| 133 } | 130 } |
| 134 | 131 |
| 135 LogMetadata metadata_; | 132 LogMetadata metadata_; |
| 136 FrameEventMap frame_event_map_; | 133 FrameEventList frame_event_list_; |
| 137 PacketEventMap packet_event_map_; | 134 PacketEventList packet_event_list_; |
| 138 scoped_ptr<char[]> serialized_; | 135 scoped_ptr<char[]> serialized_; |
| 139 int output_bytes_; | 136 int output_bytes_; |
| 140 }; | 137 }; |
| 141 | 138 |
| 142 TEST_F(SerializeDeserializeTest, Uncompressed) { | 139 TEST_F(SerializeDeserializeTest, Uncompressed) { |
| 143 bool compressed = false; | 140 bool compressed = false; |
| 144 Init(); | 141 Init(); |
| 145 | 142 |
| 146 bool success = SerializeEvents(metadata_, | 143 bool success = SerializeEvents(metadata_, |
| 147 frame_event_map_, | 144 frame_event_list_, |
| 148 packet_event_map_, | 145 packet_event_list_, |
| 149 compressed, | 146 compressed, |
| 150 kMaxSerializedBytes, | 147 kMaxSerializedBytes, |
| 151 serialized_.get(), | 148 serialized_.get(), |
| 152 &output_bytes_); | 149 &output_bytes_); |
| 153 ASSERT_TRUE(success); | 150 ASSERT_TRUE(success); |
| 154 ASSERT_GT(output_bytes_, 0); | 151 ASSERT_GT(output_bytes_, 0); |
| 155 | 152 |
| 156 DeserializedLog audio_log; | 153 DeserializedLog audio_log; |
| 157 DeserializedLog video_log; | 154 DeserializedLog video_log; |
| 158 success = DeserializeEvents( | 155 success = DeserializeEvents( |
| 159 serialized_.get(), output_bytes_, compressed, &audio_log, &video_log); | 156 serialized_.get(), output_bytes_, compressed, &audio_log, &video_log); |
| 160 ASSERT_TRUE(success); | 157 ASSERT_TRUE(success); |
| 161 | 158 |
| 162 Verify(video_log); | 159 Verify(video_log); |
| 163 } | 160 } |
| 164 | 161 |
| 165 TEST_F(SerializeDeserializeTest, UncompressedInsufficientSpace) { | 162 TEST_F(SerializeDeserializeTest, UncompressedInsufficientSpace) { |
| 166 bool compressed = false; | 163 bool compressed = false; |
| 167 Init(); | 164 Init(); |
| 168 serialized_.reset(new char[100]); | 165 serialized_.reset(new char[100]); |
| 169 bool success = SerializeEvents(metadata_, | 166 bool success = SerializeEvents(metadata_, |
| 170 frame_event_map_, | 167 frame_event_list_, |
| 171 packet_event_map_, | 168 packet_event_list_, |
| 172 compressed, | 169 compressed, |
| 173 100, | 170 100, |
| 174 serialized_.get(), | 171 serialized_.get(), |
| 175 &output_bytes_); | 172 &output_bytes_); |
| 176 EXPECT_FALSE(success); | 173 EXPECT_FALSE(success); |
| 177 EXPECT_EQ(0, output_bytes_); | 174 EXPECT_EQ(0, output_bytes_); |
| 178 } | 175 } |
| 179 | 176 |
| 180 TEST_F(SerializeDeserializeTest, Compressed) { | 177 TEST_F(SerializeDeserializeTest, Compressed) { |
| 181 bool compressed = true; | 178 bool compressed = true; |
| 182 Init(); | 179 Init(); |
| 183 bool success = SerializeEvents(metadata_, | 180 bool success = SerializeEvents(metadata_, |
| 184 frame_event_map_, | 181 frame_event_list_, |
| 185 packet_event_map_, | 182 packet_event_list_, |
| 186 compressed, | 183 compressed, |
| 187 kMaxSerializedBytes, | 184 kMaxSerializedBytes, |
| 188 serialized_.get(), | 185 serialized_.get(), |
| 189 &output_bytes_); | 186 &output_bytes_); |
| 190 ASSERT_TRUE(success); | 187 ASSERT_TRUE(success); |
| 191 ASSERT_GT(output_bytes_, 0); | 188 ASSERT_GT(output_bytes_, 0); |
| 192 | 189 |
| 193 DeserializedLog audio_log; | 190 DeserializedLog audio_log; |
| 194 DeserializedLog video_log; | 191 DeserializedLog video_log; |
| 195 success = DeserializeEvents( | 192 success = DeserializeEvents( |
| 196 serialized_.get(), output_bytes_, compressed, &audio_log, &video_log); | 193 serialized_.get(), output_bytes_, compressed, &audio_log, &video_log); |
| 197 ASSERT_TRUE(success); | 194 ASSERT_TRUE(success); |
| 198 Verify(video_log); | 195 Verify(video_log); |
| 199 } | 196 } |
| 200 | 197 |
| 201 TEST_F(SerializeDeserializeTest, CompressedInsufficientSpace) { | 198 TEST_F(SerializeDeserializeTest, CompressedInsufficientSpace) { |
| 202 bool compressed = true; | 199 bool compressed = true; |
| 203 Init(); | 200 Init(); |
| 204 serialized_.reset(new char[100]); | 201 serialized_.reset(new char[100]); |
| 205 bool success = SerializeEvents(metadata_, | 202 bool success = SerializeEvents(metadata_, |
| 206 frame_event_map_, | 203 frame_event_list_, |
| 207 packet_event_map_, | 204 packet_event_list_, |
| 208 compressed, | 205 compressed, |
| 209 100, | 206 100, |
| 210 serialized_.get(), | 207 serialized_.get(), |
| 211 &output_bytes_); | 208 &output_bytes_); |
| 212 EXPECT_FALSE(success); | 209 EXPECT_FALSE(success); |
| 213 EXPECT_EQ(0, output_bytes_); | 210 EXPECT_EQ(0, output_bytes_); |
| 214 } | 211 } |
| 215 | 212 |
| 216 } // namespace cast | 213 } // namespace cast |
| 217 } // namespace media | 214 } // namespace media |
| OLD | NEW |