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

Side by Side Diff: chrome/test/chromedriver/server/http_handler_unittest.cc

Issue 19616008: [chromedriver] Allow commands to be async. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 5 months 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 | « chrome/test/chromedriver/server/http_handler.cc ('k') | chrome/test/chromedriver/session.h » ('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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/test/chromedriver/chrome/log.h" 11 #include "chrome/test/chromedriver/chrome/log.h"
12 #include "chrome/test/chromedriver/chrome/status.h" 12 #include "chrome/test/chromedriver/chrome/status.h"
13 #include "chrome/test/chromedriver/command.h"
13 #include "chrome/test/chromedriver/server/http_handler.h" 14 #include "chrome/test/chromedriver/server/http_handler.h"
14 #include "chrome/test/chromedriver/server/http_response.h" 15 #include "chrome/test/chromedriver/server/http_response.h"
15 #include "net/server/http_server_request_info.h" 16 #include "net/server/http_server_request_info.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace { 19 namespace {
19 20
20 Status DummyCommand( 21 void DummyCommand(
21 Status status, 22 const Status& status,
22 const base::DictionaryValue& params, 23 const base::DictionaryValue& params,
23 const std::string& session_id, 24 const std::string& session_id,
24 scoped_ptr<base::Value>* value, 25 const CommandCallback& callback) {
25 std::string* out_session_id) { 26 callback.Run(status,
26 value->reset(new base::FundamentalValue(1)); 27 scoped_ptr<base::Value>(new base::FundamentalValue(1)),
27 *out_session_id = "session_id"; 28 "session_id");
28 return status; 29 }
30
31 void OnResponse(HttpResponse* response_to_set,
32 scoped_ptr<HttpResponse> response) {
33 *response_to_set = *response;
29 } 34 }
30 35
31 } // namespace 36 } // namespace
32 37
33 TEST(HttpHandlerTest, HandleOutsideOfBaseUrl) { 38 TEST(HttpHandlerTest, HandleOutsideOfBaseUrl) {
34 Logger log; 39 Logger log;
35 HttpHandler handler(&log, "base/url/"); 40 HttpHandler handler(&log, "base/url/");
36 net::HttpServerRequestInfo request; 41 net::HttpServerRequestInfo request;
37 request.method = "get"; 42 request.method = "get";
38 request.path = "base/path"; 43 request.path = "base/path";
39 request.data = "body"; 44 request.data = "body";
40 HttpResponse response; 45 HttpResponse response;
41 handler.Handle(request, &response); 46 handler.Handle(request, base::Bind(&OnResponse, &response));
42 ASSERT_EQ(HttpResponse::kBadRequest, response.status()); 47 ASSERT_EQ(HttpResponse::kBadRequest, response.status());
43 } 48 }
44 49
45 TEST(HttpHandlerTest, HandleUnknownCommand) { 50 TEST(HttpHandlerTest, HandleUnknownCommand) {
46 Logger log; 51 Logger log;
47 HttpHandler handler(&log, "/"); 52 HttpHandler handler(&log, "/");
48 net::HttpServerRequestInfo request; 53 net::HttpServerRequestInfo request;
49 request.method = "get"; 54 request.method = "get";
50 request.path = "/path"; 55 request.path = "/path";
51 HttpResponse response; 56 HttpResponse response;
52 handler.Handle(request, &response); 57 handler.Handle(request, base::Bind(&OnResponse, &response));
53 ASSERT_EQ(HttpResponse::kNotFound, response.status()); 58 ASSERT_EQ(HttpResponse::kNotFound, response.status());
54 } 59 }
55 60
56 TEST(HttpHandlerTest, HandleNewSession) { 61 TEST(HttpHandlerTest, HandleNewSession) {
57 Logger log; 62 Logger log;
58 HttpHandler handler(&log, "/base/"); 63 HttpHandler handler(&log, "/base/");
59 handler.command_map_.reset(new HttpHandler::CommandMap()); 64 handler.command_map_.reset(new HttpHandler::CommandMap());
60 handler.command_map_->push_back( 65 handler.command_map_->push_back(
61 CommandMapping(kPost, internal::kNewSessionPathPattern, 66 CommandMapping(kPost, internal::kNewSessionPathPattern,
62 base::Bind(&DummyCommand, Status(kOk)))); 67 base::Bind(&DummyCommand, Status(kOk))));
63 net::HttpServerRequestInfo request; 68 net::HttpServerRequestInfo request;
64 request.method = "post"; 69 request.method = "post";
65 request.path = "/base/session"; 70 request.path = "/base/session";
66 HttpResponse response; 71 HttpResponse response;
67 handler.Handle(request, &response); 72 handler.Handle(request, base::Bind(&OnResponse, &response));
68 ASSERT_EQ(HttpResponse::kSeeOther, response.status()); 73 ASSERT_EQ(HttpResponse::kSeeOther, response.status());
69 std::string location; 74 std::string location;
70 ASSERT_TRUE(response.GetHeader("Location", &location)); 75 ASSERT_TRUE(response.GetHeader("Location", &location));
71 std::string prefix = "/base/session/"; 76 std::string prefix = "/base/session/";
72 ASSERT_EQ(prefix, location.substr(0, prefix.length())); 77 ASSERT_EQ(prefix, location.substr(0, prefix.length()));
73 } 78 }
74 79
75 TEST(HttpHandlerTest, HandleInvalidPost) { 80 TEST(HttpHandlerTest, HandleInvalidPost) {
76 Logger log; 81 Logger log;
77 HttpHandler handler(&log, "/"); 82 HttpHandler handler(&log, "/");
78 handler.command_map_->push_back( 83 handler.command_map_->push_back(
79 CommandMapping(kPost, "path", base::Bind(&DummyCommand, Status(kOk)))); 84 CommandMapping(kPost, "path", base::Bind(&DummyCommand, Status(kOk))));
80 net::HttpServerRequestInfo request; 85 net::HttpServerRequestInfo request;
81 request.method = "post"; 86 request.method = "post";
82 request.path = "/path"; 87 request.path = "/path";
83 request.data = "should be a dictionary"; 88 request.data = "should be a dictionary";
84 HttpResponse response; 89 HttpResponse response;
85 handler.Handle(request, &response); 90 handler.Handle(request, base::Bind(&OnResponse, &response));
86 ASSERT_EQ(HttpResponse::kBadRequest, response.status()); 91 ASSERT_EQ(HttpResponse::kBadRequest, response.status());
87 } 92 }
88 93
89 TEST(HttpHandlerTest, HandleUnimplementedCommand) { 94 TEST(HttpHandlerTest, HandleUnimplementedCommand) {
90 Logger log; 95 Logger log;
91 HttpHandler handler(&log, "/"); 96 HttpHandler handler(&log, "/");
92 handler.command_map_->push_back( 97 handler.command_map_->push_back(
93 CommandMapping(kPost, "path", 98 CommandMapping(kPost, "path",
94 base::Bind(&DummyCommand, Status(kUnknownCommand)))); 99 base::Bind(&DummyCommand, Status(kUnknownCommand))));
95 net::HttpServerRequestInfo request; 100 net::HttpServerRequestInfo request;
96 request.method = "post"; 101 request.method = "post";
97 request.path = "/path"; 102 request.path = "/path";
98 HttpResponse response; 103 HttpResponse response;
99 handler.Handle(request, &response); 104 handler.Handle(request, base::Bind(&OnResponse, &response));
100 ASSERT_EQ(HttpResponse::kNotImplemented, response.status()); 105 ASSERT_EQ(HttpResponse::kNotImplemented, response.status());
101 } 106 }
102 107
103 TEST(HttpHandlerTest, HandleCommand) { 108 TEST(HttpHandlerTest, HandleCommand) {
104 Logger log; 109 Logger log;
105 HttpHandler handler(&log, "/"); 110 HttpHandler handler(&log, "/");
106 handler.command_map_->push_back( 111 handler.command_map_->push_back(
107 CommandMapping(kPost, "path", base::Bind(&DummyCommand, Status(kOk)))); 112 CommandMapping(kPost, "path", base::Bind(&DummyCommand, Status(kOk))));
108 net::HttpServerRequestInfo request; 113 net::HttpServerRequestInfo request;
109 request.method = "post"; 114 request.method = "post";
110 request.path = "/path"; 115 request.path = "/path";
111 HttpResponse response; 116 HttpResponse response;
112 handler.Handle(request, &response); 117 handler.Handle(request, base::Bind(&OnResponse, &response));
113 ASSERT_EQ(HttpResponse::kOk, response.status()); 118 ASSERT_EQ(HttpResponse::kOk, response.status());
114 std::string mime; 119 std::string mime;
115 ASSERT_TRUE(response.GetHeader("Content-Type", &mime)); 120 ASSERT_TRUE(response.GetHeader("Content-Type", &mime));
116 base::DictionaryValue body; 121 base::DictionaryValue body;
117 body.SetInteger("status", kOk); 122 body.SetInteger("status", kOk);
118 body.SetInteger("value", 1); 123 body.SetInteger("value", 1);
119 body.SetString("sessionId", "session_id"); 124 body.SetString("sessionId", "session_id");
120 std::string json; 125 std::string json;
121 base::JSONWriter::Write(&body, &json); 126 base::JSONWriter::Write(&body, &json);
122 ASSERT_STREQ(json.c_str(), response.body().c_str()); 127 ASSERT_STREQ(json.c_str(), response.body().c_str());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 ASSERT_TRUE(internal::MatchesCommand( 169 ASSERT_TRUE(internal::MatchesCommand(
165 "post", "path/1/space/2/3", command, &session_id, &params)); 170 "post", "path/1/space/2/3", command, &session_id, &params));
166 ASSERT_EQ("1", session_id); 171 ASSERT_EQ("1", session_id);
167 ASSERT_EQ(2u, params.size()); 172 ASSERT_EQ(2u, params.size());
168 std::string param; 173 std::string param;
169 ASSERT_TRUE(params.GetString("a", &param)); 174 ASSERT_TRUE(params.GetString("a", &param));
170 ASSERT_EQ("2", param); 175 ASSERT_EQ("2", param);
171 ASSERT_TRUE(params.GetString("b", &param)); 176 ASSERT_TRUE(params.GetString("b", &param));
172 ASSERT_EQ("3", param); 177 ASSERT_EQ("3", param);
173 } 178 }
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/server/http_handler.cc ('k') | chrome/test/chromedriver/session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698