1 // Copyright (c) 2012 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 
5 #include "jingle/notifier/communicator/connection_settings.h"
6 
7 #include <stddef.h>
8 
9 #include "net/base/host_port_pair.h"
10 #include "jingle/notifier/base/server_information.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 namespace notifier {
14 
15 namespace {
16 
17 class ConnectionSettingsTest : public ::testing::Test {
18  protected:
ConnectionSettingsTest()19   ConnectionSettingsTest() {
20     servers_.push_back(
21         ServerInformation(
22             net::HostPortPair("supports_ssltcp.com", 100),
23             SUPPORTS_SSLTCP));
24     servers_.push_back(
25         ServerInformation(
26             net::HostPortPair("does_not_support_ssltcp.com", 200),
27             DOES_NOT_SUPPORT_SSLTCP));
28   }
29 
30   ServerList servers_;
31 };
32 
33 // An empty server list should always map to an empty connection
34 // settings list.
TEST_F(ConnectionSettingsTest,Empty)35 TEST_F(ConnectionSettingsTest, Empty) {
36   EXPECT_TRUE(MakeConnectionSettingsList(ServerList(), false).empty());
37   EXPECT_TRUE(MakeConnectionSettingsList(ServerList(), true).empty());
38 }
39 
40 // Make sure that servers that support SSLTCP get mapped to two
41 // settings entries (with the SSLTCP one coming last) whereas those
42 // that don't map to only one.
TEST_F(ConnectionSettingsTest,Basic)43 TEST_F(ConnectionSettingsTest, Basic) {
44   const ConnectionSettingsList settings_list =
45       MakeConnectionSettingsList(servers_, false /* try_ssltcp_first */);
46 
47   ConnectionSettingsList expected_settings_list;
48   expected_settings_list.push_back(
49       ConnectionSettings(net::HostPortPair({"supports_ssltcp.com", 100}),
50                          DO_NOT_USE_SSLTCP, SUPPORTS_SSLTCP));
51   expected_settings_list.push_back(
52       ConnectionSettings(net::HostPortPair({"supports_ssltcp.com", 443}),
53                          USE_SSLTCP, SUPPORTS_SSLTCP));
54   expected_settings_list.push_back(ConnectionSettings(
55       net::HostPortPair({"does_not_support_ssltcp.com", 200}),
56       DO_NOT_USE_SSLTCP, DOES_NOT_SUPPORT_SSLTCP));
57 
58   ASSERT_EQ(expected_settings_list.size(), settings_list.size());
59   for (size_t i = 0; i < settings_list.size(); ++i) {
60     EXPECT_TRUE(settings_list[i].Equals(expected_settings_list[i]));
61   }
62 }
63 
64 // Make sure that servers that support SSLTCP get mapped to two
65 // settings entries (with the SSLTCP one coming first) when
66 // try_ssltcp_first is set.
TEST_F(ConnectionSettingsTest,TrySslTcpFirst)67 TEST_F(ConnectionSettingsTest, TrySslTcpFirst) {
68   const ConnectionSettingsList settings_list =
69       MakeConnectionSettingsList(servers_, true /* try_ssltcp_first */);
70 
71   ConnectionSettingsList expected_settings_list;
72   expected_settings_list.push_back(
73       ConnectionSettings(net::HostPortPair({"supports_ssltcp.com", 443}),
74                          USE_SSLTCP, SUPPORTS_SSLTCP));
75   expected_settings_list.push_back(
76       ConnectionSettings(net::HostPortPair({"supports_ssltcp.com", 100}),
77                          DO_NOT_USE_SSLTCP, SUPPORTS_SSLTCP));
78   expected_settings_list.push_back(ConnectionSettings(
79       net::HostPortPair({"does_not_support_ssltcp.com", 200}),
80       DO_NOT_USE_SSLTCP, DOES_NOT_SUPPORT_SSLTCP));
81 
82   ASSERT_EQ(expected_settings_list.size(), settings_list.size());
83   for (size_t i = 0; i < settings_list.size(); ++i) {
84     EXPECT_TRUE(settings_list[i].Equals(expected_settings_list[i]));
85   }
86 }
87 
88 }  // namespace
89 
90 }  // namespace notifier
91