// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "remoting/protocol/session_config.h" #include "testing/gtest/include/gtest/gtest.h" namespace remoting { namespace protocol { void TestGetFinalConfig(std::unique_ptr config) { std::unique_ptr candidate_config = CandidateSessionConfig::CreateFrom(*config); ASSERT_TRUE(candidate_config); std::unique_ptr config2 = SessionConfig::GetFinalConfig(candidate_config.get()); ASSERT_TRUE(config2); EXPECT_EQ(config->protocol(), config2->protocol()); if (config->protocol() == SessionConfig::Protocol::ICE) { EXPECT_EQ(config->control_config(), config2->control_config()); EXPECT_EQ(config->event_config(), config2->event_config()); EXPECT_EQ(config->video_config(), config2->video_config()); EXPECT_EQ(config->audio_config(), config2->audio_config()); } } TEST(SessionConfig, SelectCommon) { std::unique_ptr default_candidate_config = CandidateSessionConfig::CreateDefault(); std::unique_ptr candidate_config_with_webrtc = CandidateSessionConfig::CreateEmpty(); candidate_config_with_webrtc->set_webrtc_supported(true); std::unique_ptr hybrid_candidate_config = CandidateSessionConfig::CreateDefault(); hybrid_candidate_config->set_webrtc_supported(true); std::unique_ptr selected; // ICE is selected by default. selected = SessionConfig::SelectCommon(default_candidate_config.get(), default_candidate_config.get()); ASSERT_TRUE(selected); EXPECT_EQ(SessionConfig::Protocol::ICE, selected->protocol()); // WebRTC protocol is not supported by default. selected = SessionConfig::SelectCommon(default_candidate_config.get(), candidate_config_with_webrtc.get()); EXPECT_FALSE(selected); // ICE is selected when client supports both protocols selected = SessionConfig::SelectCommon(default_candidate_config.get(), hybrid_candidate_config.get()); ASSERT_TRUE(selected); EXPECT_EQ(SessionConfig::Protocol::ICE, selected->protocol()); // WebRTC is selected when both peers support it. selected = SessionConfig::SelectCommon(candidate_config_with_webrtc.get(), candidate_config_with_webrtc.get()); ASSERT_TRUE(selected); EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol()); // WebRTC is selected when both peers support it. selected = SessionConfig::SelectCommon(candidate_config_with_webrtc.get(), hybrid_candidate_config.get()); ASSERT_TRUE(selected); EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol()); // ICE is selected if both peers support both protocols. selected = SessionConfig::SelectCommon(hybrid_candidate_config.get(), hybrid_candidate_config.get()); ASSERT_TRUE(selected); EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol()); } TEST(SessionConfig, GetFinalConfig) { TestGetFinalConfig(SessionConfig::ForTest()); TestGetFinalConfig(SessionConfig::ForTestWithWebrtc()); } TEST(SessionConfig, IsSupported) { std::unique_ptr default_candidate_config = CandidateSessionConfig::CreateDefault(); std::unique_ptr candidate_config_with_webrtc = CandidateSessionConfig::CreateEmpty(); candidate_config_with_webrtc->set_webrtc_supported(true); std::unique_ptr hybrid_candidate_config = CandidateSessionConfig::CreateDefault(); hybrid_candidate_config->set_webrtc_supported(true); std::unique_ptr ice_config = SessionConfig::ForTest(); std::unique_ptr webrtc_config = SessionConfig::ForTestWithWebrtc(); EXPECT_TRUE(default_candidate_config->IsSupported(*ice_config)); EXPECT_FALSE(default_candidate_config->IsSupported(*webrtc_config)); EXPECT_FALSE(candidate_config_with_webrtc->IsSupported(*ice_config)); EXPECT_TRUE(candidate_config_with_webrtc->IsSupported(*webrtc_config)); EXPECT_TRUE(hybrid_candidate_config->IsSupported(*ice_config)); EXPECT_TRUE(hybrid_candidate_config->IsSupported(*webrtc_config)); } } // namespace protocol } // namespace remoting