Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Side by Side Diff: net/base/ssl_client_auth_cache_unittest.cc

Issue 4568002: Remember if a user declines to provide a server with a client certificate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Forgot about unittests Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/ssl_client_auth_cache.h" 5 #include "net/base/ssl_client_auth_cache.h"
6 6
7 #include "base/time.h" 7 #include "base/time.h"
8 #include "net/base/x509_certificate.h"
8 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
9 10
10 namespace net { 11 namespace net {
11 12
12 TEST(SSLClientAuthCacheTest, LookupAddRemove) { 13 TEST(SSLClientAuthCacheTest, LookupAddRemove) {
13 SSLClientAuthCache cache; 14 SSLClientAuthCache cache;
14 15
15 base::Time start_date = base::Time::Now(); 16 base::Time start_date = base::Time::Now();
16 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1); 17 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1);
17 18
18 std::string server1("foo1:443"); 19 std::string server1("foo1:443");
19 scoped_refptr<X509Certificate> cert1( 20 scoped_refptr<X509Certificate> cert1(
20 new X509Certificate("foo1", "CA", start_date, expiration_date)); 21 new X509Certificate("foo1", "CA", start_date, expiration_date));
21 22
22 std::string server2("foo2:443"); 23 std::string server2("foo2:443");
23 scoped_refptr<X509Certificate> cert2( 24 scoped_refptr<X509Certificate> cert2(
24 new X509Certificate("foo2", "CA", start_date, expiration_date)); 25 new X509Certificate("foo2", "CA", start_date, expiration_date));
25 26
26 std::string server3("foo3:443"); 27 std::string server3("foo3:443");
27 scoped_refptr<X509Certificate> cert3( 28 scoped_refptr<X509Certificate> cert3(
28 new X509Certificate("foo3", "CA", start_date, expiration_date)); 29 new X509Certificate("foo3", "CA", start_date, expiration_date));
29 30
31 X509Certificate* cached_cert = NULL;
30 // Lookup non-existent client certificate. 32 // Lookup non-existent client certificate.
31 EXPECT_TRUE(cache.Lookup(server1) == NULL); 33 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
34 EXPECT_EQ(NULL, cached_cert);
32 35
33 // Add client certificate for server1. 36 // Add client certificate for server1.
34 cache.Add(server1, cert1.get()); 37 cache.Add(server1, cert1.get());
35 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 38 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
39 EXPECT_EQ(cert1.get(), cached_cert);
36 40
37 // Add client certificate for server2. 41 // Add client certificate for server2.
38 cache.Add(server2, cert2.get()); 42 cache.Add(server2, cert2.get());
39 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 43 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
40 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 44 EXPECT_EQ(cert1.get(), cached_cert);
45 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
46 EXPECT_EQ(cert2.get(), cached_cert);
41 47
42 // Overwrite the client certificate for server1. 48 // Overwrite the client certificate for server1.
43 cache.Add(server1, cert3.get()); 49 cache.Add(server1, cert3.get());
44 EXPECT_EQ(cert3.get(), cache.Lookup(server1)); 50 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
45 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 51 EXPECT_EQ(cert3.get(), cached_cert);
52 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
53 EXPECT_EQ(cert2.get(), cached_cert);
46 54
47 // Remove client certificate of server1. 55 // Remove client certificate of server1.
48 cache.Remove(server1); 56 cache.Remove(server1);
49 EXPECT_TRUE(cache.Lookup(server1) == NULL); 57 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
50 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 58 EXPECT_EQ(NULL, cached_cert);
59 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
60 EXPECT_EQ(cert2.get(), cached_cert);
51 61
52 // Remove non-existent client certificate. 62 // Remove non-existent client certificate.
53 cache.Remove(server1); 63 cache.Remove(server1);
54 EXPECT_TRUE(cache.Lookup(server1) == NULL); 64 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
55 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 65 EXPECT_EQ(NULL, cached_cert);
66 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
67 EXPECT_EQ(cert2.get(), cached_cert);
56 } 68 }
57 69
58 // Check that if the server differs only by port number, it is considered 70 // Check that if the server differs only by port number, it is considered
59 // a separate server. 71 // a separate server.
60 TEST(SSLClientAuthCacheTest, LookupWithPort) { 72 TEST(SSLClientAuthCacheTest, LookupWithPort) {
61 SSLClientAuthCache cache; 73 SSLClientAuthCache cache;
62 74
63 base::Time start_date = base::Time::Now(); 75 base::Time start_date = base::Time::Now();
64 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1); 76 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1);
65 77
66 std::string server1("foo:443"); 78 std::string server1("foo:443");
67 scoped_refptr<X509Certificate> cert1( 79 scoped_refptr<X509Certificate> cert1(
68 new X509Certificate("foo", "CA", start_date, expiration_date)); 80 new X509Certificate("foo", "CA", start_date, expiration_date));
69 81
70 std::string server2("foo:8443"); 82 std::string server2("foo:8443");
71 scoped_refptr<X509Certificate> cert2( 83 scoped_refptr<X509Certificate> cert2(
72 new X509Certificate("foo", "CA", start_date, expiration_date)); 84 new X509Certificate("foo", "CA", start_date, expiration_date));
73 85
74 cache.Add(server1, cert1.get()); 86 cache.Add(server1, cert1.get());
75 cache.Add(server2, cert2.get()); 87 cache.Add(server2, cert2.get());
76 88
77 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 89 X509Certificate* cached_cert = NULL;
78 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 90 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
91 EXPECT_EQ(cert1.get(), cached_cert);
92 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
93 EXPECT_EQ(cert2.get(), cached_cert);
94 }
95
96 // Check that the a NULL certificate, indicating the user has declined to send
97 // a certificate, is properly cached.
98 TEST(SSLClientAuthCacheTest, LookupNullPreference) {
99 SSLClientAuthCache cache;
100 base::Time start_date = base::Time::Now();
101 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1);
102
103 std::string server1("foo:443");
104 scoped_refptr<X509Certificate> cert1(
105 new X509Certificate("foo", "CA", start_date, expiration_date));
106
107 cache.Add(server1, NULL);
108
109 X509Certificate* cached_cert = cert1.get();
110 // Make sure that |cached_cert| is updated to NULL, indicating the user
111 // declined to send a certificate to |server1|.
112 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
113 EXPECT_EQ(NULL, cached_cert);
114
115 // Remove the existing cached certificate. Make sure that |cached_cert|
116 // is still updated to NULL, but that Lookup() returns false.
117 cache.Remove(server1);
118 cached_cert = cert1.get();
119 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
120 EXPECT_EQ(NULL, cached_cert);
121
122 // Add a new preference for a specific certificate.
123 cache.Add(server1, cert1.get());
124 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
125 EXPECT_EQ(cert1.get(), cached_cert);
126
127 // Replace the specific preference with a NULL certificate.
128 cache.Add(server1, NULL);
129 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
130 EXPECT_EQ(NULL, cached_cert);
79 } 131 }
80 132
81 } // namespace net 133 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698