| Index: webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc
|
| index 2f1259e1bc4ed615ece0efe7ac542b4f6cf03d95..d8870654f8b37071a9d79c3e22447e85bf338037 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc
|
| @@ -116,6 +116,52 @@ TEST(RtpPacketTest, CreateWith2Extensions) {
|
| ElementsAreArray(packet.data(), packet.size()));
|
| }
|
|
|
| +TEST(RtpPacketTest, CreateWithExtensionsWithoutManager) {
|
| + RtpPacketToSend packet(nullptr);
|
| + packet.SetPayloadType(kPayloadType);
|
| + packet.SetSequenceNumber(kSeqNum);
|
| + packet.SetTimestamp(kTimestamp);
|
| + packet.SetSsrc(kSsrc);
|
| +
|
| + auto raw = packet.AllocateRawExtension(kTransmissionOffsetExtensionId,
|
| + TransmissionOffset::kValueSizeBytes);
|
| + EXPECT_EQ(raw.size(), TransmissionOffset::kValueSizeBytes);
|
| + TransmissionOffset::Write(raw.data(), kTimeOffset);
|
| +
|
| + raw = packet.AllocateRawExtension(kAudioLevelExtensionId,
|
| + AudioLevel::kValueSizeBytes);
|
| + EXPECT_EQ(raw.size(), AudioLevel::kValueSizeBytes);
|
| + AudioLevel::Write(raw.data(), kVoiceActive, kAudioLevel);
|
| +
|
| + EXPECT_THAT(kPacketWithTOAndAL,
|
| + ElementsAreArray(packet.data(), packet.size()));
|
| +}
|
| +
|
| +TEST(RtpPacketTest, CreateWithMaxSizeHeaderExtension) {
|
| + const size_t kMaxExtensionSize = 16;
|
| + const int kId = 1;
|
| + const uint8_t kValue[16] = "123456789abcdef";
|
| +
|
| + // Write packet with a custom extension.
|
| + RtpPacketToSend packet(nullptr);
|
| + packet.SetRawExtension(kId, kValue);
|
| + // Using different size for same id is not allowed.
|
| + EXPECT_TRUE(packet.AllocateRawExtension(kId, kMaxExtensionSize - 1).empty());
|
| +
|
| + packet.SetPayloadSize(42);
|
| + // Rewriting allocated extension is allowed.
|
| + EXPECT_EQ(packet.AllocateRawExtension(kId, kMaxExtensionSize).size(),
|
| + kMaxExtensionSize);
|
| + // Adding another extension after payload is set is not allowed.
|
| + EXPECT_TRUE(packet.AllocateRawExtension(kId + 1, kMaxExtensionSize).empty());
|
| +
|
| + // Read packet with the custom extension.
|
| + RtpPacketReceived parsed;
|
| + EXPECT_TRUE(parsed.Parse(packet.Buffer()));
|
| + auto read_raw = parsed.GetRawExtension(kId);
|
| + EXPECT_THAT(read_raw, ElementsAreArray(kValue, kMaxExtensionSize));
|
| +}
|
| +
|
| TEST(RtpPacketTest, SetReservedExtensionsAfterPayload) {
|
| const size_t kPayloadSize = 4;
|
| RtpPacketToSend::ExtensionManager extensions;
|
| @@ -300,4 +346,21 @@ TEST(RtpPacketTest, ParseWithExtensionDelayed) {
|
| EXPECT_EQ(0u, packet.padding_size());
|
| }
|
|
|
| +TEST(RtpPacketTest, ParseWithoutExtensionManager) {
|
| + RtpPacketReceived packet;
|
| + EXPECT_TRUE(packet.Parse(kPacketWithTO, sizeof(kPacketWithTO)));
|
| +
|
| + EXPECT_FALSE(packet.HasRawExtension(kAudioLevelExtensionId));
|
| + EXPECT_TRUE(packet.GetRawExtension(kAudioLevelExtensionId).empty());
|
| +
|
| + EXPECT_TRUE(packet.HasRawExtension(kTransmissionOffsetExtensionId));
|
| +
|
| + int32_t time_offset = 0;
|
| + auto raw_extension = packet.GetRawExtension(kTransmissionOffsetExtensionId);
|
| + EXPECT_EQ(raw_extension.size(), TransmissionOffset::kValueSizeBytes);
|
| + EXPECT_TRUE(TransmissionOffset::Parse(raw_extension.data(), &time_offset));
|
| +
|
| + EXPECT_EQ(time_offset, kTimeOffset);
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|