From ff16f5f88e1af6b553abe2a847436ef0adce0900 Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Tue, 7 Mar 2023 07:53:16 +0000 Subject: [PATCH] Add a new test binary to check if split-channel works This test (and binary) will be used to verify that the field trial for enabling split-MediaChannel works in both "off" and "on" modes, so that it can be run as a field trial. It is intended to be deleted once the conversion to split-MediaChannel is complete. Bug: webrtc:13931 Change-Id: If62d19be9b2f205067b86dc859946279442fdd58 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/296322 Commit-Queue: Harald Alvestrand Reviewed-by: Emil Lundmark Reviewed-by: Jeremy Leconte Cr-Commit-Position: refs/heads/main@{#39493} --- BUILD.gn | 1 + infra/specs/client.webrtc.json | 451 +++++++++++++++ infra/specs/gn_isolate_map.pyl | 4 + infra/specs/test_suites.pyl | 2 + infra/specs/tryserver.webrtc.json | 536 ++++++++++++++++++ pc/BUILD.gn | 21 + ..._connection_mediachannel_split_unittest.cc | 183 ++++++ 7 files changed, 1198 insertions(+) create mode 100644 pc/peer_connection_mediachannel_split_unittest.cc diff --git a/BUILD.gn b/BUILD.gn index 1bdda46097..59c3af169b 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -64,6 +64,7 @@ if (!build_with_chromium) { "modules/rtp_rtcp:test_packet_masks_metrics", "modules/video_capture:video_capture_internal_impl", "net/dcsctp:dcsctp_unittests", + "pc:peer_connection_mediachannel_split_unittests", "pc:peerconnection_unittests", "pc:rtc_pc_unittests", "pc:slow_peer_connection_unittests", diff --git a/infra/specs/client.webrtc.json b/infra/specs/client.webrtc.json index e75777ad2a..bd5d5564a7 100644 --- a/infra/specs/client.webrtc.json +++ b/infra/specs/client.webrtc.json @@ -189,6 +189,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -704,6 +727,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -1250,6 +1296,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -1765,6 +1834,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -2590,6 +2682,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -3044,6 +3157,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-20.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -3477,6 +3611,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -3910,6 +4065,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -4364,6 +4540,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -4818,6 +5015,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -5252,6 +5470,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -5687,6 +5926,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -6142,6 +6402,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -6627,6 +6908,28 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cores": "12", + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -7081,6 +7384,28 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cores": "12", + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -7527,6 +7852,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -7982,6 +8328,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "arm64-64-Apple_M1", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -8444,6 +8811,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -8877,6 +9265,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -9310,6 +9719,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -9743,6 +10173,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { diff --git a/infra/specs/gn_isolate_map.pyl b/infra/specs/gn_isolate_map.pyl index c7c472fcfa..8b1ce276b7 100644 --- a/infra/specs/gn_isolate_map.pyl +++ b/infra/specs/gn_isolate_map.pyl @@ -84,6 +84,10 @@ "label": "//modules:modules_unittests", "type": "windowed_test_launcher", }, + "peer_connection_mediachannel_split_unittests": { + "label": "//pc:peer_connection_mediachannel_split_unittests", + "type": "console_test_launcher", + }, "peerconnection_unittests": { "label": "//pc:peerconnection_unittests", "type": "console_test_launcher", diff --git a/infra/specs/test_suites.pyl b/infra/specs/test_suites.pyl index 2e630467c6..2ec8902c5a 100644 --- a/infra/specs/test_suites.pyl +++ b/infra/specs/test_suites.pyl @@ -40,6 +40,7 @@ 'modules_unittests': { 'mixins': ['shards-6'], }, + 'peer_connection_mediachannel_split_unittests': {}, 'peerconnection_unittests': { 'mixins': ['shards-4'], }, @@ -94,6 +95,7 @@ 'modules_unittests': { 'mixins': ['shards-6'], }, + 'peer_connection_mediachannel_split_unittests': {}, 'peerconnection_unittests': { 'mixins': ['shards-4'], }, diff --git a/infra/specs/tryserver.webrtc.json b/infra/specs/tryserver.webrtc.json index 285bafb4d5..56c8e3f08e 100644 --- a/infra/specs/tryserver.webrtc.json +++ b/infra/specs/tryserver.webrtc.json @@ -189,6 +189,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -731,6 +754,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -1273,6 +1319,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -1843,6 +1912,29 @@ "test": "modules_unittests", "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true, + "has_native_resultdb_integration": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "android_devices": "1", + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "peer_connection_mediachannel_split_unittests", + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "merge": { "args": [], @@ -5986,6 +6078,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -6453,6 +6566,28 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "isolate_profile_data": true, + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "isolate_profile_data": true, @@ -6972,6 +7107,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -7427,6 +7583,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -7907,6 +8084,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-20.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -8340,6 +8538,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -8843,6 +9062,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -9276,6 +9516,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -9730,6 +9991,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -10184,6 +10466,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -10617,6 +10920,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-18.04" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -11057,6 +11381,28 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cores": "12", + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -11512,6 +11858,28 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cores": "12", + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -11958,6 +12326,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "arm64-64-Apple_M1", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -12391,6 +12780,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -12873,6 +13283,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "arm64-64-Apple_M1", + "os": "Mac-12" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -13306,6 +13737,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -13743,6 +14195,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -14176,6 +14649,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -14609,6 +15103,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { @@ -15042,6 +15557,27 @@ }, "test_id_prefix": "ninja://modules:modules_unittests/" }, + { + "isolate_name": "peer_connection_mediachannel_split_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "peer_connection_mediachannel_split_unittests", + "resultdb": { + "result_format": "json" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-19045" + } + ] + }, + "test_id_prefix": "ninja://pc:peer_connection_mediachannel_split_unittests/" + }, { "isolate_name": "peerconnection_unittests", "merge": { diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 2bcf9d3e8d..cd91e0801e 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -2544,6 +2544,27 @@ if (rtc_include_tests && !build_with_chromium) { ] } + rtc_test("peer_connection_mediachannel_split_unittests") { + testonly = true + sources = [ "peer_connection_mediachannel_split_unittest.cc" ] + deps = [ + ":integration_test_helpers", + ":session_description", + "../api:libjingle_peerconnection_api", + "../api:media_stream_interface", + "../api:rtc_error", + "../api:rtc_stats_api", + "../api:scoped_refptr", + "../media:codec", + "../media:media_constants", + "../rtc_base:gunit_helpers", + "../rtc_base:rtc_base_tests_utils", + "../test:test_main", + "../test:test_support", + ] + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] + } + rtc_library("data_channel_controller_unittest") { testonly = true sources = [ "data_channel_controller_unittest.cc" ] diff --git a/pc/peer_connection_mediachannel_split_unittest.cc b/pc/peer_connection_mediachannel_split_unittest.cc new file mode 100644 index 0000000000..3eca104add --- /dev/null +++ b/pc/peer_connection_mediachannel_split_unittest.cc @@ -0,0 +1,183 @@ +/* + * Copyright 2012 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// Integration tests for PeerConnection to exercise the options of +// either splitting or not splitting the MediaChannel object. +// These tests exercise a full stack over a simulated network. + +// TODO(bugs.webrtc.org/13931): Delete these tests when split is landed. + +#include +#include + +#include "absl/types/optional.h" +#include "api/media_stream_interface.h" +#include "api/peer_connection_interface.h" +#include "api/rtc_error.h" +#include "api/scoped_refptr.h" +#include "api/stats/rtc_stats.h" +#include "api/stats/rtc_stats_report.h" +#include "api/stats/rtcstats_objects.h" +#include "media/base/codec.h" +#include "media/base/media_constants.h" +#include "pc/session_description.h" +#include "pc/test/integration_test_helpers.h" +#include "rtc_base/gunit.h" +#include "rtc_base/virtual_socket_server.h" +#include "test/gtest.h" + +namespace webrtc { + +namespace { + +class PeerConnectionMediaChannelSplitTest + : public PeerConnectionIntegrationBaseTest, + public ::testing::WithParamInterface { + protected: + PeerConnectionMediaChannelSplitTest() + : PeerConnectionIntegrationBaseTest(SdpSemantics::kUnifiedPlan, + /* field_trials = */ GetParam()) {} +}; + +int NacksReceivedCount(PeerConnectionIntegrationWrapper& pc) { + rtc::scoped_refptr report = pc.NewGetStats(); + auto sender_stats = report->GetStatsOfType(); + if (sender_stats.size() != 1) { + ADD_FAILURE(); + return 0; + } + if (!sender_stats[0]->nack_count.is_defined()) { + return 0; + } + return *sender_stats[0]->nack_count; +} + +int NacksSentCount(PeerConnectionIntegrationWrapper& pc) { + rtc::scoped_refptr report = pc.NewGetStats(); + auto receiver_stats = report->GetStatsOfType(); + if (receiver_stats.size() != 1) { + ADD_FAILURE(); + return 0; + } + if (!receiver_stats[0]->nack_count.is_defined()) { + return 0; + } + return *receiver_stats[0]->nack_count; +} + +// Test disabled because it is flaky. +TEST_P(PeerConnectionMediaChannelSplitTest, + DISABLED_AudioPacketLossCausesNack) { + RTCConfiguration config; + ASSERT_TRUE(CreatePeerConnectionWrappersWithConfig(config, config)); + ConnectFakeSignaling(); + auto audio_transceiver_or_error = + caller()->pc()->AddTransceiver(caller()->CreateLocalAudioTrack()); + ASSERT_TRUE(audio_transceiver_or_error.ok()); + auto send_transceiver = audio_transceiver_or_error.MoveValue(); + // Munge the SDP to include NACK and RRTR on Opus, and remove all other + // codecs. + caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) { + for (ContentInfo& content : desc->contents()) { + cricket::AudioContentDescription* media = + content.media_description()->as_audio(); + std::vector codecs = media->codecs(); + std::vector codecs_out; + for (cricket::AudioCodec codec : codecs) { + if (codec.name == "opus") { + codec.AddFeedbackParam(cricket::FeedbackParam( + cricket::kRtcpFbParamNack, cricket::kParamValueEmpty)); + codec.AddFeedbackParam(cricket::FeedbackParam( + cricket::kRtcpFbParamRrtr, cricket::kParamValueEmpty)); + codecs_out.push_back(codec); + } + } + EXPECT_FALSE(codecs_out.empty()); + media->set_codecs(codecs_out); + } + }); + + caller()->CreateAndSetAndSignalOffer(); + // Check for failure in helpers + ASSERT_FALSE(HasFailure()); + MediaExpectations media_expectations; + media_expectations.CalleeExpectsSomeAudio(1); + ExpectNewFrames(media_expectations); + ASSERT_FALSE(HasFailure()); + + virtual_socket_server()->set_drop_probability(0.2); + + // Wait until callee has sent at least one NACK. + // Note that due to stats caching, this might only be visible 50 ms + // after the nack was in fact sent. + EXPECT_TRUE_WAIT(NacksSentCount(*callee()) > 0, kDefaultTimeout); + ASSERT_FALSE(HasFailure()); + + virtual_socket_server()->set_drop_probability(0.0); + // Wait until caller has received at least one NACK + EXPECT_TRUE_WAIT(NacksReceivedCount(*caller()) > 0, kDefaultTimeout); +} + +TEST_P(PeerConnectionMediaChannelSplitTest, VideoPacketLossCausesNack) { + RTCConfiguration config; + ASSERT_TRUE(CreatePeerConnectionWrappersWithConfig(config, config)); + ConnectFakeSignaling(); + auto video_transceiver_or_error = + caller()->pc()->AddTransceiver(caller()->CreateLocalVideoTrack()); + ASSERT_TRUE(video_transceiver_or_error.ok()); + auto send_transceiver = video_transceiver_or_error.MoveValue(); + // Munge the SDP to include NACK and RRTR on VP8, and remove all other + // codecs. + caller()->SetGeneratedSdpMunger([](cricket::SessionDescription* desc) { + for (ContentInfo& content : desc->contents()) { + cricket::VideoContentDescription* media = + content.media_description()->as_video(); + std::vector codecs = media->codecs(); + std::vector codecs_out; + for (cricket::VideoCodec codec : codecs) { + if (codec.name == "VP8") { + ASSERT_TRUE(codec.HasFeedbackParam(cricket::FeedbackParam( + cricket::kRtcpFbParamNack, cricket::kParamValueEmpty))); + codecs_out.push_back(codec); + } + } + EXPECT_FALSE(codecs_out.empty()); + media->set_codecs(codecs_out); + } + }); + + caller()->CreateAndSetAndSignalOffer(); + // Check for failure in helpers + ASSERT_FALSE(HasFailure()); + MediaExpectations media_expectations; + media_expectations.CalleeExpectsSomeVideo(1); + ExpectNewFrames(media_expectations); + ASSERT_FALSE(HasFailure()); + + virtual_socket_server()->set_drop_probability(0.2); + + // Wait until callee has sent at least one NACK. + // Note that due to stats caching, this might only be visible 50 ms + // after the nack was in fact sent. + EXPECT_TRUE_WAIT(NacksSentCount(*callee()) > 0, kDefaultTimeout); + ASSERT_FALSE(HasFailure()); + + // Wait until caller has received at least one NACK + EXPECT_TRUE_WAIT(NacksReceivedCount(*caller()) > 0, kDefaultTimeout); +} + +INSTANTIATE_TEST_SUITE_P(PeerConnectionMediaChannelSplitTest, + PeerConnectionMediaChannelSplitTest, + Values("WebRTC-SplitMediaChannel/Disabled/", + "WebRTC-SplitMediaChannel/Enabled/")); + +} // namespace + +} // namespace webrtc