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 |