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 |