security/manager/ssl/tests/gtest/TLSIntoleranceTest.cpp

branch
TOR_BUG_9701
changeset 3
141e0f1194b1
equal deleted inserted replaced
-1:000000000000 0:e3e45e8cca8c
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 #include "nsNSSIOLayer.h"
8 #include "sslproto.h"
9
10 #include "gtest/gtest.h"
11
12 NS_NAMED_LITERAL_CSTRING(HOST, "example.org");
13 const int16_t PORT = 443;
14
15 class TLSIntoleranceTest : public ::testing::Test
16 {
17 protected:
18 nsSSLIOLayerHelpers helpers;
19 };
20
21 TEST_F(TLSIntoleranceTest, Test_1_2_through_3_0)
22 {
23 // No adjustment made when there is no entry for the site.
24 {
25 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
26 SSL_LIBRARY_VERSION_TLS_1_2 };
27 helpers.adjustForTLSIntolerance(HOST, PORT, range);
28 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
29 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_2, range.max);
30
31 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, PORT,
32 range.min, range.max));
33 }
34
35 {
36 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
37 SSL_LIBRARY_VERSION_TLS_1_2 };
38 helpers.adjustForTLSIntolerance(HOST, PORT, range);
39 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
40 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_1, range.max);
41
42 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, PORT,
43 range.min, range.max));
44 }
45
46 {
47 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
48 SSL_LIBRARY_VERSION_TLS_1_2 };
49 helpers.adjustForTLSIntolerance(HOST, PORT, range);
50 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
51 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_0, range.max);
52
53 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, PORT,
54 range.min, range.max));
55 }
56
57 {
58 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
59 SSL_LIBRARY_VERSION_TLS_1_2 };
60
61 helpers.adjustForTLSIntolerance(HOST, PORT, range);
62 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
63 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.max);
64
65 // false because we reached the floor set by range.min
66 ASSERT_FALSE(helpers.rememberIntolerantAtVersion(HOST, PORT,
67 range.min, range.max));
68 }
69
70 {
71 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
72 SSL_LIBRARY_VERSION_TLS_1_2 };
73 helpers.adjustForTLSIntolerance(HOST, PORT, range);
74 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
75 // When rememberIntolerantAtVersion returns false, it also resets the
76 // intolerance information for the server.
77 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_2, range.max);
78 }
79 }
80
81 TEST_F(TLSIntoleranceTest, Test_Tolerant_Overrides_Intolerant_1)
82 {
83 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, PORT,
84 SSL_LIBRARY_VERSION_3_0,
85 SSL_LIBRARY_VERSION_TLS_1_0));
86 helpers.rememberTolerantAtVersion(HOST, PORT, SSL_LIBRARY_VERSION_TLS_1_0);
87 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
88 SSL_LIBRARY_VERSION_TLS_1_2 };
89 helpers.adjustForTLSIntolerance(HOST, PORT, range);
90 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
91 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_0, range.max);
92 }
93
94 TEST_F(TLSIntoleranceTest, Test_Tolerant_Overrides_Intolerant_2)
95 {
96 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, PORT,
97 SSL_LIBRARY_VERSION_3_0,
98 SSL_LIBRARY_VERSION_TLS_1_0));
99 helpers.rememberTolerantAtVersion(HOST, PORT, SSL_LIBRARY_VERSION_TLS_1_1);
100 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
101 SSL_LIBRARY_VERSION_TLS_1_2 };
102 helpers.adjustForTLSIntolerance(HOST, PORT, range);
103 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
104 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_1, range.max);
105 }
106
107 TEST_F(TLSIntoleranceTest, Test_Intolerant_Does_Not_Override_Tolerant)
108 {
109 // No adjustment made when there is no entry for the site.
110 helpers.rememberTolerantAtVersion(HOST, PORT, SSL_LIBRARY_VERSION_TLS_1_0);
111 // false because we reached the floor set by rememberTolerantAtVersion.
112 ASSERT_FALSE(helpers.rememberIntolerantAtVersion(HOST, PORT,
113 SSL_LIBRARY_VERSION_3_0,
114 SSL_LIBRARY_VERSION_TLS_1_0));
115 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
116 SSL_LIBRARY_VERSION_TLS_1_2 };
117 helpers.adjustForTLSIntolerance(HOST, PORT, range);
118 ASSERT_EQ(SSL_LIBRARY_VERSION_3_0, range.min);
119 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_2, range.max);
120 }
121
122 TEST_F(TLSIntoleranceTest, Test_Port_Is_Relevant)
123 {
124 helpers.rememberTolerantAtVersion(HOST, 1, SSL_LIBRARY_VERSION_TLS_1_2);
125 ASSERT_FALSE(helpers.rememberIntolerantAtVersion(HOST, 1,
126 SSL_LIBRARY_VERSION_3_0,
127 SSL_LIBRARY_VERSION_TLS_1_2));
128 ASSERT_TRUE(helpers.rememberIntolerantAtVersion(HOST, 2,
129 SSL_LIBRARY_VERSION_3_0,
130 SSL_LIBRARY_VERSION_TLS_1_2));
131
132 {
133 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
134 SSL_LIBRARY_VERSION_TLS_1_2 };
135 helpers.adjustForTLSIntolerance(HOST, 1, range);
136 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_2, range.max);
137 }
138
139 {
140 SSLVersionRange range = { SSL_LIBRARY_VERSION_3_0,
141 SSL_LIBRARY_VERSION_TLS_1_2 };
142 helpers.adjustForTLSIntolerance(HOST, 2, range);
143 ASSERT_EQ(SSL_LIBRARY_VERSION_TLS_1_1, range.max);
144 }
145 }

mercurial