| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2004 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include "webrtc/base/byteorder.h" | 11 #include "webrtc/base/byteorder.h" |
| 12 #include "webrtc/base/constructormagic.h" | 12 #include "webrtc/base/constructormagic.h" |
| 13 #include "webrtc/base/gunit.h" | 13 #include "webrtc/base/gunit.h" |
| 14 #include "webrtc/base/thread.h" | 14 #include "webrtc/base/thread.h" |
| 15 #include "webrtc/media/base/cryptoparams.h" | 15 #include "webrtc/media/base/cryptoparams.h" |
| 16 #include "webrtc/media/base/fakertp.h" | 16 #include "webrtc/media/base/fakertp.h" |
| 17 #include "webrtc/p2p/base/sessiondescription.h" | 17 #include "webrtc/p2p/base/sessiondescription.h" |
| 18 #include "webrtc/pc/srtpfilter.h" | 18 #include "webrtc/pc/srtpfilter.h" |
| 19 extern "C" { | 19 extern "C" { |
| 20 #ifdef SRTP_RELATIVE_PATH | 20 #ifdef SRTP_RELATIVE_PATH |
| 21 #include "crypto/include/err.h" | 21 #include "crypto/include/err.h" |
| 22 #else | 22 #else |
| 23 #include "third_party/libsrtp/srtp/crypto/include/err.h" | 23 #include "third_party/libsrtp/crypto/include/err.h" |
| 24 #endif | 24 #endif |
| 25 } | 25 } |
| 26 | 26 |
| 27 using rtc::CS_AES_CM_128_HMAC_SHA1_80; | 27 using rtc::CS_AES_CM_128_HMAC_SHA1_80; |
| 28 using rtc::CS_AES_CM_128_HMAC_SHA1_32; | 28 using rtc::CS_AES_CM_128_HMAC_SHA1_32; |
| 29 using rtc::CS_AEAD_AES_128_GCM; | 29 using rtc::CS_AEAD_AES_128_GCM; |
| 30 using rtc::CS_AEAD_AES_256_GCM; | 30 using rtc::CS_AEAD_AES_256_GCM; |
| 31 using cricket::CryptoParams; | 31 using cricket::CryptoParams; |
| 32 using cricket::CS_LOCAL; | 32 using cricket::CS_LOCAL; |
| 33 using cricket::CS_REMOTE; | 33 using cricket::CS_REMOTE; |
| (...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 uint32_t ssrc_; | 806 uint32_t ssrc_; |
| 807 int mode_; | 807 int mode_; |
| 808 cricket::SrtpFilter::Error error_; | 808 cricket::SrtpFilter::Error error_; |
| 809 | 809 |
| 810 private: | 810 private: |
| 811 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStatTest); | 811 RTC_DISALLOW_COPY_AND_ASSIGN(SrtpStatTest); |
| 812 }; | 812 }; |
| 813 | 813 |
| 814 TEST_F(SrtpStatTest, TestProtectRtpError) { | 814 TEST_F(SrtpStatTest, TestProtectRtpError) { |
| 815 Reset(); | 815 Reset(); |
| 816 srtp_stat_.AddProtectRtpResult(1, err_status_ok); | 816 srtp_stat_.AddProtectRtpResult(1, srtp_err_status_ok); |
| 817 EXPECT_EQ(0U, ssrc_); | 817 EXPECT_EQ(0U, ssrc_); |
| 818 EXPECT_EQ(-1, mode_); | 818 EXPECT_EQ(-1, mode_); |
| 819 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 819 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 820 Reset(); | 820 Reset(); |
| 821 srtp_stat_.AddProtectRtpResult(1, err_status_auth_fail); | 821 srtp_stat_.AddProtectRtpResult(1, srtp_err_status_auth_fail); |
| 822 EXPECT_EQ(1U, ssrc_); | 822 EXPECT_EQ(1U, ssrc_); |
| 823 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 823 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 824 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); | 824 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); |
| 825 Reset(); | 825 Reset(); |
| 826 srtp_stat_.AddProtectRtpResult(1, err_status_fail); | 826 srtp_stat_.AddProtectRtpResult(1, srtp_err_status_fail); |
| 827 EXPECT_EQ(1U, ssrc_); | 827 EXPECT_EQ(1U, ssrc_); |
| 828 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 828 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 829 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 829 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 830 // Within 200ms, the error will not be triggered. | 830 // Within 200ms, the error will not be triggered. |
| 831 Reset(); | 831 Reset(); |
| 832 srtp_stat_.AddProtectRtpResult(1, err_status_fail); | 832 srtp_stat_.AddProtectRtpResult(1, srtp_err_status_fail); |
| 833 EXPECT_EQ(0U, ssrc_); | 833 EXPECT_EQ(0U, ssrc_); |
| 834 EXPECT_EQ(-1, mode_); | 834 EXPECT_EQ(-1, mode_); |
| 835 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 835 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 836 // Now the error will be triggered again. | 836 // Now the error will be triggered again. |
| 837 Reset(); | 837 Reset(); |
| 838 rtc::Thread::Current()->SleepMs(210); | 838 rtc::Thread::Current()->SleepMs(210); |
| 839 srtp_stat_.AddProtectRtpResult(1, err_status_fail); | 839 srtp_stat_.AddProtectRtpResult(1, srtp_err_status_fail); |
| 840 EXPECT_EQ(1U, ssrc_); | 840 EXPECT_EQ(1U, ssrc_); |
| 841 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 841 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 842 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 842 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 843 } | 843 } |
| 844 | 844 |
| 845 TEST_F(SrtpStatTest, TestUnprotectRtpError) { | 845 TEST_F(SrtpStatTest, TestUnprotectRtpError) { |
| 846 Reset(); | 846 Reset(); |
| 847 srtp_stat_.AddUnprotectRtpResult(1, err_status_ok); | 847 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_ok); |
| 848 EXPECT_EQ(0U, ssrc_); | 848 EXPECT_EQ(0U, ssrc_); |
| 849 EXPECT_EQ(-1, mode_); | 849 EXPECT_EQ(-1, mode_); |
| 850 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 850 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 851 Reset(); | 851 Reset(); |
| 852 srtp_stat_.AddUnprotectRtpResult(1, err_status_auth_fail); | 852 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_auth_fail); |
| 853 EXPECT_EQ(1U, ssrc_); | 853 EXPECT_EQ(1U, ssrc_); |
| 854 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 854 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 855 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); | 855 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); |
| 856 Reset(); | 856 Reset(); |
| 857 srtp_stat_.AddUnprotectRtpResult(1, err_status_replay_fail); | 857 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_replay_fail); |
| 858 EXPECT_EQ(1U, ssrc_); | 858 EXPECT_EQ(1U, ssrc_); |
| 859 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 859 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 860 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); | 860 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); |
| 861 Reset(); | 861 Reset(); |
| 862 rtc::Thread::Current()->SleepMs(210); | 862 rtc::Thread::Current()->SleepMs(210); |
| 863 srtp_stat_.AddUnprotectRtpResult(1, err_status_replay_old); | 863 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_replay_old); |
| 864 EXPECT_EQ(1U, ssrc_); | 864 EXPECT_EQ(1U, ssrc_); |
| 865 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 865 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 866 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); | 866 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); |
| 867 Reset(); | 867 Reset(); |
| 868 srtp_stat_.AddUnprotectRtpResult(1, err_status_fail); | 868 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_fail); |
| 869 EXPECT_EQ(1U, ssrc_); | 869 EXPECT_EQ(1U, ssrc_); |
| 870 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 870 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 871 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 871 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 872 // Within 200ms, the error will not be triggered. | 872 // Within 200ms, the error will not be triggered. |
| 873 Reset(); | 873 Reset(); |
| 874 srtp_stat_.AddUnprotectRtpResult(1, err_status_fail); | 874 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_fail); |
| 875 EXPECT_EQ(0U, ssrc_); | 875 EXPECT_EQ(0U, ssrc_); |
| 876 EXPECT_EQ(-1, mode_); | 876 EXPECT_EQ(-1, mode_); |
| 877 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 877 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 878 // Now the error will be triggered again. | 878 // Now the error will be triggered again. |
| 879 Reset(); | 879 Reset(); |
| 880 rtc::Thread::Current()->SleepMs(210); | 880 rtc::Thread::Current()->SleepMs(210); |
| 881 srtp_stat_.AddUnprotectRtpResult(1, err_status_fail); | 881 srtp_stat_.AddUnprotectRtpResult(1, srtp_err_status_fail); |
| 882 EXPECT_EQ(1U, ssrc_); | 882 EXPECT_EQ(1U, ssrc_); |
| 883 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 883 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 884 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 884 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 885 } | 885 } |
| 886 | 886 |
| 887 TEST_F(SrtpStatTest, TestProtectRtcpError) { | 887 TEST_F(SrtpStatTest, TestProtectRtcpError) { |
| 888 Reset(); | 888 Reset(); |
| 889 srtp_stat_.AddProtectRtcpResult(err_status_ok); | 889 srtp_stat_.AddProtectRtcpResult(srtp_err_status_ok); |
| 890 EXPECT_EQ(-1, mode_); | 890 EXPECT_EQ(-1, mode_); |
| 891 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 891 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 892 Reset(); | 892 Reset(); |
| 893 srtp_stat_.AddProtectRtcpResult(err_status_auth_fail); | 893 srtp_stat_.AddProtectRtcpResult(srtp_err_status_auth_fail); |
| 894 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 894 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 895 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); | 895 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); |
| 896 Reset(); | 896 Reset(); |
| 897 srtp_stat_.AddProtectRtcpResult(err_status_fail); | 897 srtp_stat_.AddProtectRtcpResult(srtp_err_status_fail); |
| 898 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 898 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 899 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 899 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 900 // Within 200ms, the error will not be triggered. | 900 // Within 200ms, the error will not be triggered. |
| 901 Reset(); | 901 Reset(); |
| 902 srtp_stat_.AddProtectRtcpResult(err_status_fail); | 902 srtp_stat_.AddProtectRtcpResult(srtp_err_status_fail); |
| 903 EXPECT_EQ(-1, mode_); | 903 EXPECT_EQ(-1, mode_); |
| 904 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 904 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 905 // Now the error will be triggered again. | 905 // Now the error will be triggered again. |
| 906 Reset(); | 906 Reset(); |
| 907 rtc::Thread::Current()->SleepMs(210); | 907 rtc::Thread::Current()->SleepMs(210); |
| 908 srtp_stat_.AddProtectRtcpResult(err_status_fail); | 908 srtp_stat_.AddProtectRtcpResult(srtp_err_status_fail); |
| 909 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); | 909 EXPECT_EQ(cricket::SrtpFilter::PROTECT, mode_); |
| 910 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 910 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 911 } | 911 } |
| 912 | 912 |
| 913 TEST_F(SrtpStatTest, TestUnprotectRtcpError) { | 913 TEST_F(SrtpStatTest, TestUnprotectRtcpError) { |
| 914 Reset(); | 914 Reset(); |
| 915 srtp_stat_.AddUnprotectRtcpResult(err_status_ok); | 915 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_ok); |
| 916 EXPECT_EQ(-1, mode_); | 916 EXPECT_EQ(-1, mode_); |
| 917 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 917 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 918 Reset(); | 918 Reset(); |
| 919 srtp_stat_.AddUnprotectRtcpResult(err_status_auth_fail); | 919 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_auth_fail); |
| 920 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 920 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 921 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); | 921 EXPECT_EQ(cricket::SrtpFilter::ERROR_AUTH, error_); |
| 922 Reset(); | 922 Reset(); |
| 923 srtp_stat_.AddUnprotectRtcpResult(err_status_replay_fail); | 923 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_replay_fail); |
| 924 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 924 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 925 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); | 925 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); |
| 926 Reset(); | 926 Reset(); |
| 927 rtc::Thread::Current()->SleepMs(210); | 927 rtc::Thread::Current()->SleepMs(210); |
| 928 srtp_stat_.AddUnprotectRtcpResult(err_status_replay_fail); | 928 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_replay_fail); |
| 929 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 929 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 930 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); | 930 EXPECT_EQ(cricket::SrtpFilter::ERROR_REPLAY, error_); |
| 931 Reset(); | 931 Reset(); |
| 932 srtp_stat_.AddUnprotectRtcpResult(err_status_fail); | 932 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_fail); |
| 933 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 933 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 934 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 934 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 935 // Within 200ms, the error will not be triggered. | 935 // Within 200ms, the error will not be triggered. |
| 936 Reset(); | 936 Reset(); |
| 937 srtp_stat_.AddUnprotectRtcpResult(err_status_fail); | 937 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_fail); |
| 938 EXPECT_EQ(-1, mode_); | 938 EXPECT_EQ(-1, mode_); |
| 939 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); | 939 EXPECT_EQ(cricket::SrtpFilter::ERROR_NONE, error_); |
| 940 // Now the error will be triggered again. | 940 // Now the error will be triggered again. |
| 941 Reset(); | 941 Reset(); |
| 942 rtc::Thread::Current()->SleepMs(210); | 942 rtc::Thread::Current()->SleepMs(210); |
| 943 srtp_stat_.AddUnprotectRtcpResult(err_status_fail); | 943 srtp_stat_.AddUnprotectRtcpResult(srtp_err_status_fail); |
| 944 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); | 944 EXPECT_EQ(cricket::SrtpFilter::UNPROTECT, mode_); |
| 945 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); | 945 EXPECT_EQ(cricket::SrtpFilter::ERROR_FAIL, error_); |
| 946 } | 946 } |
| OLD | NEW |