session_config_unittest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "remoting/protocol/session_config.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. namespace remoting {
  7. namespace protocol {
  8. void TestGetFinalConfig(std::unique_ptr<SessionConfig> config) {
  9. std::unique_ptr<CandidateSessionConfig> candidate_config =
  10. CandidateSessionConfig::CreateFrom(*config);
  11. ASSERT_TRUE(candidate_config);
  12. std::unique_ptr<SessionConfig> config2 =
  13. SessionConfig::GetFinalConfig(candidate_config.get());
  14. ASSERT_TRUE(config2);
  15. EXPECT_EQ(config->protocol(), config2->protocol());
  16. if (config->protocol() == SessionConfig::Protocol::ICE) {
  17. EXPECT_EQ(config->control_config(), config2->control_config());
  18. EXPECT_EQ(config->event_config(), config2->event_config());
  19. EXPECT_EQ(config->video_config(), config2->video_config());
  20. EXPECT_EQ(config->audio_config(), config2->audio_config());
  21. }
  22. }
  23. TEST(SessionConfig, SelectCommon) {
  24. std::unique_ptr<CandidateSessionConfig> default_candidate_config =
  25. CandidateSessionConfig::CreateDefault();
  26. std::unique_ptr<CandidateSessionConfig> candidate_config_with_webrtc =
  27. CandidateSessionConfig::CreateEmpty();
  28. candidate_config_with_webrtc->set_webrtc_supported(true);
  29. std::unique_ptr<CandidateSessionConfig> hybrid_candidate_config =
  30. CandidateSessionConfig::CreateDefault();
  31. hybrid_candidate_config->set_webrtc_supported(true);
  32. std::unique_ptr<SessionConfig> selected;
  33. // ICE is selected by default.
  34. selected = SessionConfig::SelectCommon(default_candidate_config.get(),
  35. default_candidate_config.get());
  36. ASSERT_TRUE(selected);
  37. EXPECT_EQ(SessionConfig::Protocol::ICE, selected->protocol());
  38. // WebRTC protocol is not supported by default.
  39. selected = SessionConfig::SelectCommon(default_candidate_config.get(),
  40. candidate_config_with_webrtc.get());
  41. EXPECT_FALSE(selected);
  42. // ICE is selected when client supports both protocols
  43. selected = SessionConfig::SelectCommon(default_candidate_config.get(),
  44. hybrid_candidate_config.get());
  45. ASSERT_TRUE(selected);
  46. EXPECT_EQ(SessionConfig::Protocol::ICE, selected->protocol());
  47. // WebRTC is selected when both peers support it.
  48. selected = SessionConfig::SelectCommon(candidate_config_with_webrtc.get(),
  49. candidate_config_with_webrtc.get());
  50. ASSERT_TRUE(selected);
  51. EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol());
  52. // WebRTC is selected when both peers support it.
  53. selected = SessionConfig::SelectCommon(candidate_config_with_webrtc.get(),
  54. hybrid_candidate_config.get());
  55. ASSERT_TRUE(selected);
  56. EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol());
  57. // ICE is selected if both peers support both protocols.
  58. selected = SessionConfig::SelectCommon(hybrid_candidate_config.get(),
  59. hybrid_candidate_config.get());
  60. ASSERT_TRUE(selected);
  61. EXPECT_EQ(SessionConfig::Protocol::WEBRTC, selected->protocol());
  62. }
  63. TEST(SessionConfig, GetFinalConfig) {
  64. TestGetFinalConfig(SessionConfig::ForTest());
  65. TestGetFinalConfig(SessionConfig::ForTestWithWebrtc());
  66. }
  67. TEST(SessionConfig, IsSupported) {
  68. std::unique_ptr<CandidateSessionConfig> default_candidate_config =
  69. CandidateSessionConfig::CreateDefault();
  70. std::unique_ptr<CandidateSessionConfig> candidate_config_with_webrtc =
  71. CandidateSessionConfig::CreateEmpty();
  72. candidate_config_with_webrtc->set_webrtc_supported(true);
  73. std::unique_ptr<CandidateSessionConfig> hybrid_candidate_config =
  74. CandidateSessionConfig::CreateDefault();
  75. hybrid_candidate_config->set_webrtc_supported(true);
  76. std::unique_ptr<SessionConfig> ice_config = SessionConfig::ForTest();
  77. std::unique_ptr<SessionConfig> webrtc_config =
  78. SessionConfig::ForTestWithWebrtc();
  79. EXPECT_TRUE(default_candidate_config->IsSupported(*ice_config));
  80. EXPECT_FALSE(default_candidate_config->IsSupported(*webrtc_config));
  81. EXPECT_FALSE(candidate_config_with_webrtc->IsSupported(*ice_config));
  82. EXPECT_TRUE(candidate_config_with_webrtc->IsSupported(*webrtc_config));
  83. EXPECT_TRUE(hybrid_candidate_config->IsSupported(*ice_config));
  84. EXPECT_TRUE(hybrid_candidate_config->IsSupported(*webrtc_config));
  85. }
  86. } // namespace protocol
  87. } // namespace remoting