12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 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) 5b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#ifndef NET_TEST_SPAWNED_TEST_SERVER_BASE_TEST_SERVER_H_ 6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#define NET_TEST_SPAWNED_TEST_SERVER_BASE_TEST_SERVER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/host_port_pair.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AddressList; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ScopedPortException; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The base class of Test server implementation. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BaseTestServer { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::pair<std::string, std::string> StringPair; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Following types represent protocol schemes. See also 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://www.iana.org/assignments/uri-schemes.html 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_BASIC_AUTH_PROXY, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_FTP, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_HTTP, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_HTTPS, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_WS, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_WSS, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_TCP_ECHO, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_UDP_ECHO, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Container for various options to control how the HTTPS or WSS server is 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialized. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct SSLOptions { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum ServerCertificate { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CERT_OK, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CERT_AUTO causes the testserver to generate a test certificate issued 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by "Testing CA" (see net/data/ssl/certificates/ocsp-test-root.pem). 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CERT_AUTO, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CERT_MISMATCHED_NAME, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CERT_EXPIRED, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cross-signed certificate to test PKIX path building. Contains an 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // intermediate cross-signed by an unknown root, while the client (via 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TestRootStore) is expected to have a self-signed version of the 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // intermediate. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CERT_CHAIN_WRONG_ROOT, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OCSPStatus enumerates the types of OCSP response that the testserver 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can produce. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum OCSPStatus { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSP_OK, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSP_REVOKED, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSP_INVALID, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSP_UNAUTHORIZED, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSP_UNKNOWN, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bitmask of bulk encryption algorithms that the test server supports 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and that can be selectively enabled or disabled. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum BulkCipher { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Special value used to indicate that any algorithm the server supports 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is acceptable. Preferred over explicitly OR-ing all ciphers. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BULK_CIPHER_ANY = 0, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BULK_CIPHER_RC4 = (1 << 0), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BULK_CIPHER_AES128 = (1 << 1), 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BULK_CIPHER_AES256 = (1 << 2), 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: 3DES support in the Python test server has external 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dependencies and not be available on all machines. Clients may not 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be able to connect if only 3DES is specified. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BULK_CIPHER_3DES = (1 << 3), 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: the values of these enumerators are passed to the the Python test 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // server. Do not change them. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum TLSIntolerantLevel { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TLS_INTOLERANT_NONE = 0, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TLS_INTOLERANT_ALL = 1, // Intolerant of all TLS versions. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TLS_INTOLERANT_TLS1_1 = 2, // Intolerant of TLS 1.1 or higher. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TLS_INTOLERANT_TLS1_2 = 3, // Intolerant of TLS 1.2 or higher. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize a new SSLOptions using CERT_OK as the certificate. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLOptions(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize a new SSLOptions that will use the specified certificate. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SSLOptions(ServerCertificate cert); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SSLOptions(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the relative filename of the file that contains the 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |server_certificate|. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath GetCertificateFile() const; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetOCSPArgument returns the value of any OCSP argument to testserver or 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the empty string if there is none. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetOCSPArgument() const; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The certificate to use when serving requests. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ServerCertificate server_certificate; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |server_certificate==CERT_AUTO| then this determines the type of OCSP 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // response returned. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OCSPStatus ocsp_status; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // If not zero, |cert_serial| will be the serial number of the 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // auto-generated leaf certificate when |server_certificate==CERT_AUTO|. 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint64 cert_serial; 126a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if a CertificateRequest should be sent to the client during 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handshaking. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool request_client_certificate; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |request_client_certificate| is true, an optional list of files, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // each containing a single, PEM-encoded X.509 certificates. The subject 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // from each certificate will be added to the certificate_authorities 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // field of the CertificateRequest. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<base::FilePath> client_authorities; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A bitwise-OR of BulkCipher that should be used by the 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTPS server, or BULK_CIPHER_ANY to indicate that all implemented 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ciphers are acceptable. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int bulk_ciphers; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If true, pass the --https-record-resume argument to testserver.py which 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // causes it to log session cache actions and echo the log on 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // /ssl-session-cache. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool record_resume; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If not TLS_INTOLERANT_NONE, the server will abort any handshake that 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // negotiates an intolerant TLS version in order to test version fallback. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TLSIntolerantLevel tls_intolerant; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pass as the 'host' parameter during construction to server on 127.0.0.1 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kLocalhost[]; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize a TestServer listening on a specific host (IP or hostname). 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BaseTestServer(Type type, const std::string& host); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize a TestServer with a specific set of SSLOptions for HTTPS or WSS. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit BaseTestServer(Type type, const SSLOptions& ssl_options); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the host port pair used by current Python based test server only 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the server is started. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const HostPortPair& host_port_pair() const; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& document_root() const { return document_root_; } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& server_data() const; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetScheme() const; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetAddressList(AddressList* address_list) const WARN_UNUSED_RESULT; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetURL(const std::string& path) const; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetURLWithUser(const std::string& path, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user) const; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetURLWithUserAndPassword(const std::string& path, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& password) const; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GetFilePathWithReplacements( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& original_path, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<StringPair>& text_to_replace, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* replacement_path); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool UsingSSL(Type type) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return type == BaseTestServer::TYPE_HTTPS || 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type == BaseTestServer::TYPE_WSS; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BaseTestServer(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type() const { return type_; } 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets port currently assigned to host_port_pair_ without checking 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether it's available (server started) or not. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 GetPort(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets |port| as the actual port used by Python based test server. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPort(uint16 port); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up internal status when the server is started. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SetupWhenServerStarted() WARN_UNUSED_RESULT; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clean up internal status when starting to stop server. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CleanUpWhenStoppingServer(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set path of test resources. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetResourcePath(const base::FilePath& document_root, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& certificates_dir); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parses the server data read from the test server. Returns true 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on success. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ParseServerData(const std::string& server_data) WARN_UNUSED_RESULT; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Generates a DictionaryValue with the arguments for launching the external 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Python test server. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GenerateArguments(base::DictionaryValue* arguments) const 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WARN_UNUSED_RESULT; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subclasses can override this to add arguments that are specific to their 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // own test servers. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GenerateAdditionalArguments( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* arguments) const WARN_UNUSED_RESULT; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Init(const std::string& host); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Marks the root certificate of an HTTPS test server as trusted for 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the duration of tests. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool LoadTestRootCert() const WARN_UNUSED_RESULT; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Document root of the test server. 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath document_root_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Directory that contains the SSL certificates. 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath certificates_dir_; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Address the test server listens on. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostPortPair host_port_pair_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Holds the data sent from the server (e.g., port number). 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::DictionaryValue> server_data_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |type_| is TYPE_HTTPS or TYPE_WSS, the TLS settings to use for the test 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // server. 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLOptions ssl_options_; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Has the server been started? 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool started_; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables logging of the server to the console. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool log_to_console_; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ScopedPortException> allowed_port_; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BaseTestServer); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif // NET_TEST_SPAWNED_TEST_SERVER_BASE_TEST_SERVER_H_ 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 264