| /* |
| * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| #include "webrtc/test/call_test.h" |
| #include "webrtc/test/null_transport.h" |
| |
| namespace webrtc { |
| |
| class PacketInjectionTest : public test::CallTest { |
| protected: |
| enum class CodecType { |
| kVp8, |
| kH264, |
| }; |
| |
| PacketInjectionTest() : rtp_header_parser_(RtpHeaderParser::Create()) {} |
| |
| void InjectIncorrectPacket(CodecType codec_type, |
| uint8_t packet_type, |
| const uint8_t* packet, |
| size_t length); |
| |
| rtc::scoped_ptr<RtpHeaderParser> rtp_header_parser_; |
| }; |
| |
| void PacketInjectionTest::InjectIncorrectPacket(CodecType codec_type, |
| uint8_t payload_type, |
| const uint8_t* packet, |
| size_t length) { |
| CreateSenderCall(Call::Config()); |
| CreateReceiverCall(Call::Config()); |
| |
| test::NullTransport null_transport; |
| CreateSendConfig(1, &null_transport); |
| CreateMatchingReceiveConfigs(&null_transport); |
| receive_configs_[0].decoders[0].payload_type = payload_type; |
| switch (codec_type) { |
| case CodecType::kVp8: |
| receive_configs_[0].decoders[0].payload_name = "VP8"; |
| break; |
| case CodecType::kH264: |
| receive_configs_[0].decoders[0].payload_name = "H264"; |
| break; |
| } |
| CreateStreams(); |
| |
| RTPHeader header; |
| EXPECT_TRUE(rtp_header_parser_->Parse(packet, length, &header)); |
| EXPECT_EQ(kSendSsrcs[0], header.ssrc) |
| << "Packet should have configured SSRC to not be dropped early."; |
| EXPECT_EQ(payload_type, header.payloadType); |
| Start(); |
| EXPECT_EQ(PacketReceiver::DELIVERY_PACKET_ERROR, |
| receiver_call_->Receiver()->DeliverPacket(MediaType::VIDEO, packet, |
| length, PacketTime())); |
| Stop(); |
| |
| DestroyStreams(); |
| } |
| |
| TEST_F(PacketInjectionTest, StapAPacketWithTruncatedNalUnits) { |
| const uint8_t kPacket[] = {0x80, |
| 0xE5, |
| 0xE6, |
| 0x0, |
| 0x0, |
| 0xED, |
| 0x23, |
| 0x4, |
| 0x00, |
| 0xC0, |
| 0xFF, |
| 0xED, |
| 0x58, |
| 0xCB, |
| 0xED, |
| 0xDF}; |
| |
| InjectIncorrectPacket(CodecType::kH264, 101, kPacket, sizeof(kPacket)); |
| } |
| |
| } // namespace webrtc |