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

Side by Side Diff: remoting/host/it2me/it2me_native_messaging_host_unittest.cc

Issue 2847853003: Remove policy watching from It2MeHost. (Closed)
Patch Set: Allow PolicyWatcher to be injected into It2MeNativeMessagingHost. Created 3 years, 7 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
« no previous file with comments | « remoting/host/it2me/it2me_native_messaging_host_main.cc ('k') | remoting/host/policy_watcher.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 "remoting/host/it2me/it2me_native_messaging_host.h" 5 #include "remoting/host/it2me/it2me_native_messaging_host.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return true; 118 return true;
119 } 119 }
120 120
121 void FakePolicyService::RefreshPolicies(const base::Closure& callback) { 121 void FakePolicyService::RefreshPolicies(const base::Closure& callback) {
122 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 122 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
123 } 123 }
124 124
125 class MockIt2MeHost : public It2MeHost { 125 class MockIt2MeHost : public It2MeHost {
126 public: 126 public:
127 MockIt2MeHost(std::unique_ptr<ChromotingHostContext> context, 127 MockIt2MeHost(std::unique_ptr<ChromotingHostContext> context,
128 std::unique_ptr<PolicyWatcher> policy_watcher,
129 base::WeakPtr<It2MeHost::Observer> observer, 128 base::WeakPtr<It2MeHost::Observer> observer,
130 std::unique_ptr<SignalStrategy> signal_strategy, 129 std::unique_ptr<SignalStrategy> signal_strategy,
131 const std::string& username, 130 const std::string& username,
132 const std::string& directory_bot_jid) 131 const std::string& directory_bot_jid)
133 : It2MeHost(std::move(context), 132 : It2MeHost(std::move(context),
134 std::move(policy_watcher),
135 /*confirmation_dialog_factory=*/nullptr, 133 /*confirmation_dialog_factory=*/nullptr,
136 observer, 134 observer,
137 std::move(signal_strategy), 135 std::move(signal_strategy),
138 username, 136 username,
139 directory_bot_jid) {} 137 directory_bot_jid) {}
140 138
141 // It2MeHost overrides 139 // It2MeHost overrides
142 void Connect() override; 140 void Connect() override;
143 void Disconnect() override; 141 void Disconnect() override;
144 void RequestNatPolicy() override; 142 void RequestNatPolicy() override;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 } 199 }
202 } 200 }
203 201
204 class MockIt2MeHostFactory : public It2MeHostFactory { 202 class MockIt2MeHostFactory : public It2MeHostFactory {
205 public: 203 public:
206 MockIt2MeHostFactory(); 204 MockIt2MeHostFactory();
207 ~MockIt2MeHostFactory() override; 205 ~MockIt2MeHostFactory() override;
208 206
209 scoped_refptr<It2MeHost> CreateIt2MeHost( 207 scoped_refptr<It2MeHost> CreateIt2MeHost(
210 std::unique_ptr<ChromotingHostContext> context, 208 std::unique_ptr<ChromotingHostContext> context,
211 policy::PolicyService* policy_service,
212 base::WeakPtr<It2MeHost::Observer> observer, 209 base::WeakPtr<It2MeHost::Observer> observer,
213 std::unique_ptr<SignalStrategy> signal_strategy, 210 std::unique_ptr<SignalStrategy> signal_strategy,
214 const std::string& username, 211 const std::string& username,
215 const std::string& directory_bot_jid) override; 212 const std::string& directory_bot_jid) override;
216 213
217 private: 214 private:
218 DISALLOW_COPY_AND_ASSIGN(MockIt2MeHostFactory); 215 DISALLOW_COPY_AND_ASSIGN(MockIt2MeHostFactory);
219 }; 216 };
220 217
221 MockIt2MeHostFactory::MockIt2MeHostFactory() : It2MeHostFactory() {} 218 MockIt2MeHostFactory::MockIt2MeHostFactory() : It2MeHostFactory() {}
222 219
223 MockIt2MeHostFactory::~MockIt2MeHostFactory() {} 220 MockIt2MeHostFactory::~MockIt2MeHostFactory() {}
224 221
225 scoped_refptr<It2MeHost> MockIt2MeHostFactory::CreateIt2MeHost( 222 scoped_refptr<It2MeHost> MockIt2MeHostFactory::CreateIt2MeHost(
226 std::unique_ptr<ChromotingHostContext> context, 223 std::unique_ptr<ChromotingHostContext> context,
227 policy::PolicyService* policy_service,
228 base::WeakPtr<It2MeHost::Observer> observer, 224 base::WeakPtr<It2MeHost::Observer> observer,
229 std::unique_ptr<SignalStrategy> signal_strategy, 225 std::unique_ptr<SignalStrategy> signal_strategy,
230 const std::string& username, 226 const std::string& username,
231 const std::string& directory_bot_jid) { 227 const std::string& directory_bot_jid) {
232 return new MockIt2MeHost(std::move(context), 228 return new MockIt2MeHost(std::move(context), observer,
233 /*policy_watcher=*/nullptr, observer,
234 std::move(signal_strategy), username, 229 std::move(signal_strategy), username,
235 directory_bot_jid); 230 directory_bot_jid);
236 } 231 }
237 232
238 } // namespace 233 } // namespace
239 234
240 class It2MeNativeMessagingHostTest : public testing::Test { 235 class It2MeNativeMessagingHostTest : public testing::Test {
241 public: 236 public:
242 It2MeNativeMessagingHostTest() {} 237 It2MeNativeMessagingHostTest() {}
243 ~It2MeNativeMessagingHostTest() override {} 238 ~It2MeNativeMessagingHostTest() override {}
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 VerifyCommonProperties(std::move(response), "helloResponse", request_id); 387 VerifyCommonProperties(std::move(response), "helloResponse", request_id);
393 } 388 }
394 389
395 void It2MeNativeMessagingHostTest::VerifyErrorResponse() { 390 void It2MeNativeMessagingHostTest::VerifyErrorResponse() {
396 std::unique_ptr<base::DictionaryValue> response = ReadMessageFromOutputPipe(); 391 std::unique_ptr<base::DictionaryValue> response = ReadMessageFromOutputPipe();
397 VerifyStringProperty(std::move(response), "type", "error"); 392 VerifyStringProperty(std::move(response), "type", "error");
398 } 393 }
399 394
400 void It2MeNativeMessagingHostTest::VerifyConnectResponses(int request_id) { 395 void It2MeNativeMessagingHostTest::VerifyConnectResponses(int request_id) {
401 bool connect_response_received = false; 396 bool connect_response_received = false;
397 bool nat_policy_received = false;
402 bool starting_received = false; 398 bool starting_received = false;
403 bool requestedAccessCode_received = false; 399 bool requestedAccessCode_received = false;
404 bool receivedAccessCode_received = false; 400 bool receivedAccessCode_received = false;
405 bool connecting_received = false; 401 bool connecting_received = false;
406 bool connected_received = false; 402 bool connected_received = false;
407 403
408 // We expect a total of 6 messages: 1 connectResponse and 5 hostStateChanged. 404 // We expect a total of 7 messages: 1 connectResponse, 1 natPolicyChanged,
409 for (int i = 0; i < 6; ++i) { 405 // and 5 hostStateChanged.
406 for (int i = 0; i < 7; ++i) {
410 std::unique_ptr<base::DictionaryValue> response = 407 std::unique_ptr<base::DictionaryValue> response =
411 ReadMessageFromOutputPipe(); 408 ReadMessageFromOutputPipe();
412 ASSERT_TRUE(response); 409 ASSERT_TRUE(response);
413 410
414 std::string type; 411 std::string type;
415 ASSERT_TRUE(response->GetString("type", &type)); 412 ASSERT_TRUE(response->GetString("type", &type));
416 413
417 if (type == "connectResponse") { 414 if (type == "connectResponse") {
418 EXPECT_FALSE(connect_response_received); 415 EXPECT_FALSE(connect_response_received);
419 connect_response_received = true; 416 connect_response_received = true;
420 VerifyId(std::move(response), request_id); 417 VerifyId(std::move(response), request_id);
418 } else if (type == "natPolicyChanged") {
419 EXPECT_FALSE(nat_policy_received);
420 nat_policy_received = true;
421 } else if (type == "hostStateChanged") { 421 } else if (type == "hostStateChanged") {
422 std::string state; 422 std::string state;
423 ASSERT_TRUE(response->GetString("state", &state)); 423 ASSERT_TRUE(response->GetString("state", &state));
424 424
425 std::string value; 425 std::string value;
426 if (state == It2MeNativeMessagingHost::HostStateToString(kStarting)) { 426 if (state == It2MeNativeMessagingHost::HostStateToString(kStarting)) {
427 EXPECT_FALSE(starting_received); 427 EXPECT_FALSE(starting_received);
428 starting_received = true; 428 starting_received = true;
429 } else if (state == It2MeNativeMessagingHost::HostStateToString( 429 } else if (state == It2MeNativeMessagingHost::HostStateToString(
430 kRequestedAccessCode)) { 430 kRequestedAccessCode)) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 ASSERT_TRUE(MakePipe(&input_read_file, &input_write_file_)); 523 ASSERT_TRUE(MakePipe(&input_read_file, &input_write_file_));
524 ASSERT_TRUE(MakePipe(&output_read_file_, &output_write_file)); 524 ASSERT_TRUE(MakePipe(&output_read_file_, &output_write_file));
525 525
526 pipe_.reset(new NativeMessagingPipe()); 526 pipe_.reset(new NativeMessagingPipe());
527 527
528 std::unique_ptr<extensions::NativeMessagingChannel> channel( 528 std::unique_ptr<extensions::NativeMessagingChannel> channel(
529 new PipeMessagingChannel(std::move(input_read_file), 529 new PipeMessagingChannel(std::move(input_read_file),
530 std::move(output_write_file))); 530 std::move(output_write_file)));
531 531
532 // Creating a native messaging host with a mock It2MeHostFactory. 532 // Creating a native messaging host with a mock It2MeHostFactory.
533 std::unique_ptr<ChromotingHostContext> context =
534 ChromotingHostContext::Create(host_task_runner_);
535 std::unique_ptr<PolicyWatcher> policy_watcher = PolicyWatcher::Create(
536 fake_policy_service_.get(), context->file_task_runner());
rkjnsn 2017/05/04 22:52:40 This will still create a PolicyWatcher that reads
Jamie 2017/05/04 23:08:40 Done (it let me delete FakePolicyService entirely,
533 std::unique_ptr<extensions::NativeMessageHost> it2me_host( 537 std::unique_ptr<extensions::NativeMessageHost> it2me_host(
534 new It2MeNativeMessagingHost( 538 new It2MeNativeMessagingHost(
535 /*needs_elevation=*/false, fake_policy_service_.get(), 539 /*needs_elevation=*/false, std::move(policy_watcher),
536 ChromotingHostContext::Create(host_task_runner_), 540 std::move(context), base::WrapUnique(new MockIt2MeHostFactory())));
537 base::WrapUnique(new MockIt2MeHostFactory())));
538 it2me_host->Start(pipe_.get()); 541 it2me_host->Start(pipe_.get());
539 542
540 pipe_->Start(std::move(it2me_host), std::move(channel)); 543 pipe_->Start(std::move(it2me_host), std::move(channel));
541 544
542 // Notify the test that the host has finished starting up. 545 // Notify the test that the host has finished starting up.
543 test_message_loop_->task_runner()->PostTask( 546 test_message_loop_->task_runner()->PostTask(
544 FROM_HERE, test_run_loop_->QuitClosure()); 547 FROM_HERE, test_run_loop_->QuitClosure());
545 } 548 }
546 549
547 void It2MeNativeMessagingHostTest::ExitTest() { 550 void It2MeNativeMessagingHostTest::ExitTest() {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 EXPECT_TRUE(response); 605 EXPECT_TRUE(response);
603 std::string value; 606 std::string value;
604 EXPECT_FALSE(response->GetString("id", &value)); 607 EXPECT_FALSE(response->GetString("id", &value));
605 608
606 response = ReadMessageFromOutputPipe(); 609 response = ReadMessageFromOutputPipe();
607 EXPECT_TRUE(response); 610 EXPECT_TRUE(response);
608 EXPECT_TRUE(response->GetString("id", &value)); 611 EXPECT_TRUE(response->GetString("id", &value));
609 EXPECT_EQ("42", value); 612 EXPECT_EQ("42", value);
610 } 613 }
611 614
612 TEST_F(It2MeNativeMessagingHostTest, Connect) { 615 TEST_F(It2MeNativeMessagingHostTest, ConnectMultiple) {
613 // A new It2MeHost instance is created for every it2me session. The native 616 // A new It2MeHost instance is created for every it2me session. The native
614 // messaging host, on the other hand, is long lived. This test verifies 617 // messaging host, on the other hand, is long lived. This test verifies
615 // multiple It2Me host startup and shutdowns. 618 // multiple It2Me host startup and shutdowns.
616 for (int i = 0; i < 3; ++i) { 619 for (int i = 0; i < 3; ++i) {
617 TestConnect(); 620 TestConnect();
618 } 621 }
619 } 622 }
620 623
621 // Verify non-Dictionary requests are rejected. 624 // Verify non-Dictionary requests are rejected.
622 TEST_F(It2MeNativeMessagingHostTest, WrongFormat) { 625 TEST_F(It2MeNativeMessagingHostTest, WrongFormat) {
623 base::ListValue message; 626 base::ListValue message;
624 // No "error" response will be sent for non-Dictionary messages. 627 // No "error" response will be sent for non-Dictionary messages.
625 TestBadRequest(message, false); 628 TestBadRequest(message, false);
626 } 629 }
627 630
628 // Verify requests with no type are rejected. 631 // Verify requests with no type are rejected.
629 TEST_F(It2MeNativeMessagingHostTest, MissingType) { 632 TEST_F(It2MeNativeMessagingHostTest, MissingType) {
630 base::DictionaryValue message; 633 base::DictionaryValue message;
631 TestBadRequest(message, true); 634 TestBadRequest(message, true);
632 } 635 }
633 636
634 // Verify rejection if type is unrecognized. 637 // Verify rejection if type is unrecognized.
635 TEST_F(It2MeNativeMessagingHostTest, InvalidType) { 638 TEST_F(It2MeNativeMessagingHostTest, InvalidType) {
636 base::DictionaryValue message; 639 base::DictionaryValue message;
637 message.SetString("type", "xxx"); 640 message.SetString("type", "xxx");
638 TestBadRequest(message, true); 641 TestBadRequest(message, true);
639 } 642 }
640 643
641 } // namespace remoting 644 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/it2me/it2me_native_messaging_host_main.cc ('k') | remoting/host/policy_watcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698