15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/connect_interceptor.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/platform_thread.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests are all focused ConnectInterceptor::TimedCache.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ConnectInterceptorTest, TimedCacheRecall) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creat a cache that has a long expiration so that we can test basic recall.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectInterceptor::TimedCache cache(base::TimeDelta::FromHours(1));
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url("http://google.com/anypath");
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL ssl_url("https://ssl_google.com/anypath");
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url));
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(ssl_url));
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.SetRecentlySeen(url);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cache.WasRecentlySeen(url));
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(ssl_url));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.SetRecentlySeen(ssl_url);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cache.WasRecentlySeen(url));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cache.WasRecentlySeen(ssl_url));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check that port defaults correctly in canonicalization.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_with_port("http://google.com:80/anypath");
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL ssl_url_with_port("https://ssl_google.com:443/anypath");
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cache.WasRecentlySeen(url_with_port));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(cache.WasRecentlySeen(ssl_url_with_port));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check for similar urls, to verify canonicalization isn't too generous.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL ssl_url_wrong_host("https://google.com/otherpath");
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL ssl_url_wrong_path("https://ssl_google.com/otherpath");
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL ssl_url_wrong_port("https://ssl_google.com:666/anypath");
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_wrong_scheme("ftp://google.com/anypath");
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_wrong_host("http://DOODLE.com/otherpath");
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_wrong_path("http://google.com/otherpath");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url_wrong_port("http://google.com:81/anypath");
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(ssl_url_wrong_host));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(ssl_url_wrong_path));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(ssl_url_wrong_port));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url_wrong_scheme));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url_wrong_host));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url_wrong_path));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url_wrong_port));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ConnectInterceptorTest, TimedCacheEviction) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creat a cache that has a short expiration so that we can force evictions.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ConnectInterceptor::TimedCache cache(base::TimeDelta::FromMilliseconds(1));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url("http://google.com/anypath");
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache.SetRecentlySeen(url);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sleep at least long enough to cause an eviction.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(cache.WasRecentlySeen(url));
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome_browser_net.
74