blob: bfaa682ebbe6670d24b3d2950cb5ffe7f17dd5ee [file] [log] [blame]
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +00001// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <stdio.h>
6
7#include "base/at_exit.h"
8#include "base/command_line.h"
akalin@chromium.org3dfcd452010-11-18 22:29:38 +00009#include "base/file_path.h"
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +000010#include "base/logging.h"
11#include "base/message_loop.h"
12#include "net/test/test_server.h"
13
14static void PrintUsage() {
akalin@chromium.org154bb132010-11-12 02:20:27 +000015 printf("run_testserver --doc-root=relpath [--http|--https|--ftp|--sync]\n");
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +000016 printf("(NOTE: relpath should be relative to the 'src' directory)\n");
17}
18
19int main(int argc, const char* argv[]) {
20 base::AtExitManager at_exit_manager;
21 MessageLoopForIO message_loop;
22
23 // Process command line
24 CommandLine::Init(argc, argv);
25 CommandLine* command_line = CommandLine::ForCurrentProcess();
26
akalin@chromium.orgc3062de2011-01-11 01:03:36 +000027 if (!logging::InitLogging(
28 FILE_PATH_LITERAL("testserver.log"),
29 logging::LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG,
30 logging::LOCK_LOG_FILE,
31 logging::APPEND_TO_OLD_LOG_FILE,
32 logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS)) {
akalin@chromium.org3dfcd452010-11-18 22:29:38 +000033 printf("Error: could not initialize logging. Exiting.\n");
34 return -1;
35 }
36
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +000037 if (command_line->GetSwitchCount() == 0 ||
38 command_line->HasSwitch("help")) {
39 PrintUsage();
40 return -1;
41 }
42
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +000043 net::TestServer::Type server_type(net::TestServer::TYPE_HTTP);
44 if (command_line->HasSwitch("https")) {
45 server_type = net::TestServer::TYPE_HTTPS;
46 } else if (command_line->HasSwitch("ftp")) {
47 server_type = net::TestServer::TYPE_FTP;
akalin@chromium.org154bb132010-11-12 02:20:27 +000048 } else if (command_line->HasSwitch("sync")) {
49 server_type = net::TestServer::TYPE_SYNC;
50 }
51
52 FilePath doc_root = command_line->GetSwitchValuePath("doc-root");
53 if ((server_type != net::TestServer::TYPE_SYNC) && doc_root.empty()) {
54 printf("Error: --doc-root must be specified\n");
55 PrintUsage();
56 return -1;
phajdan.jr@chromium.orgefd74402010-09-03 23:54:36 +000057 }
58
59 net::TestServer test_server(server_type, doc_root);
60 if (!test_server.Start()) {
61 printf("Error: failed to start test server. Exiting.\n");
62 return -1;
63 }
64
65 printf("testserver running at %s (type ctrl+c to exit)\n",
66 test_server.host_port_pair().ToString().c_str());
67
68 message_loop.Run();
69 return 0;
70}