13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_PROXY_PROXY_CONFIG_SERVICE_COMMON_UNITTEST_H_
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_PROXY_PROXY_CONFIG_SERVICE_COMMON_UNITTEST_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/proxy/proxy_config.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Helper functions to describe the expected value of a
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ProxyConfig::ProxyRules, and to check for a match.
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace net {
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This structure contains our expectations on what values the ProxyRules
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// should have.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ProxyRulesExpectation {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ProxyRulesExpectation(ProxyConfig::ProxyRules::Type type,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const char* single_proxy,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const char* proxy_for_http,
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const char* proxy_for_https,
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const char* proxy_for_ftp,
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                        const char* fallback_proxy,
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        const char* flattened_bypass_rules,
27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                        bool reverse_bypass);
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Call this within an EXPECT_TRUE(), to assert that |rules| matches
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // our expected values |*this|.
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ::testing::AssertionResult Matches(
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ProxyConfig::ProxyRules& rules) const;
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates an expectation that the ProxyRules has no rules.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation Empty();
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates an expectation that the ProxyRules has nothing other than
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the specified bypass rules.
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation EmptyWithBypass(
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* flattened_bypass_rules);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates an expectation that the ProxyRules is for a single proxy
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // server for all schemes.
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation Single(const char* single_proxy,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      const char* flattened_bypass_rules);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates an expectation that the ProxyRules specifies a different
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // proxy server for each URL scheme.
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation PerScheme(const char* proxy_http,
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const char* proxy_https,
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const char* proxy_ftp,
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const char* flattened_bypass_rules);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Same as above, but additionally with a SOCKS fallback.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation PerSchemeWithSocks(
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_http,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_https,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_ftp,
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const char* fallback_proxy,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* flattened_bypass_rules);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Same as PerScheme, but with the bypass rules reversed
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static ProxyRulesExpectation PerSchemeWithBypassReversed(
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_http,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_https,
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* proxy_ftp,
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const char* flattened_bypass_rules);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ProxyConfig::ProxyRules::Type type;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* single_proxy;
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* proxy_for_http;
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* proxy_for_https;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* proxy_for_ftp;
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const char* fallback_proxy;
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* flattened_bypass_rules;
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool reverse_bypass;
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace net
80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif  // NET_PROXY_PROXY_CONFIG_SERVICE_COMMON_UNITTEST_H_
82