mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-26 15:48:09 +00:00
Merge branch 'master' of git.linphone.org:linphone into dev_msfactory
# Conflicts: # mediastreamer2
This commit is contained in:
commit
c0280bcb70
23 changed files with 498 additions and 454 deletions
|
|
@ -5954,178 +5954,178 @@ static void call_with_zrtp_configured_calling_side(void) {
|
|||
|
||||
}
|
||||
test_t call_tests[] = {
|
||||
{ "Early declined call", early_declined_call },
|
||||
{ "Call declined", call_declined },
|
||||
{ "Cancelled call", cancelled_call },
|
||||
{ "Early cancelled call", early_cancelled_call},
|
||||
{ "Call with DNS timeout", call_with_dns_time_out },
|
||||
{ "Cancelled ringing call", cancelled_ringing_call },
|
||||
{ "Call busy when calling self", call_busy_when_calling_self},
|
||||
{ "Simple call", simple_call },
|
||||
{ "Call terminated automatically by linphone_core_destroy", automatic_call_termination },
|
||||
{ "Call with http proxy", call_with_http_proxy },
|
||||
{ "Call with timeouted bye", call_with_timeouted_bye },
|
||||
{ "Direct call over IPv6", direct_call_over_ipv6},
|
||||
{ "Outbound call with multiple proxy possible", call_outbound_with_multiple_proxy },
|
||||
{ "Audio call recording", audio_call_recording_test },
|
||||
TEST_NO_TAG("Early declined call", early_declined_call),
|
||||
TEST_NO_TAG("Call declined", call_declined),
|
||||
TEST_NO_TAG("Cancelled call", cancelled_call),
|
||||
TEST_NO_TAG("Early cancelled call", early_cancelled_call),
|
||||
TEST_NO_TAG("Call with DNS timeout", call_with_dns_time_out),
|
||||
TEST_NO_TAG("Cancelled ringing call", cancelled_ringing_call),
|
||||
TEST_NO_TAG("Call busy when calling self", call_busy_when_calling_self),
|
||||
TEST_NO_TAG("Simple call", simple_call),
|
||||
TEST_NO_TAG("Call terminated automatically by linphone_core_destroy", automatic_call_termination),
|
||||
TEST_NO_TAG("Call with http proxy", call_with_http_proxy),
|
||||
TEST_NO_TAG("Call with timeouted bye", call_with_timeouted_bye),
|
||||
TEST_NO_TAG("Direct call over IPv6", direct_call_over_ipv6),
|
||||
TEST_NO_TAG("Outbound call with multiple proxy possible", call_outbound_with_multiple_proxy),
|
||||
TEST_NO_TAG("Audio call recording", audio_call_recording_test),
|
||||
#if 0 /* not yet activated because not implemented */
|
||||
{ "Multiple answers to a call", multiple_answers_call },
|
||||
TEST_NO_TAG("Multiple answers to a call", multiple_answers_call),
|
||||
#endif
|
||||
{ "Multiple answers to a call with media relay", multiple_answers_call_with_media_relay },
|
||||
{ "Call with media relay", call_with_media_relay},
|
||||
{ "Call with media relay (random ports)", call_with_media_relay_random_ports},
|
||||
{ "Simple call compatibility mode", simple_call_compatibility_mode },
|
||||
{ "Early-media call", early_media_call },
|
||||
{ "Early-media call with ringing", early_media_call_with_ringing },
|
||||
{ "Early-media call with updated media session", early_media_call_with_session_update},
|
||||
{ "Early-media call with updated codec", early_media_call_with_codec_update},
|
||||
{ "Call terminated by caller", call_terminated_by_caller },
|
||||
{ "Call without SDP", call_with_no_sdp},
|
||||
{ "Call without SDP and ACK without SDP", call_with_no_sdp_ack_without_sdp},
|
||||
{ "Call paused resumed", call_paused_resumed },
|
||||
{ "Call paused resumed with video", call_paused_resumed_with_video },
|
||||
{ "Call paused resumed with video no sdp ack", call_paused_resumed_with_no_sdp_ack},
|
||||
{ "Call paused resumed with video no sdk ack using video policy for resume offers",call_paused_resumed_with_no_sdp_ack_using_video_policy},
|
||||
{ "Call paused, updated and resumed with video no sdk ack using video policy for resume offers", call_paused_updated_resumed_with_no_sdp_ack_using_video_policy},
|
||||
{ "Call paused, updated and resumed with video no sdk ack using video policy for resume offers with accept call update", call_paused_updated_resumed_with_no_sdp_ack_using_video_policy_and_accept_call_update},
|
||||
{ "Call paused by both parties", call_paused_by_both },
|
||||
{ "Call paused resumed with loss", call_paused_resumed_with_loss },
|
||||
{ "Call paused resumed from callee", call_paused_resumed_from_callee },
|
||||
{ "SRTP call", srtp_call },
|
||||
{ "ZRTP call",zrtp_call},
|
||||
{ "ZRTP SAS call",zrtp_sas_call},
|
||||
{ "ZRTP Cipher call",zrtp_cipher_call},
|
||||
{ "DTLS SRTP call",dtls_srtp_call},
|
||||
{ "DTLS SRTP call with media relay", dtls_srtp_call_with_media_realy},
|
||||
{ "ZRTP video call",zrtp_video_call},
|
||||
{ "SRTP call with declined srtp", call_with_declined_srtp },
|
||||
{ "SRTP call paused and resumed", call_srtp_paused_and_resumed },
|
||||
{ "Call with file player", call_with_file_player},
|
||||
{ "Call with mkv file player", call_with_mkv_file_player},
|
||||
{ "Audio call with ICE no matching audio codecs", audio_call_with_ice_no_matching_audio_codecs },
|
||||
TEST_NO_TAG("Multiple answers to a call with media relay", multiple_answers_call_with_media_relay),
|
||||
TEST_NO_TAG("Call with media relay", call_with_media_relay),
|
||||
TEST_NO_TAG("Call with media relay (random ports)", call_with_media_relay_random_ports),
|
||||
TEST_NO_TAG("Simple call compatibility mode", simple_call_compatibility_mode),
|
||||
TEST_NO_TAG("Early-media call", early_media_call),
|
||||
TEST_NO_TAG("Early-media call with ringing", early_media_call_with_ringing),
|
||||
TEST_NO_TAG("Early-media call with updated media session", early_media_call_with_session_update),
|
||||
TEST_NO_TAG("Early-media call with updated codec", early_media_call_with_codec_update),
|
||||
TEST_NO_TAG("Call terminated by caller", call_terminated_by_caller),
|
||||
TEST_NO_TAG("Call without SDP", call_with_no_sdp),
|
||||
TEST_NO_TAG("Call without SDP and ACK without SDP", call_with_no_sdp_ack_without_sdp),
|
||||
TEST_NO_TAG("Call paused resumed", call_paused_resumed),
|
||||
TEST_NO_TAG("Call paused resumed with video", call_paused_resumed_with_video),
|
||||
TEST_NO_TAG("Call paused resumed with video no sdp ack", call_paused_resumed_with_no_sdp_ack),
|
||||
TEST_NO_TAG("Call paused resumed with video no sdk ack using video policy for resume offers", call_paused_resumed_with_no_sdp_ack_using_video_policy),
|
||||
TEST_NO_TAG("Call paused, updated and resumed with video no sdk ack using video policy for resume offers", call_paused_updated_resumed_with_no_sdp_ack_using_video_policy),
|
||||
TEST_NO_TAG("Call paused, updated and resumed with video no sdk ack using video policy for resume offers with accept call update", call_paused_updated_resumed_with_no_sdp_ack_using_video_policy_and_accept_call_update),
|
||||
TEST_NO_TAG("Call paused by both parties", call_paused_by_both),
|
||||
TEST_NO_TAG("Call paused resumed with loss", call_paused_resumed_with_loss),
|
||||
TEST_NO_TAG("Call paused resumed from callee", call_paused_resumed_from_callee),
|
||||
TEST_NO_TAG("SRTP call", srtp_call),
|
||||
TEST_NO_TAG("ZRTP call", zrtp_call),
|
||||
TEST_NO_TAG("ZRTP SAS call", zrtp_sas_call),
|
||||
TEST_NO_TAG("ZRTP Cipher call", zrtp_cipher_call),
|
||||
TEST_NO_TAG("DTLS SRTP call", dtls_srtp_call),
|
||||
TEST_NO_TAG("DTLS SRTP call with media relay", dtls_srtp_call_with_media_realy),
|
||||
TEST_NO_TAG("ZRTP video call", zrtp_video_call),
|
||||
TEST_NO_TAG("SRTP call with declined srtp", call_with_declined_srtp),
|
||||
TEST_NO_TAG("SRTP call paused and resumed", call_srtp_paused_and_resumed),
|
||||
TEST_NO_TAG("Call with file player", call_with_file_player),
|
||||
TEST_NO_TAG("Call with mkv file player", call_with_mkv_file_player),
|
||||
TEST_ONE_TAG("Audio call with ICE no matching audio codecs", audio_call_with_ice_no_matching_audio_codecs, "ICE"),
|
||||
#ifdef VIDEO_ENABLED
|
||||
{ "Simple video call AVPF",video_call_avpf},
|
||||
{ "Simple video call implicit AVPF both", video_call_using_policy_AVPF_implicit_caller_and_callee},
|
||||
{ "Simple video call disable implicit AVPF on callee",video_call_disable_implicit_AVPF_on_callee},
|
||||
{ "Simple video call disable implicit AVPF on caller",video_call_disable_implicit_AVPF_on_caller},
|
||||
{ "Simple video call AVPF to implicit AVPF",video_call_AVPF_to_implicit_AVPF},
|
||||
{ "Simple video call implicit AVPF to AVPF",video_call_implicit_AVPF_to_AVPF},
|
||||
{ "Simple video call",video_call},
|
||||
{ "Simple ZRTP video call",video_call_zrtp},
|
||||
{ "Simple DTLS video call",video_call_dtls},
|
||||
{ "Simple video call using policy",video_call_using_policy},
|
||||
{ "Video call using policy with callee video disabled", video_call_using_policy_with_callee_video_disabled },
|
||||
{ "Video call using policy with caller video disabled", video_call_using_policy_with_caller_video_disabled },
|
||||
{ "Video call without SDP",video_call_no_sdp},
|
||||
{ "SRTP ice video call", srtp_video_ice_call },
|
||||
{ "ZRTP ice video call", zrtp_video_ice_call },
|
||||
{ "Call with video added", call_with_video_added },
|
||||
{ "Call with video added 2", call_with_video_added_2 },
|
||||
{ "Call with video added (random ports)", call_with_video_added_random_ports },
|
||||
{ "Call with several video switches", call_with_several_video_switches },
|
||||
{ "SRTP call with several video switches", srtp_call_with_several_video_switches },
|
||||
{ "Call with video declined", call_with_declined_video},
|
||||
{ "Call with video declined despite policy", call_with_declined_video_despite_policy},
|
||||
{ "Call with video declined using policy", call_with_declined_video_using_policy},
|
||||
{ "Call with multiple early media", multiple_early_media },
|
||||
{ "Call with ICE from video to non-video", call_with_ice_video_to_novideo},
|
||||
{ "Call with ICE and video added", call_with_ice_video_added },
|
||||
{ "Call with ICE and video added 2", call_with_ice_video_added_2 },
|
||||
{ "Call with ICE and video added 3", call_with_ice_video_added_3 },
|
||||
{ "Call with ICE and video added and refused", call_with_ice_video_added_and_refused },
|
||||
{ "Call with ICE and video added with video policies to false", call_with_ice_video_added_with_video_policies_to_false },
|
||||
TEST_NO_TAG("Simple video call AVPF", video_call_avpf),
|
||||
TEST_NO_TAG("Simple video call implicit AVPF both", video_call_using_policy_AVPF_implicit_caller_and_callee),
|
||||
TEST_NO_TAG("Simple video call disable implicit AVPF on callee", video_call_disable_implicit_AVPF_on_callee),
|
||||
TEST_NO_TAG("Simple video call disable implicit AVPF on caller", video_call_disable_implicit_AVPF_on_caller),
|
||||
TEST_NO_TAG("Simple video call AVPF to implicit AVPF", video_call_AVPF_to_implicit_AVPF),
|
||||
TEST_NO_TAG("Simple video call implicit AVPF to AVPF", video_call_implicit_AVPF_to_AVPF),
|
||||
TEST_NO_TAG("Simple video call", video_call),
|
||||
TEST_NO_TAG("Simple ZRTP video call", video_call_zrtp),
|
||||
TEST_NO_TAG("Simple DTLS video call", video_call_dtls),
|
||||
TEST_NO_TAG("Simple video call using policy", video_call_using_policy),
|
||||
TEST_NO_TAG("Video call using policy with callee video disabled", video_call_using_policy_with_callee_video_disabled),
|
||||
TEST_NO_TAG("Video call using policy with caller video disabled", video_call_using_policy_with_caller_video_disabled),
|
||||
TEST_NO_TAG("Video call without SDP", video_call_no_sdp),
|
||||
TEST_ONE_TAG("SRTP ice video call", srtp_video_ice_call, "ICE"),
|
||||
TEST_ONE_TAG("ZRTP ice video call", zrtp_video_ice_call, "ICE"),
|
||||
TEST_NO_TAG("Call with video added", call_with_video_added),
|
||||
TEST_NO_TAG("Call with video added 2", call_with_video_added_2),
|
||||
TEST_NO_TAG("Call with video added (random ports)", call_with_video_added_random_ports),
|
||||
TEST_NO_TAG("Call with several video switches", call_with_several_video_switches),
|
||||
TEST_NO_TAG("SRTP call with several video switches", srtp_call_with_several_video_switches),
|
||||
TEST_NO_TAG("Call with video declined", call_with_declined_video),
|
||||
TEST_NO_TAG("Call with video declined despite policy", call_with_declined_video_despite_policy),
|
||||
TEST_NO_TAG("Call with video declined using policy", call_with_declined_video_using_policy),
|
||||
TEST_NO_TAG("Call with multiple early media", multiple_early_media),
|
||||
TEST_ONE_TAG("Call with ICE from video to non-video", call_with_ice_video_to_novideo, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added", call_with_ice_video_added, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added 2", call_with_ice_video_added_2, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added 3", call_with_ice_video_added_3, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added and refused", call_with_ice_video_added_and_refused, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added with video policies to false", call_with_ice_video_added_with_video_policies_to_false, "ICE"),
|
||||
#if ICE_WAS_WORKING_WITH_REAL_TIME_TEXT
|
||||
{ "Call with ICE, video and realtime text", call_with_ice_video_and_rtt },
|
||||
TEST_ONE_TAG("Call with ICE, video and realtime text", call_with_ice_video_and_rtt, "ICE"),
|
||||
#endif
|
||||
{ "Video call with ICE accepted using call params",video_call_ice_params},
|
||||
{ "Audio call paused with caller video policy enabled",audio_call_with_video_policy_enabled},
|
||||
{ "Video call recording (H264)", video_call_recording_h264_test },
|
||||
{ "Video call recording (VP8)", video_call_recording_vp8_test },
|
||||
{ "Snapshot", video_call_snapshot },
|
||||
{ "Video call with early media and no matching audio codecs", video_call_with_early_media_no_matching_audio_codecs },
|
||||
{ "DTLS SRTP video call",dtls_srtp_video_call},
|
||||
{ "DTLS SRTP ice video call",dtls_srtp_ice_video_call},
|
||||
{ "DTLS SRTP ice video call with relay",dtls_srtp_ice_video_call_with_relay},
|
||||
{ "Video call with limited bandwidth", video_call_limited_bandwidth},
|
||||
{ "Video call accepted in send only", accept_call_in_send_only},
|
||||
{ "Video call accepted in send only with ice", accept_call_in_send_only_with_ice},
|
||||
{ "2 Video call accepted in send only", two_accepted_call_in_send_only},
|
||||
{ "Video call with re-invite(inactive) followed by re-invite", video_call_with_re_invite_inactive_followed_by_re_invite},
|
||||
{ "Video call with re-invite(inactive) followed by re-invite(no sdp)", video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp},
|
||||
{ "SRTP Video call with re-invite(inactive) followed by re-invite", srtp_video_call_with_re_invite_inactive_followed_by_re_invite},
|
||||
{ "SRTP Video call with re-invite(inactive) followed by re-invite(no sdp)", srtp_video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp},
|
||||
{ "Classic video entry phone setup", classic_video_entry_phone_setup },
|
||||
TEST_ONE_TAG("Video call with ICE accepted using call params", video_call_ice_params, "ICE"),
|
||||
TEST_NO_TAG("Audio call paused with caller video policy enabled", audio_call_with_video_policy_enabled),
|
||||
TEST_NO_TAG("Video call recording (H264)", video_call_recording_h264_test),
|
||||
TEST_NO_TAG("Video call recording (VP8)", video_call_recording_vp8_test),
|
||||
TEST_NO_TAG("Snapshot", video_call_snapshot),
|
||||
TEST_NO_TAG("Video call with early media and no matching audio codecs", video_call_with_early_media_no_matching_audio_codecs),
|
||||
TEST_NO_TAG("DTLS SRTP video call", dtls_srtp_video_call),
|
||||
TEST_ONE_TAG("DTLS SRTP ice video call", dtls_srtp_ice_video_call, "ICE"),
|
||||
TEST_ONE_TAG("DTLS SRTP ice video call with relay", dtls_srtp_ice_video_call_with_relay, "ICE"),
|
||||
TEST_NO_TAG("Video call with limited bandwidth", video_call_limited_bandwidth),
|
||||
TEST_NO_TAG("Video call accepted in send only", accept_call_in_send_only),
|
||||
TEST_ONE_TAG("Video call accepted in send only with ice", accept_call_in_send_only_with_ice, "ICE"),
|
||||
TEST_NO_TAG("2 Video call accepted in send only", two_accepted_call_in_send_only),
|
||||
TEST_NO_TAG("Video call with re-invite(inactive) followed by re-invite", video_call_with_re_invite_inactive_followed_by_re_invite),
|
||||
TEST_NO_TAG("Video call with re-invite(inactive) followed by re-invite(no sdp)", video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp),
|
||||
TEST_NO_TAG("SRTP Video call with re-invite(inactive) followed by re-invite", srtp_video_call_with_re_invite_inactive_followed_by_re_invite),
|
||||
TEST_NO_TAG("SRTP Video call with re-invite(inactive) followed by re-invite(no sdp)", srtp_video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp),
|
||||
TEST_NO_TAG("Classic video entry phone setup", classic_video_entry_phone_setup),
|
||||
#endif
|
||||
{ "SRTP ice call", srtp_ice_call },
|
||||
{ "ZRTP ice call", zrtp_ice_call },
|
||||
{ "ZRTP ice call with relay", zrtp_ice_call_with_relay},
|
||||
{ "DTLS SRTP ice call",dtls_srtp_ice_call},
|
||||
{ "DTLS ice call with relay", dtls_ice_call_with_relay},
|
||||
{ "Call with privacy", call_with_privacy },
|
||||
{ "Call with privacy 2", call_with_privacy2 },
|
||||
{ "Call rejected because of wrong credential", call_rejected_because_wrong_credentials},
|
||||
{ "Call rejected without 403 because of wrong credential", call_rejected_without_403_because_wrong_credentials},
|
||||
{ "Call rejected without 403 because of wrong credential and no auth req cb", call_rejected_without_403_because_wrong_credentials_no_auth_req_cb},
|
||||
{ "Call with ICE", call_with_ice },
|
||||
{ "Call with ICE without SDP", call_with_ice_no_sdp },
|
||||
{ "Call with ICE (random ports)", call_with_ice_random_ports },
|
||||
{ "Call from ICE to not ICE",ice_to_not_ice},
|
||||
{ "Call from not ICE to ICE",not_ice_to_ice},
|
||||
{ "Call with custom headers",call_with_custom_headers},
|
||||
{ "Call with custom SDP attributes", call_with_custom_sdp_attributes },
|
||||
{ "Call established with rejected INFO",call_established_with_rejected_info},
|
||||
{ "Call established with rejected RE-INVITE",call_established_with_rejected_reinvite},
|
||||
{ "Call established with rejected incoming RE-INVITE", call_established_with_rejected_incoming_reinvite },
|
||||
{ "Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error},
|
||||
{ "Call established with rejected RE-INVITE with trans pending error", call_established_with_rejected_reinvite_with_trans_pending_error},
|
||||
{ "Call established with complex rejected operation",call_established_with_complex_rejected_operation},
|
||||
{ "Call established with rejected info during re-invite",call_established_with_rejected_info_during_reinvite},
|
||||
{ "Call redirected by callee", call_redirect},
|
||||
{ "Call with specified codec bitrate", call_with_specified_codec_bitrate},
|
||||
{ "Call with no audio codec", call_with_no_audio_codec},
|
||||
{ "Video call with no audio and no video codec", video_call_with_no_audio_and_no_video_codec},
|
||||
{ "Call with in-dialog UPDATE request", call_with_in_dialog_update },
|
||||
{ "Call with in-dialog codec change", call_with_in_dialog_codec_change },
|
||||
{ "Call with in-dialog codec change no sdp", call_with_in_dialog_codec_change_no_sdp },
|
||||
{ "Call with pause no SDP on resume", call_with_paused_no_sdp_on_resume },
|
||||
{ "Call with early media and no SDP in 200 Ok", call_with_early_media_and_no_sdp_in_200 },
|
||||
{ "Call with early media and no SDP in 200 Ok with video", call_with_early_media_and_no_sdp_in_200_with_video },
|
||||
{ "Call with ICE and no SDP in 200 OK", call_with_early_media_ice_and_no_sdp_in_200},
|
||||
{ "Call with custom supported tags", call_with_custom_supported_tags },
|
||||
{ "Call log from taken from asserted id",call_log_from_taken_from_p_asserted_id},
|
||||
{ "Incoming INVITE with invalid SDP",incoming_invite_with_invalid_sdp},
|
||||
{ "Outgoing INVITE with invalid ACK SDP",outgoing_invite_with_invalid_sdp},
|
||||
{ "Incoming REINVITE with invalid SDP in ACK",incoming_reinvite_with_invalid_ack_sdp},
|
||||
{ "Outgoing REINVITE with invalid SDP in ACK",outgoing_reinvite_with_invalid_ack_sdp},
|
||||
{ "Call with generic CN", call_with_generic_cn },
|
||||
{ "Call with transport change after released", call_with_transport_change_after_released },
|
||||
{ "Unsuccessful call with transport change after released",unsucessfull_call_with_transport_change_after_released},
|
||||
{ "Simple stereo call with L16", simple_stereo_call_l16 },
|
||||
{ "Simple stereo call with opus", simple_stereo_call_opus },
|
||||
{ "Simple mono call with opus", simple_mono_call_opus },
|
||||
{ "Call with FQDN in SDP", call_with_fqdn_in_sdp},
|
||||
{ "Call with RTP IO mode", call_with_rtp_io_mode },
|
||||
{ "Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback },
|
||||
{ "Call with complex late offering", call_with_complex_late_offering },
|
||||
TEST_ONE_TAG("SRTP ice call", srtp_ice_call, "ICE"),
|
||||
TEST_ONE_TAG("ZRTP ice call", zrtp_ice_call, "ICE"),
|
||||
TEST_ONE_TAG("ZRTP ice call with relay", zrtp_ice_call_with_relay, "ICE"),
|
||||
TEST_ONE_TAG("DTLS SRTP ice call", dtls_srtp_ice_call, "ICE"),
|
||||
TEST_ONE_TAG("DTLS ice call with relay", dtls_ice_call_with_relay, "ICE"),
|
||||
TEST_NO_TAG("Call with privacy", call_with_privacy),
|
||||
TEST_NO_TAG("Call with privacy 2", call_with_privacy2),
|
||||
TEST_NO_TAG("Call rejected because of wrong credential", call_rejected_because_wrong_credentials),
|
||||
TEST_NO_TAG("Call rejected without 403 because of wrong credential", call_rejected_without_403_because_wrong_credentials),
|
||||
TEST_NO_TAG("Call rejected without 403 because of wrong credential and no auth req cb", call_rejected_without_403_because_wrong_credentials_no_auth_req_cb),
|
||||
TEST_ONE_TAG("Call with ICE", call_with_ice, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE without SDP", call_with_ice_no_sdp, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE (random ports)", call_with_ice_random_ports, "ICE"),
|
||||
TEST_ONE_TAG("Call from ICE to not ICE", ice_to_not_ice, "ICE"),
|
||||
TEST_ONE_TAG("Call from not ICE to ICE", not_ice_to_ice, "ICE"),
|
||||
TEST_NO_TAG("Call with custom headers", call_with_custom_headers),
|
||||
TEST_NO_TAG("Call with custom SDP attributes", call_with_custom_sdp_attributes),
|
||||
TEST_NO_TAG("Call established with rejected INFO", call_established_with_rejected_info),
|
||||
TEST_NO_TAG("Call established with rejected RE-INVITE", call_established_with_rejected_reinvite),
|
||||
TEST_NO_TAG("Call established with rejected incoming RE-INVITE", call_established_with_rejected_incoming_reinvite),
|
||||
TEST_NO_TAG("Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error),
|
||||
TEST_NO_TAG("Call established with rejected RE-INVITE with trans pending error", call_established_with_rejected_reinvite_with_trans_pending_error),
|
||||
TEST_NO_TAG("Call established with complex rejected operation", call_established_with_complex_rejected_operation),
|
||||
TEST_NO_TAG("Call established with rejected info during re-invite", call_established_with_rejected_info_during_reinvite),
|
||||
TEST_NO_TAG("Call redirected by callee", call_redirect),
|
||||
TEST_NO_TAG("Call with specified codec bitrate", call_with_specified_codec_bitrate),
|
||||
TEST_NO_TAG("Call with no audio codec", call_with_no_audio_codec),
|
||||
TEST_NO_TAG("Video call with no audio and no video codec", video_call_with_no_audio_and_no_video_codec),
|
||||
TEST_NO_TAG("Call with in-dialog UPDATE request", call_with_in_dialog_update),
|
||||
TEST_NO_TAG("Call with in-dialog codec change", call_with_in_dialog_codec_change),
|
||||
TEST_NO_TAG("Call with in-dialog codec change no sdp", call_with_in_dialog_codec_change_no_sdp),
|
||||
TEST_NO_TAG("Call with pause no SDP on resume", call_with_paused_no_sdp_on_resume),
|
||||
TEST_NO_TAG("Call with early media and no SDP in 200 Ok", call_with_early_media_and_no_sdp_in_200),
|
||||
TEST_NO_TAG("Call with early media and no SDP in 200 Ok with video", call_with_early_media_and_no_sdp_in_200_with_video),
|
||||
TEST_ONE_TAG("Call with ICE and no SDP in 200 OK", call_with_early_media_ice_and_no_sdp_in_200, "ICE"),
|
||||
TEST_NO_TAG("Call with custom supported tags", call_with_custom_supported_tags),
|
||||
TEST_NO_TAG("Call log from taken from asserted id", call_log_from_taken_from_p_asserted_id),
|
||||
TEST_NO_TAG("Incoming INVITE with invalid SDP", incoming_invite_with_invalid_sdp),
|
||||
TEST_NO_TAG("Outgoing INVITE with invalid ACK SDP", outgoing_invite_with_invalid_sdp),
|
||||
TEST_NO_TAG("Incoming REINVITE with invalid SDP in ACK", incoming_reinvite_with_invalid_ack_sdp),
|
||||
TEST_NO_TAG("Outgoing REINVITE with invalid SDP in ACK", outgoing_reinvite_with_invalid_ack_sdp),
|
||||
TEST_NO_TAG("Call with generic CN", call_with_generic_cn),
|
||||
TEST_NO_TAG("Call with transport change after released", call_with_transport_change_after_released),
|
||||
TEST_NO_TAG("Unsuccessful call with transport change after released", unsucessfull_call_with_transport_change_after_released),
|
||||
TEST_NO_TAG("Simple stereo call with L16", simple_stereo_call_l16),
|
||||
TEST_NO_TAG("Simple stereo call with opus", simple_stereo_call_opus),
|
||||
TEST_NO_TAG("Simple mono call with opus", simple_mono_call_opus),
|
||||
TEST_NO_TAG("Call with FQDN in SDP", call_with_fqdn_in_sdp),
|
||||
TEST_NO_TAG("Call with RTP IO mode", call_with_rtp_io_mode),
|
||||
TEST_NO_TAG("Call with generic NACK RTCP feedback", call_with_generic_nack_rtcp_feedback),
|
||||
TEST_NO_TAG("Call with complex late offering", call_with_complex_late_offering),
|
||||
#ifdef CALL_LOGS_STORAGE_ENABLED
|
||||
{ "Call log working if no db set", call_logs_if_no_db_set },
|
||||
{ "Call log storage migration from rc to db", call_logs_migrate },
|
||||
{ "Call log storage in sqlite database", call_logs_sqlite_storage },
|
||||
TEST_NO_TAG("Call log working if no db set", call_logs_if_no_db_set),
|
||||
TEST_NO_TAG("Call log storage migration from rc to db", call_logs_migrate),
|
||||
TEST_NO_TAG("Call log storage in sqlite database", call_logs_sqlite_storage),
|
||||
#endif
|
||||
{ "Call with custom RTP Modifier", call_with_custom_rtp_modifier },
|
||||
{ "Call paused resumed with custom RTP Modifier", call_paused_resumed_with_custom_rtp_modifier },
|
||||
{ "Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier },
|
||||
{ "Call with network switch", call_with_network_switch },
|
||||
{ "Call with network switch in early state 1", call_with_network_switch_in_early_state_1 },
|
||||
{ "Call with network switch in early state 2", call_with_network_switch_in_early_state_2 },
|
||||
{ "Call with network switch and ICE", call_with_network_switch_and_ice },
|
||||
{ "Call with network switch with socket refresh", call_with_network_switch_and_socket_refresh },
|
||||
{ "Call with SIP and RTP independant switches", call_with_sip_and_rtp_independant_switches},
|
||||
{ "Call with rtcp-mux", call_with_rtcp_mux},
|
||||
{ "Call with rtcp-mux not accepted", call_with_rtcp_mux_not_accepted},
|
||||
{ "Call with ICE and rtcp-mux", call_with_ice_and_rtcp_mux},
|
||||
{ "Call with ICE and rtcp-mux without ICE re-invite", call_with_ice_and_rtcp_mux_without_reinvite},
|
||||
{ "call with ZRTP configured calling side only", call_with_zrtp_configured_calling_side}
|
||||
TEST_NO_TAG("Call with custom RTP Modifier", call_with_custom_rtp_modifier),
|
||||
TEST_NO_TAG("Call paused resumed with custom RTP Modifier", call_paused_resumed_with_custom_rtp_modifier),
|
||||
TEST_NO_TAG("Call record with custom RTP Modifier", call_record_with_custom_rtp_modifier),
|
||||
TEST_NO_TAG("Call with network switch", call_with_network_switch),
|
||||
TEST_NO_TAG("Call with network switch in early state 1", call_with_network_switch_in_early_state_1),
|
||||
TEST_NO_TAG("Call with network switch in early state 2", call_with_network_switch_in_early_state_2),
|
||||
TEST_ONE_TAG("Call with network switch and ICE", call_with_network_switch_and_ice, "ICE"),
|
||||
TEST_NO_TAG("Call with network switch with socket refresh", call_with_network_switch_and_socket_refresh),
|
||||
TEST_NO_TAG("Call with SIP and RTP independant switches", call_with_sip_and_rtp_independant_switches),
|
||||
TEST_NO_TAG("Call with rtcp-mux", call_with_rtcp_mux),
|
||||
TEST_NO_TAG("Call with rtcp-mux not accepted", call_with_rtcp_mux_not_accepted),
|
||||
TEST_ONE_TAG("Call with ICE and rtcp-mux", call_with_ice_and_rtcp_mux, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and rtcp-mux without ICE re-invite", call_with_ice_and_rtcp_mux_without_reinvite, "ICE"),
|
||||
TEST_NO_TAG("call with ZRTP configured calling side only", call_with_zrtp_configured_calling_side)
|
||||
};
|
||||
|
||||
test_suite_t call_test_suite = {"Single Call", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -80,8 +80,9 @@ static unsigned char curses = 0;
|
|||
|
||||
char* xml_file = "CUnitAutomated-Results.xml";
|
||||
int xml_enabled = 0;
|
||||
char * suite_name;
|
||||
char * test_name;
|
||||
char * suite_name = NULL;
|
||||
char * test_name = NULL;
|
||||
char * tag_name = NULL;
|
||||
static long max_vm_kb = 0;
|
||||
|
||||
void (*tester_printf_va)(int level, const char *format, va_list args);
|
||||
|
|
@ -93,14 +94,38 @@ void bc_tester_printf(int level, const char *format, ...) {
|
|||
va_end (args);
|
||||
}
|
||||
|
||||
int bc_tester_run_suite(test_suite_t *suite) {
|
||||
int bc_tester_run_suite(test_suite_t *suite, const char *tag_name) {
|
||||
int i;
|
||||
CU_pSuite pSuite;
|
||||
|
||||
CU_pSuite pSuite = CU_add_suite(suite->name, suite->before_all, suite->after_all);
|
||||
|
||||
for (i = 0; i < suite->nb_tests; i++) {
|
||||
if (NULL == CU_add_test(pSuite, suite->tests[i].name, suite->tests[i].func)) {
|
||||
return CU_get_error();
|
||||
if (tag_name != NULL) {
|
||||
int j;
|
||||
int nb_tests_for_tag = 0;
|
||||
for (i = 0; i < suite->nb_tests; i++) {
|
||||
for (j = 0; j < (sizeof(suite->tests[i].tags) / sizeof(suite->tests[i].tags[0])); j++) {
|
||||
if ((suite->tests[i].tags[j] != NULL) && (strcasecmp(tag_name, suite->tests[i].tags[j]) == 0)) {
|
||||
nb_tests_for_tag++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nb_tests_for_tag > 0) {
|
||||
pSuite = CU_add_suite(suite->name, suite->before_all, suite->after_all);
|
||||
for (i = 0; i < suite->nb_tests; i++) {
|
||||
for (j = 0; j < (sizeof(suite->tests[i].tags) / sizeof(suite->tests[i].tags[0])); j++) {
|
||||
if ((suite->tests[i].tags[j] != NULL) && (strcasecmp(tag_name, suite->tests[i].tags[j]) == 0)) {
|
||||
if (NULL == CU_add_test(pSuite, suite->tests[i].name, suite->tests[i].func)) {
|
||||
return CU_get_error();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pSuite = CU_add_suite(suite->name, suite->before_all, suite->after_all);
|
||||
for (i = 0; i < suite->nb_tests; i++) {
|
||||
if (NULL == CU_add_test(pSuite, suite->tests[i].name, suite->tests[i].func)) {
|
||||
return CU_get_error();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -251,7 +276,7 @@ static void test_complete_message_handler(const CU_pTest pTest, const CU_pSuite
|
|||
}
|
||||
#endif
|
||||
|
||||
int bc_tester_run_tests(const char *suite_name, const char *test_name) {
|
||||
int bc_tester_run_tests(const char *suite_name, const char *test_name, const char *tag_name) {
|
||||
int i;
|
||||
|
||||
/* initialize the CUnit test registry */
|
||||
|
|
@ -259,7 +284,7 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) {
|
|||
return CU_get_error();
|
||||
|
||||
for (i = 0; i < nb_test_suites; i++) {
|
||||
bc_tester_run_suite(test_suite[i]);
|
||||
bc_tester_run_suite(test_suite[i], tag_name);
|
||||
}
|
||||
#ifdef HAVE_CU_GET_SUITE
|
||||
CU_set_suite_start_handler(suite_start_message_handler);
|
||||
|
|
@ -284,13 +309,21 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) {
|
|||
CU_pSuite suite;
|
||||
suite=CU_get_suite(suite_name);
|
||||
if (!suite) {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find suite '%s'. Available suites are:", suite_name);
|
||||
if (tag_name != NULL) {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find suite '%s' or this suite has no tests with tag '%s'. Available suites are:", suite_name, tag_name);
|
||||
} else {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find suite '%s'. Available suites are:", suite_name);
|
||||
}
|
||||
bc_tester_list_suites();
|
||||
return -1;
|
||||
} else if (test_name) {
|
||||
CU_pTest test=CU_get_test_by_name(test_name, suite);
|
||||
if (!test) {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find test '%s' in suite '%s'. Available tests are:", test_name, suite_name);
|
||||
if (tag_name != NULL) {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find test '%s' in suite '%s' or this test is not tagged '%s'. Available tests are:", test_name, suite_name, tag_name);
|
||||
} else {
|
||||
bc_tester_printf(bc_printf_verbosity_error, "Could not find test '%s' in suite '%s'. Available tests are:", test_name, suite_name);
|
||||
}
|
||||
// do not use suite_name here, since this method is case sensitive
|
||||
bc_tester_list_tests(suite->pName);
|
||||
return -2;
|
||||
|
|
@ -464,9 +497,12 @@ int bc_tester_parse_args(int argc, char **argv, int argid)
|
|||
} else if (strcmp(argv[i],"--test")==0){
|
||||
CHECK_ARG("--test", ++i, argc);
|
||||
test_name=argv[i];
|
||||
}else if (strcmp(argv[i],"--suite")==0){
|
||||
} else if (strcmp(argv[i],"--suite")==0){
|
||||
CHECK_ARG("--suite", ++i, argc);
|
||||
suite_name=argv[i];
|
||||
} else if (strcmp(argv[i], "--tag") == 0) {
|
||||
CHECK_ARG("--tag", ++i, argc);
|
||||
tag_name = argv[i];
|
||||
} else if (strcmp(argv[i],"--list-suites")==0){
|
||||
bc_tester_list_suites();
|
||||
return 0;
|
||||
|
|
@ -518,7 +554,7 @@ int bc_tester_start(const char* prog_name) {
|
|||
free(xml_tmp_file);
|
||||
}
|
||||
|
||||
ret = bc_tester_run_tests(suite_name, test_name);
|
||||
ret = bc_tester_run_tests(suite_name, test_name, tag_name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,8 +46,16 @@ typedef int (*pre_post_function_t)(void);
|
|||
typedef struct {
|
||||
const char *name;
|
||||
test_function_t func;
|
||||
const char *tags[2];
|
||||
} test_t;
|
||||
|
||||
#define TEST_NO_TAG(name, func) \
|
||||
{ name, func, { NULL, NULL } }
|
||||
#define TEST_ONE_TAG(name, func, tag) \
|
||||
{ name, func, { tag, NULL } }
|
||||
#define TEST_TWO_TAGS(name, func, tag1, tag2) \
|
||||
{ name, func, { tag1, tag2 } }
|
||||
|
||||
typedef struct {
|
||||
const char *name; /*suite name*/
|
||||
pre_post_function_t
|
||||
|
|
@ -89,8 +97,8 @@ void bc_tester_list_suites(void);
|
|||
void bc_tester_list_tests(const char *suite_name);
|
||||
const char * bc_tester_suite_name(int suite_index);
|
||||
const char * bc_tester_test_name(const char *suite_name, int test_index);
|
||||
int bc_tester_run_suite(test_suite_t *suite);
|
||||
int bc_tester_run_tests(const char *suite_name, const char *test_name);
|
||||
int bc_tester_run_suite(test_suite_t *suite, const char *tag_name);
|
||||
int bc_tester_run_tests(const char *suite_name, const char *test_name, const char *tag_name);
|
||||
int bc_tester_suite_index(const char *suite_name);
|
||||
const char * bc_tester_current_suite_name(void);
|
||||
const char * bc_tester_current_test_name(void);
|
||||
|
|
|
|||
|
|
@ -343,12 +343,12 @@ static void call_invite_200ok_without_contact_header(void) {
|
|||
|
||||
|
||||
static test_t tests[] = {
|
||||
{ "SIP UPDATE within incoming reinvite without sdp", sip_update_within_icoming_reinvite_with_no_sdp },
|
||||
{ "Call with audio mline before video in sdp", call_with_audio_mline_before_video_in_sdp },
|
||||
{ "Call with video mline before audio in sdp", call_with_video_mline_before_audio_in_sdp },
|
||||
{ "Call with multiple audio mline in sdp", call_with_multiple_audio_mline_in_sdp },
|
||||
{ "Call with multiple video mline in sdp", call_with_multiple_video_mline_in_sdp },
|
||||
{ "Call invite 200ok without contact header", call_invite_200ok_without_contact_header }
|
||||
TEST_NO_TAG("SIP UPDATE within incoming reinvite without sdp", sip_update_within_icoming_reinvite_with_no_sdp),
|
||||
TEST_NO_TAG("Call with audio mline before video in sdp", call_with_audio_mline_before_video_in_sdp),
|
||||
TEST_NO_TAG("Call with video mline before audio in sdp", call_with_video_mline_before_audio_in_sdp),
|
||||
TEST_NO_TAG("Call with multiple audio mline in sdp", call_with_multiple_audio_mline_in_sdp),
|
||||
TEST_NO_TAG("Call with multiple video mline in sdp", call_with_multiple_video_mline_in_sdp),
|
||||
TEST_NO_TAG("Call invite 200ok without contact header", call_invite_200ok_without_contact_header)
|
||||
};
|
||||
|
||||
test_suite_t complex_sip_call_test_suite = {
|
||||
|
|
|
|||
|
|
@ -165,13 +165,13 @@ static void send_dtmf_rfc2833_opus(void) {
|
|||
}
|
||||
|
||||
test_t dtmf_tests[] = {
|
||||
{ "Send DTMF using RFC2833",send_dtmf_rfc2833},
|
||||
{ "Send DTMF using SIP INFO",send_dtmf_sip_info},
|
||||
{ "Send DTMF sequence using RFC2833",send_dtmfs_sequence_rfc2833},
|
||||
{ "Send DTMF sequence using SIP INFO",send_dtmfs_sequence_sip_info},
|
||||
{ "DTMF sequence not sent if invalid call",send_dtmfs_sequence_not_ready},
|
||||
{ "DTMF sequence canceled if call state changed",send_dtmfs_sequence_call_state_changed},
|
||||
{ "Send DTMF using RFC2833 using Opus",send_dtmf_rfc2833_opus},
|
||||
TEST_NO_TAG("Send DTMF using RFC2833",send_dtmf_rfc2833),
|
||||
TEST_NO_TAG("Send DTMF using SIP INFO",send_dtmf_sip_info),
|
||||
TEST_NO_TAG("Send DTMF sequence using RFC2833",send_dtmfs_sequence_rfc2833),
|
||||
TEST_NO_TAG("Send DTMF sequence using SIP INFO",send_dtmfs_sequence_sip_info),
|
||||
TEST_NO_TAG("DTMF sequence not sent if invalid call",send_dtmfs_sequence_not_ready),
|
||||
TEST_NO_TAG("DTMF sequence canceled if call state changed",send_dtmfs_sequence_call_state_changed),
|
||||
TEST_NO_TAG("Send DTMF using RFC2833 using Opus",send_dtmf_rfc2833_opus)
|
||||
};
|
||||
|
||||
test_suite_t dtmf_test_suite = {"DTMF", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -359,15 +359,15 @@ static void publish_without_expires(void){
|
|||
}
|
||||
|
||||
test_t event_tests[] = {
|
||||
{ "Subscribe declined" , subscribe_test_declined },
|
||||
{ "Subscribe terminated by subscriber", subscribe_test_terminated_by_subscriber },
|
||||
{ "Subscribe with custom headers", subscribe_test_with_custom_header },
|
||||
{ "Subscribe refreshed", subscribe_test_refreshed },
|
||||
{ "Subscribe manually refreshed", subscribe_test_manually_refreshed },
|
||||
{ "Subscribe terminated by notifier", subscribe_test_terminated_by_notifier },
|
||||
{ "Publish", publish_test },
|
||||
{ "Publish without expires", publish_without_expires },
|
||||
{ "Publish without automatic refresh",publish_no_auto_test }
|
||||
TEST_NO_TAG("Subscribe declined", subscribe_test_declined),
|
||||
TEST_NO_TAG("Subscribe terminated by subscriber", subscribe_test_terminated_by_subscriber),
|
||||
TEST_NO_TAG("Subscribe with custom headers", subscribe_test_with_custom_header),
|
||||
TEST_NO_TAG("Subscribe refreshed", subscribe_test_refreshed),
|
||||
TEST_NO_TAG("Subscribe manually refreshed", subscribe_test_manually_refreshed),
|
||||
TEST_NO_TAG("Subscribe terminated by notifier", subscribe_test_terminated_by_notifier),
|
||||
TEST_NO_TAG("Publish", publish_test),
|
||||
TEST_NO_TAG("Publish without expires", publish_without_expires),
|
||||
TEST_NO_TAG("Publish without automatic refresh",publish_no_auto_test)
|
||||
};
|
||||
|
||||
test_suite_t event_test_suite = {"Event", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -1082,30 +1082,30 @@ static void test_list_subscribe (void) {
|
|||
|
||||
|
||||
test_t flexisip_tests[] = {
|
||||
{ "Subscribe forking", subscribe_forking },
|
||||
{ "Message forking", message_forking },
|
||||
{ "Message forking with unreachable recipients", message_forking_with_unreachable_recipients },
|
||||
{ "Message forking with all recipients unreachable", message_forking_with_all_recipients_unreachable},
|
||||
{ "Call forking", call_forking },
|
||||
{ "Call forking cancelled", call_forking_cancelled },
|
||||
{ "Call forking declined globaly", call_forking_declined_globaly },
|
||||
{ "Call forking declined localy", call_forking_declined_localy },
|
||||
{ "Call forking with urgent reply", call_forking_with_urgent_reply },
|
||||
{ "Call forking with push notification (single)", call_forking_with_push_notification_single },
|
||||
{ "Call forking with push notification (multiple)", call_forking_with_push_notification_multiple },
|
||||
{ "Call forking not responded", call_forking_not_responded },
|
||||
{ "Early-media call forking", early_media_call_forking },
|
||||
{ "Call with sips", call_with_sips },
|
||||
{ "Call with sips not achievable", call_with_sips_not_achievable },
|
||||
{ "Call with ipv6", call_with_ipv6 },
|
||||
{ "Subscribe Notify with sipp publisher", test_subscribe_notify_with_sipp_publisher },
|
||||
{ "Subscribe Notify with sipp double publish", test_subscribe_notify_with_sipp_publisher_double_publish },
|
||||
{ "Publish/unpublish", test_publish_unpublish },
|
||||
{ "List subscribe", test_list_subscribe },
|
||||
{ "File transfer message rcs to external body client", file_transfer_message_rcs_to_external_body_client },
|
||||
{ "File transfer message external body to rcs client", file_transfer_message_external_body_to_rcs_client },
|
||||
{ "File transfer message external body to external body client", file_transfer_message_external_body_to_external_body_client },
|
||||
{ "DoS module trigger by sending a lot of chat messages", dos_module_trigger }
|
||||
TEST_NO_TAG("Subscribe forking", subscribe_forking),
|
||||
TEST_NO_TAG("Message forking", message_forking),
|
||||
TEST_NO_TAG("Message forking with unreachable recipients", message_forking_with_unreachable_recipients),
|
||||
TEST_NO_TAG("Message forking with all recipients unreachable", message_forking_with_all_recipients_unreachable),
|
||||
TEST_NO_TAG("Call forking", call_forking),
|
||||
TEST_NO_TAG("Call forking cancelled", call_forking_cancelled),
|
||||
TEST_NO_TAG("Call forking declined globaly", call_forking_declined_globaly),
|
||||
TEST_NO_TAG("Call forking declined localy", call_forking_declined_localy),
|
||||
TEST_NO_TAG("Call forking with urgent reply", call_forking_with_urgent_reply),
|
||||
TEST_NO_TAG("Call forking with push notification (single)", call_forking_with_push_notification_single),
|
||||
TEST_NO_TAG("Call forking with push notification (multiple)", call_forking_with_push_notification_multiple),
|
||||
TEST_NO_TAG("Call forking not responded", call_forking_not_responded),
|
||||
TEST_NO_TAG("Early-media call forking", early_media_call_forking),
|
||||
TEST_NO_TAG("Call with sips", call_with_sips),
|
||||
TEST_NO_TAG("Call with sips not achievable", call_with_sips_not_achievable),
|
||||
TEST_NO_TAG("Call with ipv6", call_with_ipv6),
|
||||
TEST_NO_TAG("Subscribe Notify with sipp publisher", test_subscribe_notify_with_sipp_publisher),
|
||||
TEST_NO_TAG("Subscribe Notify with sipp double publish", test_subscribe_notify_with_sipp_publisher_double_publish),
|
||||
TEST_NO_TAG("Publish/unpublish", test_publish_unpublish),
|
||||
TEST_NO_TAG("List subscribe", test_list_subscribe),
|
||||
TEST_NO_TAG("File transfer message rcs to external body client", file_transfer_message_rcs_to_external_body_client),
|
||||
TEST_NO_TAG("File transfer message external body to rcs client", file_transfer_message_external_body_to_rcs_client),
|
||||
TEST_NO_TAG("File transfer message external body to external body client", file_transfer_message_external_body_to_external_body_client),
|
||||
TEST_NO_TAG("DoS module trigger by sending a lot of chat messages", dos_module_trigger)
|
||||
};
|
||||
|
||||
test_suite_t flexisip_test_suite = {"Flexisip", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -317,11 +317,11 @@ static void upload_collected_traces(void) {
|
|||
}
|
||||
|
||||
test_t log_collection_tests[] = {
|
||||
{ "No file when disabled", collect_files_disabled},
|
||||
{ "Collect files filled when enabled", collect_files_filled},
|
||||
{ "Logs collected into small file", collect_files_small_size},
|
||||
{ "Logs collected when decreasing max size", collect_files_changing_size},
|
||||
{ "Upload collected traces", upload_collected_traces}
|
||||
TEST_NO_TAG("No file when disabled", collect_files_disabled),
|
||||
TEST_NO_TAG("Collect files filled when enabled", collect_files_filled),
|
||||
TEST_NO_TAG("Logs collected into small file", collect_files_small_size),
|
||||
TEST_NO_TAG("Logs collected when decreasing max size", collect_files_changing_size),
|
||||
TEST_NO_TAG("Upload collected traces", upload_collected_traces)
|
||||
};
|
||||
|
||||
test_suite_t log_collection_test_suite = {"LogCollection", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -1705,54 +1705,54 @@ void file_transfer_with_http_proxy(void) {
|
|||
}
|
||||
|
||||
test_t message_tests[] = {
|
||||
{"Text message", text_message},
|
||||
{"Text message within call dialog", text_message_within_call_dialog},
|
||||
{"Text message with credentials from auth callback", text_message_with_credential_from_auth_callback},
|
||||
{"Text message with privacy", text_message_with_privacy},
|
||||
{"Text message compatibility mode", text_message_compatibility_mode},
|
||||
{"Text message with ack", text_message_with_ack},
|
||||
{"Text message with send error", text_message_with_send_error},
|
||||
{"Text message with external body", text_message_with_external_body},
|
||||
{"Transfer message", transfer_message},
|
||||
{"Transfer message with http proxy", file_transfer_with_http_proxy},
|
||||
{"Transfer message with upload io error", transfer_message_with_upload_io_error},
|
||||
{"Transfer message with download io error", transfer_message_with_download_io_error},
|
||||
{"Transfer message upload cancelled", transfer_message_upload_cancelled},
|
||||
{"Transfer message download cancelled", transfer_message_download_cancelled},
|
||||
{"Transfer message using external body url", file_transfer_using_external_body_url},
|
||||
{"Transfer 2 messages simultaneously", file_transfer_2_messages_simultaneously},
|
||||
{"Text message denied", text_message_denied},
|
||||
{"Info message", info_message},
|
||||
{"Info message with body", info_message_with_body},
|
||||
{"IsComposing notification", is_composing_notification},
|
||||
TEST_NO_TAG("Text message", text_message),
|
||||
TEST_NO_TAG("Text message within call dialog", text_message_within_call_dialog),
|
||||
TEST_NO_TAG("Text message with credentials from auth callback", text_message_with_credential_from_auth_callback),
|
||||
TEST_NO_TAG("Text message with privacy", text_message_with_privacy),
|
||||
TEST_NO_TAG("Text message compatibility mode", text_message_compatibility_mode),
|
||||
TEST_NO_TAG("Text message with ack", text_message_with_ack),
|
||||
TEST_NO_TAG("Text message with send error", text_message_with_send_error),
|
||||
TEST_NO_TAG("Text message with external body", text_message_with_external_body),
|
||||
TEST_NO_TAG("Transfer message", transfer_message),
|
||||
TEST_NO_TAG("Transfer message with http proxy", file_transfer_with_http_proxy),
|
||||
TEST_NO_TAG("Transfer message with upload io error", transfer_message_with_upload_io_error),
|
||||
TEST_NO_TAG("Transfer message with download io error", transfer_message_with_download_io_error),
|
||||
TEST_NO_TAG("Transfer message upload cancelled", transfer_message_upload_cancelled),
|
||||
TEST_NO_TAG("Transfer message download cancelled", transfer_message_download_cancelled),
|
||||
TEST_NO_TAG("Transfer message using external body url", file_transfer_using_external_body_url),
|
||||
TEST_NO_TAG("Transfer 2 messages simultaneously", file_transfer_2_messages_simultaneously),
|
||||
TEST_NO_TAG("Text message denied", text_message_denied),
|
||||
TEST_NO_TAG("Info message", info_message),
|
||||
TEST_NO_TAG("Info message with body", info_message_with_body),
|
||||
TEST_NO_TAG("IsComposing notification", is_composing_notification),
|
||||
#ifdef HAVE_LIME
|
||||
{"Lime text message", lime_text_message},
|
||||
{"Lime text message to non lime", lime_text_message_to_non_lime},
|
||||
{"Lime transfer message", lime_transfer_message},
|
||||
{"Lime transfer message without encryption", lime_transfer_message_without_encryption},
|
||||
{"Lime unitary", lime_unit},
|
||||
TEST_NO_TAG("Lime text message", lime_text_message),
|
||||
TEST_NO_TAG("Lime text message to non lime", lime_text_message_to_non_lime),
|
||||
TEST_NO_TAG("Lime transfer message", lime_transfer_message),
|
||||
TEST_NO_TAG("Lime transfer message without encryption", lime_transfer_message_without_encryption),
|
||||
TEST_NO_TAG("Lime unitary", lime_unit),
|
||||
#endif /* HAVE_LIME */
|
||||
#ifdef MSG_STORAGE_ENABLED
|
||||
{"Database migration", database_migration},
|
||||
{"History range", history_range},
|
||||
{"History count", history_count},
|
||||
TEST_NO_TAG("Database migration", database_migration),
|
||||
TEST_NO_TAG("History range", history_range),
|
||||
TEST_NO_TAG("History count", history_count),
|
||||
#endif
|
||||
{"Text status after destroying chat room", text_status_after_destroying_chat_room},
|
||||
{"Transfer not sent if invalid url", file_transfer_not_sent_if_invalid_url},
|
||||
{"Transfer not sent if host not found", file_transfer_not_sent_if_host_not_found},
|
||||
{"Transfer not sent if url moved permanently", file_transfer_not_sent_if_url_moved_permanently},
|
||||
{"Transfer io error after destroying chatroom", file_transfer_io_error_after_destroying_chatroom},
|
||||
{"Real Time Text message", real_time_text_message},
|
||||
{"Real Time Text conversation", real_time_text_conversation},
|
||||
{"Real Time Text without audio", real_time_text_without_audio},
|
||||
{"Real Time Text with srtp", real_time_text_srtp},
|
||||
{"Real Time Text with ice", real_time_text_ice},
|
||||
{"Real Time Text message compatibility crlf", real_time_text_message_compat_crlf},
|
||||
{"Real Time Text message compatibility lf", real_time_text_message_compat_lf},
|
||||
{"Real Time Text message with accented characters", real_time_text_message_accented_chars},
|
||||
{"Real Time Text offer answer with different payload numbers (sender side)", real_time_text_message_different_text_codecs_payload_numbers_sender_side},
|
||||
{"Real Time Text offer answer with different payload numbers (receiver side)", real_time_text_message_different_text_codecs_payload_numbers_receiver_side},
|
||||
{"Real Time Text copy paste", real_time_text_copy_paste},
|
||||
TEST_NO_TAG("Text status after destroying chat room", text_status_after_destroying_chat_room),
|
||||
TEST_NO_TAG("Transfer not sent if invalid url", file_transfer_not_sent_if_invalid_url),
|
||||
TEST_NO_TAG("Transfer not sent if host not found", file_transfer_not_sent_if_host_not_found),
|
||||
TEST_NO_TAG("Transfer not sent if url moved permanently", file_transfer_not_sent_if_url_moved_permanently),
|
||||
TEST_NO_TAG("Transfer io error after destroying chatroom", file_transfer_io_error_after_destroying_chatroom),
|
||||
TEST_NO_TAG("Real Time Text message", real_time_text_message),
|
||||
TEST_NO_TAG("Real Time Text conversation", real_time_text_conversation),
|
||||
TEST_NO_TAG("Real Time Text without audio", real_time_text_without_audio),
|
||||
TEST_NO_TAG("Real Time Text with srtp", real_time_text_srtp),
|
||||
TEST_NO_TAG("Real Time Text with ice", real_time_text_ice),
|
||||
TEST_NO_TAG("Real Time Text message compatibility crlf", real_time_text_message_compat_crlf),
|
||||
TEST_NO_TAG("Real Time Text message compatibility lf", real_time_text_message_compat_lf),
|
||||
TEST_NO_TAG("Real Time Text message with accented characters", real_time_text_message_accented_chars),
|
||||
TEST_NO_TAG("Real Time Text offer answer with different payload numbers (sender side)", real_time_text_message_different_text_codecs_payload_numbers_sender_side),
|
||||
TEST_NO_TAG("Real Time Text offer answer with different payload numbers (receiver side)", real_time_text_message_different_text_codecs_payload_numbers_receiver_side),
|
||||
TEST_NO_TAG("Real Time Text copy paste", real_time_text_copy_paste),
|
||||
};
|
||||
|
||||
test_suite_t message_test_suite = {
|
||||
|
|
|
|||
|
|
@ -825,22 +825,22 @@ void eject_from_3_participants_remote_conference(void) {
|
|||
}
|
||||
|
||||
test_t multi_call_tests[] = {
|
||||
{ "Call waiting indication", call_waiting_indication },
|
||||
{ "Call waiting indication with privacy", call_waiting_indication_with_privacy },
|
||||
{ "Incoming call accepted when outgoing call in progress", incoming_call_accepted_when_outgoing_call_in_progress},
|
||||
{ "Incoming call accepted when outgoing call in outgoing ringing", incoming_call_accepted_when_outgoing_call_in_outgoing_ringing},
|
||||
{ "Incoming call accepted when outgoing call in outgoing ringing early media", incoming_call_accepted_when_outgoing_call_in_outgoing_ringing_early_media},
|
||||
{ "Simple conference", simple_conference },
|
||||
{ "Simple conference with ICE", simple_conference_with_ice},
|
||||
{ "Simple ZRTP conference with ICE",simple_zrtp_conference_with_ice},
|
||||
{ "Eject from 3 participants conference", eject_from_3_participants_local_conference },
|
||||
{ "Eject from 4 participants conference", eject_from_4_participants_conference },
|
||||
{ "Simple call transfer", simple_call_transfer },
|
||||
{ "Unattended call transfer", unattended_call_transfer },
|
||||
{ "Unattended call transfer with error", unattended_call_transfer_with_error },
|
||||
{ "Call transfer existing call outgoing call", call_transfer_existing_call_outgoing_call },
|
||||
{ "Simple remote conference", simple_remote_conference },
|
||||
{ "Eject from 3 participants in remote conference", eject_from_3_participants_remote_conference }
|
||||
TEST_NO_TAG("Call waiting indication", call_waiting_indication),
|
||||
TEST_NO_TAG("Call waiting indication with privacy", call_waiting_indication_with_privacy),
|
||||
TEST_NO_TAG("Incoming call accepted when outgoing call in progress", incoming_call_accepted_when_outgoing_call_in_progress),
|
||||
TEST_NO_TAG("Incoming call accepted when outgoing call in outgoing ringing", incoming_call_accepted_when_outgoing_call_in_outgoing_ringing),
|
||||
TEST_NO_TAG("Incoming call accepted when outgoing call in outgoing ringing early media", incoming_call_accepted_when_outgoing_call_in_outgoing_ringing_early_media),
|
||||
TEST_NO_TAG("Simple conference", simple_conference),
|
||||
TEST_ONE_TAG("Simple conference with ICE", simple_conference_with_ice, "ICE"),
|
||||
TEST_ONE_TAG("Simple ZRTP conference with ICE", simple_zrtp_conference_with_ice, "ICE"),
|
||||
TEST_NO_TAG("Eject from 3 participants conference", eject_from_3_participants_local_conference),
|
||||
TEST_NO_TAG("Eject from 4 participants conference", eject_from_4_participants_conference),
|
||||
TEST_NO_TAG("Simple call transfer", simple_call_transfer),
|
||||
TEST_NO_TAG("Unattended call transfer", unattended_call_transfer),
|
||||
TEST_NO_TAG("Unattended call transfer with error", unattended_call_transfer_with_error),
|
||||
TEST_NO_TAG("Call transfer existing call outgoing call", call_transfer_existing_call_outgoing_call),
|
||||
TEST_NO_TAG("Simple remote conference", simple_remote_conference),
|
||||
TEST_NO_TAG("Eject from 3 participants in remote conference", eject_from_3_participants_remote_conference)
|
||||
};
|
||||
|
||||
test_suite_t multi_call_test_suite = {"Multi call", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -244,13 +244,13 @@ static void early_media_with_multicast_video(void) {
|
|||
#endif
|
||||
|
||||
test_t multicast_call_tests[] = {
|
||||
{ "Multicast audio call",call_multicast},
|
||||
{ "Multicast call with pause/resume",multicast_audio_with_pause_resume},
|
||||
{ "Early media multicast audio call",early_media_with_multicast_audio},
|
||||
{ "Unicast incoming call with multicast activated",unicast_incoming_with_multicast_audio_on},
|
||||
TEST_NO_TAG("Multicast audio call",call_multicast),
|
||||
TEST_NO_TAG("Multicast call with pause/resume",multicast_audio_with_pause_resume),
|
||||
TEST_NO_TAG("Early media multicast audio call",early_media_with_multicast_audio),
|
||||
TEST_NO_TAG("Unicast incoming call with multicast activated",unicast_incoming_with_multicast_audio_on),
|
||||
#ifdef VIDEO_ENABLED
|
||||
{ "Multicast video call",call_multicast_video},
|
||||
{ "Early media multicast video call",early_media_with_multicast_video},
|
||||
TEST_NO_TAG("Multicast video call",call_multicast_video),
|
||||
TEST_NO_TAG("Early media multicast video call",early_media_with_multicast_video),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -489,55 +489,55 @@ end:
|
|||
#endif
|
||||
|
||||
static test_t offeranswer_tests[] = {
|
||||
{ "Start with no config", start_with_no_config },
|
||||
{ "Call failed because of codecs", call_failed_because_of_codecs },
|
||||
{ "Simple call with different codec mappings", simple_call_with_different_codec_mappings},
|
||||
{ "AVP to AVP call", avp_to_avp_call },
|
||||
{ "AVP to AVPF call", avp_to_avpf_call },
|
||||
{ "AVP to SAVP call", avp_to_savp_call },
|
||||
{ "AVP to SAVPF call", avp_to_savpf_call },
|
||||
{ "AVPF to AVP call", avpf_to_avp_call },
|
||||
{ "AVPF to AVPF call", avpf_to_avpf_call },
|
||||
{ "AVPF to SAVP call", avpf_to_savp_call },
|
||||
{ "AVPF to SAVPF call", avpf_to_savpf_call },
|
||||
{ "SAVP to AVP call", savp_to_avp_call },
|
||||
{ "SAVP to AVPF call", savp_to_avpf_call },
|
||||
{ "SAVP to SAVP call", savp_to_savp_call },
|
||||
{ "SAVP to SAVPF call", savp_to_savpf_call },
|
||||
{ "SAVPF to AVP call", savpf_to_avp_call },
|
||||
{ "SAVPF to AVPF call", savpf_to_avpf_call },
|
||||
{ "SAVPF to SAVP call", savpf_to_savp_call },
|
||||
{ "SAVPF to SAVPF call", savpf_to_savpf_call },
|
||||
{ "SAVPF/DTLS to SAVPF/DTLS call", savpf_dtls_to_savpf_dtls_call},
|
||||
{ "SAVPF/DTLS to SAVPF/DTLS encryption mandatory call", savpf_dtls_to_savpf_dtls_encryption_mandatory_call},
|
||||
{ "SAVPF/DTLS to SAVPF call", savpf_dtls_to_savpf_call},
|
||||
{ "SAVPF/DTLS to SAVPF encryption mandatory call", savpf_dtls_to_savpf_encryption_mandatory_call},
|
||||
{ "SAVPF/DTLS to AVPF call", savpf_dtls_to_avpf_call},
|
||||
TEST_NO_TAG("Start with no config", start_with_no_config),
|
||||
TEST_NO_TAG("Call failed because of codecs", call_failed_because_of_codecs),
|
||||
TEST_NO_TAG("Simple call with different codec mappings", simple_call_with_different_codec_mappings),
|
||||
TEST_NO_TAG("AVP to AVP call", avp_to_avp_call),
|
||||
TEST_NO_TAG("AVP to AVPF call", avp_to_avpf_call),
|
||||
TEST_NO_TAG("AVP to SAVP call", avp_to_savp_call),
|
||||
TEST_NO_TAG("AVP to SAVPF call", avp_to_savpf_call),
|
||||
TEST_NO_TAG("AVPF to AVP call", avpf_to_avp_call),
|
||||
TEST_NO_TAG("AVPF to AVPF call", avpf_to_avpf_call),
|
||||
TEST_NO_TAG("AVPF to SAVP call", avpf_to_savp_call),
|
||||
TEST_NO_TAG("AVPF to SAVPF call", avpf_to_savpf_call),
|
||||
TEST_NO_TAG("SAVP to AVP call", savp_to_avp_call),
|
||||
TEST_NO_TAG("SAVP to AVPF call", savp_to_avpf_call),
|
||||
TEST_NO_TAG("SAVP to SAVP call", savp_to_savp_call),
|
||||
TEST_NO_TAG("SAVP to SAVPF call", savp_to_savpf_call),
|
||||
TEST_NO_TAG("SAVPF to AVP call", savpf_to_avp_call),
|
||||
TEST_NO_TAG("SAVPF to AVPF call", savpf_to_avpf_call),
|
||||
TEST_NO_TAG("SAVPF to SAVP call", savpf_to_savp_call),
|
||||
TEST_NO_TAG("SAVPF to SAVPF call", savpf_to_savpf_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF/DTLS call", savpf_dtls_to_savpf_dtls_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF/DTLS encryption mandatory call", savpf_dtls_to_savpf_dtls_encryption_mandatory_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF call", savpf_dtls_to_savpf_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF encryption mandatory call", savpf_dtls_to_savpf_encryption_mandatory_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to AVPF call", savpf_dtls_to_avpf_call),
|
||||
#ifdef VIDEO_ENABLED
|
||||
{ "AVP to AVP video call", avp_to_avp_video_call },
|
||||
{ "AVP to AVPF video call", avp_to_avpf_video_call },
|
||||
{ "AVP to SAVP video call", avp_to_savp_video_call },
|
||||
{ "AVP to SAVPF video call", avp_to_savpf_video_call },
|
||||
{ "AVPF to AVP video call", avpf_to_avp_video_call },
|
||||
{ "AVPF to AVPF video call", avpf_to_avpf_video_call },
|
||||
{ "AVPF to SAVP video call", avpf_to_savp_video_call },
|
||||
{ "AVPF to SAVPF video call", avpf_to_savpf_video_call },
|
||||
{ "SAVP to AVP video call", savp_to_avp_video_call },
|
||||
{ "SAVP to AVPF video call", savp_to_avpf_video_call },
|
||||
{ "SAVP to SAVP video call", savp_to_savp_video_call },
|
||||
{ "SAVP to SAVPF video call", savp_to_savpf_video_call },
|
||||
{ "SAVPF to AVP video call", savpf_to_avp_video_call },
|
||||
{ "SAVPF to AVPF video call", savpf_to_avpf_video_call },
|
||||
{ "SAVPF to SAVP video call", savpf_to_savp_video_call },
|
||||
{ "SAVPF to SAVPF video call", savpf_to_savpf_video_call },
|
||||
{ "SAVPF/DTLS to SAVPF/DTLS video call", savpf_dtls_to_savpf_dtls_video_call},
|
||||
{ "SAVPF/DTLS to SAVPF/DTLS encryption mandatory video call", savpf_dtls_to_savpf_dtls_encryption_mandatory_video_call},
|
||||
{ "SAVPF/DTLS to SAVPF video call", savpf_dtls_to_savpf_video_call},
|
||||
{ "SAVPF/DTLS to SAVPF encryption mandatory video call", savpf_dtls_to_savpf_encryption_mandatory_video_call},
|
||||
{ "SAVPF/DTLS to AVPF call", savpf_dtls_to_avpf_video_call},
|
||||
TEST_NO_TAG("AVP to AVP video call", avp_to_avp_video_call),
|
||||
TEST_NO_TAG("AVP to AVPF video call", avp_to_avpf_video_call),
|
||||
TEST_NO_TAG("AVP to SAVP video call", avp_to_savp_video_call),
|
||||
TEST_NO_TAG("AVP to SAVPF video call", avp_to_savpf_video_call),
|
||||
TEST_NO_TAG("AVPF to AVP video call", avpf_to_avp_video_call),
|
||||
TEST_NO_TAG("AVPF to AVPF video call", avpf_to_avpf_video_call),
|
||||
TEST_NO_TAG("AVPF to SAVP video call", avpf_to_savp_video_call),
|
||||
TEST_NO_TAG("AVPF to SAVPF video call", avpf_to_savpf_video_call),
|
||||
TEST_NO_TAG("SAVP to AVP video call", savp_to_avp_video_call),
|
||||
TEST_NO_TAG("SAVP to AVPF video call", savp_to_avpf_video_call),
|
||||
TEST_NO_TAG("SAVP to SAVP video call", savp_to_savp_video_call),
|
||||
TEST_NO_TAG("SAVP to SAVPF video call", savp_to_savpf_video_call),
|
||||
TEST_NO_TAG("SAVPF to AVP video call", savpf_to_avp_video_call),
|
||||
TEST_NO_TAG("SAVPF to AVPF video call", savpf_to_avpf_video_call),
|
||||
TEST_NO_TAG("SAVPF to SAVP video call", savpf_to_savp_video_call),
|
||||
TEST_NO_TAG("SAVPF to SAVPF video call", savpf_to_savpf_video_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF/DTLS video call", savpf_dtls_to_savpf_dtls_video_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF/DTLS encryption mandatory video call", savpf_dtls_to_savpf_dtls_encryption_mandatory_video_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF video call", savpf_dtls_to_savpf_video_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to SAVPF encryption mandatory video call", savpf_dtls_to_savpf_encryption_mandatory_video_call),
|
||||
TEST_NO_TAG("SAVPF/DTLS to AVPF call", savpf_dtls_to_avpf_video_call),
|
||||
|
||||
{ "Compatible AVPF features", compatible_avpf_features },
|
||||
{ "Incompatible AVPF features", incompatible_avpf_features },
|
||||
TEST_NO_TAG("Compatible AVPF features", compatible_avpf_features),
|
||||
TEST_NO_TAG("Incompatible AVPF features", incompatible_avpf_features)
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -98,9 +98,9 @@ static void sintel_trailer_opus_vp8_test(void) {
|
|||
}
|
||||
|
||||
test_t player_tests[] = {
|
||||
{ "Sintel trailer opus/h264" , sintel_trailer_opus_h264_test },
|
||||
{ "Sintel trailer pcmu/h264" , sintel_trailer_pcmu_h264_test },
|
||||
{ "Sintel trailer opus/VP8" , sintel_trailer_opus_vp8_test }
|
||||
TEST_NO_TAG("Sintel trailer opus/h264", sintel_trailer_opus_h264_test),
|
||||
TEST_NO_TAG("Sintel trailer pcmu/h264", sintel_trailer_pcmu_h264_test),
|
||||
TEST_NO_TAG("Sintel trailer opus/VP8", sintel_trailer_opus_vp8_test)
|
||||
};
|
||||
|
||||
test_suite_t player_test_suite = {"Player", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -774,22 +774,22 @@ static void test_presence_list_subscription_expire(void) {
|
|||
|
||||
|
||||
test_t presence_tests[] = {
|
||||
{ "Simple Subscribe", simple_subscribe },
|
||||
{ "Simple Publish", simple_publish },
|
||||
{ "Simple Publish with expires", publish_with_expires },
|
||||
/*{ "Call with presence", call_with_presence },*/
|
||||
{ "Unsubscribe while subscribing", unsubscribe_while_subscribing },
|
||||
{ "Presence information", presence_information },
|
||||
{ "App managed presence failure", subscribe_failure_handle_by_app },
|
||||
{ "Presence SUBSCRIBE forked", subscribe_presence_forked },
|
||||
{ "Presence SUBSCRIBE expired", subscribe_presence_expired },
|
||||
TEST_NO_TAG("Simple Subscribe", simple_subscribe),
|
||||
TEST_NO_TAG("Simple Publish", simple_publish),
|
||||
TEST_NO_TAG("Simple Publish with expires", publish_with_expires),
|
||||
/*TEST_NO_TAG("Call with presence", call_with_presence),*/
|
||||
TEST_NO_TAG("Unsubscribe while subscribing", unsubscribe_while_subscribing),
|
||||
TEST_NO_TAG("Presence information", presence_information),
|
||||
TEST_NO_TAG("App managed presence failure", subscribe_failure_handle_by_app),
|
||||
TEST_NO_TAG("Presence SUBSCRIBE forked", subscribe_presence_forked),
|
||||
TEST_NO_TAG("Presence SUBSCRIBE expired", subscribe_presence_expired),
|
||||
#if USE_PRESENCE_SERVER
|
||||
{ "Subscribe with late publish", test_subscribe_notify_publish },
|
||||
{ "Forked subscribe with late publish", test_forked_subscribe_notify_publish },
|
||||
TEST_NO_TAG("Subscribe with late publish", test_subscribe_notify_publish),
|
||||
TEST_NO_TAG("Forked subscribe with late publish", test_forked_subscribe_notify_publish),
|
||||
#endif
|
||||
{ "Presence list", test_presence_list },
|
||||
{ "Presence list (subscribe before publish)", test_presence_list_subscribe_before_publish },
|
||||
{ "Presence list, subscription expiration",test_presence_list_subscription_expire}
|
||||
TEST_NO_TAG("Presence list", test_presence_list),
|
||||
TEST_NO_TAG("Presence list (subscribe before publish)", test_presence_list_subscribe_before_publish),
|
||||
TEST_NO_TAG("Presence list, subscription expiration",test_presence_list_subscription_expire)
|
||||
};
|
||||
|
||||
test_suite_t presence_test_suite = {"Presence", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -173,10 +173,10 @@ static void sip_uri_normalization(void) {
|
|||
}
|
||||
|
||||
test_t proxy_config_tests[] = {
|
||||
{ "Phone normalization without proxy", phone_normalization_without_proxy },
|
||||
{ "Phone normalization with proxy", phone_normalization_with_proxy },
|
||||
{ "Phone normalization with dial escape plus", phone_normalization_with_dial_escape_plus },
|
||||
{ "SIP URI normalization", sip_uri_normalization },
|
||||
TEST_NO_TAG("Phone normalization without proxy", phone_normalization_without_proxy),
|
||||
TEST_NO_TAG("Phone normalization with proxy", phone_normalization_with_proxy),
|
||||
TEST_NO_TAG("Phone normalization with dial escape plus", phone_normalization_with_dial_escape_plus),
|
||||
TEST_NO_TAG("SIP URI normalization", sip_uri_normalization)
|
||||
};
|
||||
|
||||
test_suite_t proxy_config_test_suite = {"Proxy config", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -424,17 +424,17 @@ static void quality_reporting_interval_report_video_and_rtt(void) {
|
|||
#endif
|
||||
|
||||
test_t quality_reporting_tests[] = {
|
||||
{ "Not used if no config", quality_reporting_not_used_without_config},
|
||||
{ "Call term session report not sent if call did not start", quality_reporting_not_sent_if_call_not_started},
|
||||
{ "Call term session report not sent if low bandwidth", quality_reporting_not_sent_if_low_bandwidth},
|
||||
{ "Call term session report invalid if missing mandatory fields", quality_reporting_invalid_report},
|
||||
{ "Call term session report sent if call ended normally", quality_reporting_at_call_termination},
|
||||
{ "Interval report if interval is configured", quality_reporting_interval_report},
|
||||
TEST_NO_TAG("Not used if no config", quality_reporting_not_used_without_config),
|
||||
TEST_NO_TAG("Call term session report not sent if call did not start", quality_reporting_not_sent_if_call_not_started),
|
||||
TEST_NO_TAG("Call term session report not sent if low bandwidth", quality_reporting_not_sent_if_low_bandwidth),
|
||||
TEST_NO_TAG("Call term session report invalid if missing mandatory fields", quality_reporting_invalid_report),
|
||||
TEST_NO_TAG("Call term session report sent if call ended normally", quality_reporting_at_call_termination),
|
||||
TEST_NO_TAG("Interval report if interval is configured", quality_reporting_interval_report),
|
||||
#ifdef VIDEO_ENABLED
|
||||
{ "Interval report if interval is configured with video and realtime text", quality_reporting_interval_report_video_and_rtt},
|
||||
{ "Session report sent if video stopped during call", quality_reporting_session_report_if_video_stopped},
|
||||
TEST_NO_TAG("Interval report if interval is configured with video and realtime text", quality_reporting_interval_report_video_and_rtt),
|
||||
TEST_NO_TAG("Session report sent if video stopped during call", quality_reporting_session_report_if_video_stopped),
|
||||
#endif
|
||||
{ "Sent using custom route", quality_reporting_sent_using_custom_route},
|
||||
TEST_NO_TAG("Sent using custom route", quality_reporting_sent_using_custom_route)
|
||||
};
|
||||
|
||||
test_suite_t quality_reporting_test_suite = {"QualityReporting", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -900,40 +900,40 @@ static void redirect(void){
|
|||
}
|
||||
|
||||
test_t register_tests[] = {
|
||||
{ "Simple register", simple_register },
|
||||
{ "Simple register unregister", simple_unregister },
|
||||
{ "TCP register", simple_tcp_register },
|
||||
{ "Register with custom headers", register_with_custom_headers },
|
||||
{ "TCP register compatibility mode", simple_tcp_register_compatibility_mode },
|
||||
{ "TLS register", simple_tls_register },
|
||||
{ "TLS register with alt. name certificate", tls_alt_name_register },
|
||||
{ "TLS register with wildcard certificate", tls_wildcard_register },
|
||||
{ "TLS certificate not verified",tls_certificate_failure},
|
||||
{ "TLS with non tls server",tls_with_non_tls_server},
|
||||
{ "Simple authenticated register", simple_authenticated_register },
|
||||
{ "Ha1 authenticated register", ha1_authenticated_register },
|
||||
{ "Digest auth without initial credentials", authenticated_register_with_no_initial_credentials },
|
||||
{ "Digest auth with wrong credentials", authenticated_register_with_wrong_credentials },
|
||||
{ "Digest auth with wrong credentials, check if registration attempts are stopped", authenticated_register_with_wrong_credentials_2 },
|
||||
{ "Digest auth with wrong credentials without 403", authenticated_register_with_wrong_credentials_without_403},
|
||||
{ "Authenticated register with wrong late credentials", authenticated_register_with_wrong_late_credentials},
|
||||
{ "Authenticated register with late credentials", authenticated_register_with_late_credentials },
|
||||
{ "Authenticated register with provided credentials", authenticated_register_with_provided_credentials },
|
||||
{ "Register with refresh", simple_register_with_refresh },
|
||||
{ "Authenticated register with refresh", simple_auth_register_with_refresh },
|
||||
{ "Register with refresh and send error", register_with_refresh_with_send_error },
|
||||
{ "Multi account", multiple_proxy },
|
||||
{ "Transport changes", transport_change },
|
||||
{ "Proxy transport changes", proxy_transport_change},
|
||||
{ "Proxy transport changes with wrong address at first", proxy_transport_change_with_wrong_port},
|
||||
{ "Proxy transport changes with wrong address, giving up",proxy_transport_change_with_wrong_port_givin_up},
|
||||
{ "Change expires", change_expires},
|
||||
{ "Network state change", network_state_change },
|
||||
{ "Io recv error", io_recv_error },
|
||||
{ "Io recv error with recovery", io_recv_error_retry_immediatly},
|
||||
{ "Io recv error with late recovery", io_recv_error_late_recovery},
|
||||
{ "Io recv error without active registration", io_recv_error_without_active_register},
|
||||
{ "Simple redirect", redirect}
|
||||
TEST_NO_TAG("Simple register", simple_register),
|
||||
TEST_NO_TAG("Simple register unregister", simple_unregister),
|
||||
TEST_NO_TAG("TCP register", simple_tcp_register),
|
||||
TEST_NO_TAG("Register with custom headers", register_with_custom_headers),
|
||||
TEST_NO_TAG("TCP register compatibility mode", simple_tcp_register_compatibility_mode),
|
||||
TEST_NO_TAG("TLS register", simple_tls_register),
|
||||
TEST_NO_TAG("TLS register with alt. name certificate", tls_alt_name_register),
|
||||
TEST_NO_TAG("TLS register with wildcard certificate", tls_wildcard_register),
|
||||
TEST_NO_TAG("TLS certificate not verified",tls_certificate_failure),
|
||||
TEST_NO_TAG("TLS with non tls server",tls_with_non_tls_server),
|
||||
TEST_NO_TAG("Simple authenticated register", simple_authenticated_register),
|
||||
TEST_NO_TAG("Ha1 authenticated register", ha1_authenticated_register),
|
||||
TEST_NO_TAG("Digest auth without initial credentials", authenticated_register_with_no_initial_credentials),
|
||||
TEST_NO_TAG("Digest auth with wrong credentials", authenticated_register_with_wrong_credentials),
|
||||
TEST_NO_TAG("Digest auth with wrong credentials, check if registration attempts are stopped", authenticated_register_with_wrong_credentials_2),
|
||||
TEST_NO_TAG("Digest auth with wrong credentials without 403", authenticated_register_with_wrong_credentials_without_403),
|
||||
TEST_NO_TAG("Authenticated register with wrong late credentials", authenticated_register_with_wrong_late_credentials),
|
||||
TEST_NO_TAG("Authenticated register with late credentials", authenticated_register_with_late_credentials),
|
||||
TEST_NO_TAG("Authenticated register with provided credentials", authenticated_register_with_provided_credentials),
|
||||
TEST_NO_TAG("Register with refresh", simple_register_with_refresh),
|
||||
TEST_NO_TAG("Authenticated register with refresh", simple_auth_register_with_refresh),
|
||||
TEST_NO_TAG("Register with refresh and send error", register_with_refresh_with_send_error),
|
||||
TEST_NO_TAG("Multi account", multiple_proxy),
|
||||
TEST_NO_TAG("Transport changes", transport_change),
|
||||
TEST_NO_TAG("Proxy transport changes", proxy_transport_change),
|
||||
TEST_NO_TAG("Proxy transport changes with wrong address at first", proxy_transport_change_with_wrong_port),
|
||||
TEST_NO_TAG("Proxy transport changes with wrong address, giving up",proxy_transport_change_with_wrong_port_givin_up),
|
||||
TEST_NO_TAG("Change expires", change_expires),
|
||||
TEST_NO_TAG("Network state change", network_state_change),
|
||||
TEST_NO_TAG("Io recv error", io_recv_error),
|
||||
TEST_NO_TAG("Io recv error with recovery", io_recv_error_retry_immediatly),
|
||||
TEST_NO_TAG("Io recv error with late recovery", io_recv_error_late_recovery),
|
||||
TEST_NO_TAG("Io recv error without active registration", io_recv_error_without_active_register),
|
||||
TEST_NO_TAG("Simple redirect", redirect)
|
||||
};
|
||||
|
||||
test_suite_t register_test_suite = {"Register", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -125,15 +125,15 @@ static void remote_provisioning_file(void) {
|
|||
|
||||
|
||||
test_t remote_provisioning_tests[] = {
|
||||
{ "Remote provisioning skipped", remote_provisioning_skipped },
|
||||
{ "Remote provisioning successful behind http", remote_provisioning_http },
|
||||
{ "Remote provisioning successful behind https", remote_provisioning_https },
|
||||
{ "Remote provisioning 404 not found", remote_provisioning_not_found },
|
||||
{ "Remote provisioning invalid", remote_provisioning_invalid },
|
||||
{ "Remote provisioning transient successful", remote_provisioning_transient },
|
||||
{ "Remote provisioning default values", remote_provisioning_default_values },
|
||||
{ "Remote provisioning from file", remote_provisioning_file },
|
||||
{ "Remote provisioning invalid URI", remote_provisioning_invalid_uri }
|
||||
TEST_NO_TAG("Remote provisioning skipped", remote_provisioning_skipped),
|
||||
TEST_NO_TAG("Remote provisioning successful behind http", remote_provisioning_http),
|
||||
TEST_NO_TAG("Remote provisioning successful behind https", remote_provisioning_https),
|
||||
TEST_NO_TAG("Remote provisioning 404 not found", remote_provisioning_not_found),
|
||||
TEST_NO_TAG("Remote provisioning invalid", remote_provisioning_invalid),
|
||||
TEST_NO_TAG("Remote provisioning transient successful", remote_provisioning_transient),
|
||||
TEST_NO_TAG("Remote provisioning default values", remote_provisioning_default_values),
|
||||
TEST_NO_TAG("Remote provisioning from file", remote_provisioning_file),
|
||||
TEST_NO_TAG("Remote provisioning invalid URI", remote_provisioning_invalid_uri)
|
||||
};
|
||||
|
||||
test_suite_t remote_provisioning_test_suite = {"RemoteProvisioning", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -330,20 +330,20 @@ end:
|
|||
}
|
||||
|
||||
test_t setup_tests[] = {
|
||||
{ "Version check", linphone_version_test },
|
||||
{ "Linphone Address", linphone_address_test },
|
||||
{ "Linphone proxy config address equal (internal api)", linphone_proxy_config_address_equal_test},
|
||||
{ "Linphone proxy config server address change (internal api)", linphone_proxy_config_is_server_config_changed_test},
|
||||
{ "Linphone core init/uninit", core_init_test },
|
||||
{ "Linphone random transport port",core_sip_transport_test},
|
||||
{ "Linphone interpret url", linphone_interpret_url_test },
|
||||
{ "LPConfig from buffer", linphone_lpconfig_from_buffer },
|
||||
{ "LPConfig zero_len value from buffer", linphone_lpconfig_from_buffer_zerolen_value },
|
||||
{ "LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value },
|
||||
{ "LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value },
|
||||
{ "Chat room", chat_room_test },
|
||||
{ "Devices reload", devices_reload_test },
|
||||
{ "Codec usability", codec_usability_test }
|
||||
TEST_NO_TAG("Version check", linphone_version_test),
|
||||
TEST_NO_TAG("Linphone Address", linphone_address_test),
|
||||
TEST_NO_TAG("Linphone proxy config address equal (internal api)", linphone_proxy_config_address_equal_test),
|
||||
TEST_NO_TAG("Linphone proxy config server address change (internal api)", linphone_proxy_config_is_server_config_changed_test),
|
||||
TEST_NO_TAG("Linphone core init/uninit", core_init_test),
|
||||
TEST_NO_TAG("Linphone random transport port",core_sip_transport_test),
|
||||
TEST_NO_TAG("Linphone interpret url", linphone_interpret_url_test),
|
||||
TEST_NO_TAG("LPConfig from buffer", linphone_lpconfig_from_buffer),
|
||||
TEST_NO_TAG("LPConfig zero_len value from buffer", linphone_lpconfig_from_buffer_zerolen_value),
|
||||
TEST_NO_TAG("LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value),
|
||||
TEST_NO_TAG("LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value),
|
||||
TEST_NO_TAG("Chat room", chat_room_test),
|
||||
TEST_NO_TAG("Devices reload", devices_reload_test),
|
||||
TEST_NO_TAG("Codec usability", codec_usability_test)
|
||||
};
|
||||
|
||||
test_suite_t setup_test_suite = {"Setup", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -115,8 +115,8 @@ static void linphone_stun_test_grab_ip(void)
|
|||
|
||||
|
||||
test_t stun_tests[] = {
|
||||
{ "Basic Stun test (Ping/public IP)", linphone_stun_test_grab_ip },
|
||||
{ "STUN encode buffer protection", linphone_stun_test_encode },
|
||||
TEST_NO_TAG("Basic Stun test (Ping/public IP)", linphone_stun_test_grab_ip),
|
||||
TEST_NO_TAG("STUN encode buffer protection", linphone_stun_test_encode)
|
||||
};
|
||||
|
||||
test_suite_t stun_test_suite = {"Stun", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -245,20 +245,20 @@ static void tunnel_ice_call(void) {
|
|||
ms_warning("Could not test %s because tunnel functionality is not available",__FUNCTION__);
|
||||
}
|
||||
test_t tunnel_tests[] = {
|
||||
{ "Simple", call_with_tunnel },
|
||||
{ "With SRTP", call_with_tunnel_srtp },
|
||||
{ "Without SIP", call_with_tunnel_without_sip },
|
||||
{ "In automatic mode", call_with_tunnel_auto },
|
||||
{ "In automatic mode with SRTP without SIP", call_with_tunnel_auto_without_sip_with_srtp },
|
||||
{ "Ice call", tunnel_ice_call },
|
||||
{ "SRTP ice call", tunnel_srtp_ice_call },
|
||||
{ "ZRTP ice call", tunnel_zrtp_ice_call },
|
||||
TEST_NO_TAG("Simple", call_with_tunnel),
|
||||
TEST_NO_TAG("With SRTP", call_with_tunnel_srtp),
|
||||
TEST_NO_TAG("Without SIP", call_with_tunnel_without_sip),
|
||||
TEST_NO_TAG("In automatic mode", call_with_tunnel_auto),
|
||||
TEST_NO_TAG("In automatic mode with SRTP without SIP", call_with_tunnel_auto_without_sip_with_srtp),
|
||||
TEST_NO_TAG("Ice call", tunnel_ice_call),
|
||||
TEST_NO_TAG("SRTP ice call", tunnel_srtp_ice_call),
|
||||
TEST_NO_TAG("ZRTP ice call", tunnel_zrtp_ice_call),
|
||||
#ifdef VIDEO_ENABLED
|
||||
{ "Ice video call", tunnel_video_ice_call },
|
||||
{ "With SIP - ice video call", full_tunnel_video_ice_call },
|
||||
{ "SRTP ice video call", tunnel_srtp_video_ice_call },
|
||||
{ "DTLS ice video call", tunnel_dtls_video_ice_call },
|
||||
{ "ZRTP ice video call", tunnel_zrtp_video_ice_call },
|
||||
TEST_NO_TAG("Ice video call", tunnel_video_ice_call),
|
||||
TEST_NO_TAG("With SIP - ice video call", full_tunnel_video_ice_call),
|
||||
TEST_NO_TAG("SRTP ice video call", tunnel_srtp_video_ice_call),
|
||||
TEST_NO_TAG("DTLS ice video call", tunnel_dtls_video_ice_call),
|
||||
TEST_NO_TAG("ZRTP ice video call", tunnel_zrtp_video_ice_call),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -54,9 +54,9 @@ static void upnp_check_ipaddress(void) {
|
|||
}
|
||||
|
||||
test_t upnp_tests[] = {
|
||||
{ "Start and stop", upnp_start_n_stop },
|
||||
{ "Check state", upnp_check_state },
|
||||
{ "Check ip address", upnp_check_ipaddress },
|
||||
TEST_NO_TAG("Start and stop", upnp_start_n_stop),
|
||||
TEST_NO_TAG("Check state", upnp_check_state),
|
||||
TEST_NO_TAG("Check ip address", upnp_check_ipaddress)
|
||||
};
|
||||
|
||||
test_suite_t upnp_test_suite = {"Upnp", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,
|
||||
|
|
|
|||
|
|
@ -552,12 +552,12 @@ static void enable_disable_camera_after_camera_switches(void) {
|
|||
}
|
||||
test_t video_tests[] = {
|
||||
#if HAVE_GTK
|
||||
{ "Early-media video during video call", early_media_video_during_video_call_test },
|
||||
{ "Two incoming early-media video calls", two_incoming_early_media_video_calls_test },
|
||||
{ "Early-media video with inactive audio", early_media_video_with_inactive_audio },
|
||||
{ "Forked outgoing early-media video call with inactive audio", forked_outgoing_early_media_video_call_with_inactive_audio_test },
|
||||
TEST_NO_TAG("Early-media video during video call", early_media_video_during_video_call_test),
|
||||
TEST_NO_TAG("Two incoming early-media video calls", two_incoming_early_media_video_calls_test),
|
||||
TEST_NO_TAG("Early-media video with inactive audio", early_media_video_with_inactive_audio),
|
||||
TEST_NO_TAG("Forked outgoing early-media video call with inactive audio", forked_outgoing_early_media_video_call_with_inactive_audio_test),
|
||||
#endif /*HAVE_GTK*/
|
||||
{ "Enable/disable camera after camera switches", enable_disable_camera_after_camera_switches}
|
||||
TEST_NO_TAG("Enable/disable camera after camera switches", enable_disable_camera_after_camera_switches)
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue