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

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: Fix unittest failures 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
« no previous file with comments | « net/base/ssl_client_auth_cache.cc ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 scoped_refptr<X509Certificate> cached_cert;
30 // Lookup non-existent client certificate. 32 // Lookup non-existent client certificate.
31 EXPECT_TRUE(cache.Lookup(server1) == NULL); 33 cached_cert = NULL;
34 EXPECT_FALSE(cache.Lookup(server1, &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);
35 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 38 cached_cert = NULL;
39 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
40 EXPECT_EQ(cert1, cached_cert);
36 41
37 // Add client certificate for server2. 42 // Add client certificate for server2.
38 cache.Add(server2, cert2.get()); 43 cache.Add(server2, cert2);
39 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 44 cached_cert = NULL;
40 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 45 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
46 EXPECT_EQ(cert1, cached_cert.get());
47 cached_cert = NULL;
48 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
49 EXPECT_EQ(cert2, cached_cert);
41 50
42 // Overwrite the client certificate for server1. 51 // Overwrite the client certificate for server1.
43 cache.Add(server1, cert3.get()); 52 cache.Add(server1, cert3);
44 EXPECT_EQ(cert3.get(), cache.Lookup(server1)); 53 cached_cert = NULL;
45 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 54 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
55 EXPECT_EQ(cert3, cached_cert);
56 cached_cert = NULL;
57 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
58 EXPECT_EQ(cert2, cached_cert);
46 59
47 // Remove client certificate of server1. 60 // Remove client certificate of server1.
48 cache.Remove(server1); 61 cache.Remove(server1);
49 EXPECT_TRUE(cache.Lookup(server1) == NULL); 62 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
wtc 2010/11/18 18:55:55 Nit: for consistency, may want to add cached_cer
50 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 63 cached_cert = NULL;
64 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
65 EXPECT_EQ(cert2, cached_cert);
51 66
52 // Remove non-existent client certificate. 67 // Remove non-existent client certificate.
53 cache.Remove(server1); 68 cache.Remove(server1);
54 EXPECT_TRUE(cache.Lookup(server1) == NULL); 69 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
55 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 70 cached_cert = NULL;
71 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
72 EXPECT_EQ(cert2, cached_cert);
56 } 73 }
57 74
58 // Check that if the server differs only by port number, it is considered 75 // Check that if the server differs only by port number, it is considered
59 // a separate server. 76 // a separate server.
60 TEST(SSLClientAuthCacheTest, LookupWithPort) { 77 TEST(SSLClientAuthCacheTest, LookupWithPort) {
61 SSLClientAuthCache cache; 78 SSLClientAuthCache cache;
62 79
63 base::Time start_date = base::Time::Now(); 80 base::Time start_date = base::Time::Now();
64 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1); 81 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1);
65 82
66 std::string server1("foo:443"); 83 std::string server1("foo:443");
67 scoped_refptr<X509Certificate> cert1( 84 scoped_refptr<X509Certificate> cert1(
68 new X509Certificate("foo", "CA", start_date, expiration_date)); 85 new X509Certificate("foo", "CA", start_date, expiration_date));
69 86
70 std::string server2("foo:8443"); 87 std::string server2("foo:8443");
71 scoped_refptr<X509Certificate> cert2( 88 scoped_refptr<X509Certificate> cert2(
72 new X509Certificate("foo", "CA", start_date, expiration_date)); 89 new X509Certificate("foo", "CA", start_date, expiration_date));
73 90
74 cache.Add(server1, cert1.get()); 91 cache.Add(server1, cert1.get());
75 cache.Add(server2, cert2.get()); 92 cache.Add(server2, cert2.get());
76 93
77 EXPECT_EQ(cert1.get(), cache.Lookup(server1)); 94 scoped_refptr<X509Certificate> cached_cert;
78 EXPECT_EQ(cert2.get(), cache.Lookup(server2)); 95 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
96 EXPECT_EQ(cert1.get(), cached_cert);
97 EXPECT_TRUE(cache.Lookup(server2, &cached_cert));
98 EXPECT_EQ(cert2.get(), cached_cert);
99 }
100
101 // Check that the a NULL certificate, indicating the user has declined to send
102 // a certificate, is properly cached.
103 TEST(SSLClientAuthCacheTest, LookupNullPreference) {
104 SSLClientAuthCache cache;
105 base::Time start_date = base::Time::Now();
106 base::Time expiration_date = start_date + base::TimeDelta::FromDays(1);
107
108 std::string server1("foo:443");
109 scoped_refptr<X509Certificate> cert1(
110 new X509Certificate("foo", "CA", start_date, expiration_date));
111
112 cache.Add(server1, NULL);
113
114 scoped_refptr<X509Certificate> cached_cert(cert1);
115 // Make sure that |cached_cert| is updated to NULL, indicating the user
116 // declined to send a certificate to |server1|.
117 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
118 EXPECT_EQ(NULL, cached_cert.get());
119
120 // Remove the existing cached certificate.
121 cache.Remove(server1);
122 cached_cert = NULL;
123 EXPECT_FALSE(cache.Lookup(server1, &cached_cert));
124
125 // Add a new preference for a specific certificate.
126 cache.Add(server1, cert1);
127 cached_cert = NULL;
128 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
129 EXPECT_EQ(cert1, cached_cert);
130
131 // Replace the specific preference with a NULL certificate.
132 cache.Add(server1, NULL);
133 cached_cert = NULL;
134 EXPECT_TRUE(cache.Lookup(server1, &cached_cert));
135 EXPECT_EQ(NULL, cached_cert.get());
79 } 136 }
80 137
81 } // namespace net 138 } // namespace net
OLDNEW
« no previous file with comments | « net/base/ssl_client_auth_cache.cc ('k') | net/http/http_network_transaction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698