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

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

Issue 2310303002: Moving It2Me confirmation prompt into the Validation callback flow (Closed)
Patch Set: Fixing a DCHECK issue. Created 4 years, 3 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_host.h" 5 #include "remoting/host/it2me/it2me_host.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h"
15 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
16 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
17 #include "base/run_loop.h" 18 #include "base/run_loop.h"
18 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
19 #include "components/policy/policy_constants.h" 20 #include "components/policy/policy_constants.h"
20 #include "remoting/base/auto_thread_task_runner.h" 21 #include "remoting/base/auto_thread_task_runner.h"
21 #include "remoting/host/chromoting_host_context.h" 22 #include "remoting/host/chromoting_host_context.h"
23 #include "remoting/host/it2me/it2me_confirmation_dialog.h"
22 #include "remoting/host/policy_watcher.h" 24 #include "remoting/host/policy_watcher.h"
23 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
24 26
25 namespace remoting { 27 namespace remoting {
26 28
27 namespace { 29 namespace {
28 30
31 // Shortening some type names for readability.
29 typedef protocol::ValidatingAuthenticator::Result ValidationResult; 32 typedef protocol::ValidatingAuthenticator::Result ValidationResult;
33 typedef It2MeConfirmationDialog::Result DialogResult;
30 34
35 const char kTestClientUserName[] = "ficticious_user@gmail.com";
31 const char kTestClientJid[] = "ficticious_user@gmail.com/jid_resource"; 36 const char kTestClientJid[] = "ficticious_user@gmail.com/jid_resource";
32 const char kTestClientUsernameNoJid[] = "completely_ficticious_user@gmail.com"; 37 const char kTestClientUsernameNoJid[] = "completely_ficticious_user@gmail.com";
33 const char kTestClientJidWithSlash[] = "fake/user@gmail.com/jid_resource"; 38 const char kTestClientJidWithSlash[] = "fake/user@gmail.com/jid_resource";
34 const char kMatchingDomain[] = "gmail.com"; 39 const char kMatchingDomain[] = "gmail.com";
35 const char kMismatchedDomain1[] = "similar_to_gmail.com"; 40 const char kMismatchedDomain1[] = "similar_to_gmail.com";
36 const char kMismatchedDomain2[] = "gmail_at_the_beginning.com"; 41 const char kMismatchedDomain2[] = "gmail_at_the_beginning.com";
37 const char kMismatchedDomain3[] = "not_even_close.com"; 42 const char kMismatchedDomain3[] = "not_even_close.com";
38 43
39 } // namespace 44 } // namespace
40 45
46 class FakeIt2MeConfirmationDialog : public It2MeConfirmationDialog {
47 public:
48 FakeIt2MeConfirmationDialog();
49 ~FakeIt2MeConfirmationDialog() override;
50
51 // It2MeConfirmationDialog implementation.
52 void Show(const std::string& remote_user_email,
53 const ResultCallback& callback) override;
54
55 void set_dialog_result(DialogResult dialog_result) {
56 dialog_result_ = dialog_result;
57 }
58
59 const std::string& get_remote_user_email() { return remote_user_email_; }
60
61 private:
62 std::string remote_user_email_;
63 DialogResult dialog_result_ = DialogResult::OK;
64
65 DISALLOW_COPY_AND_ASSIGN(FakeIt2MeConfirmationDialog);
66 };
67
68 FakeIt2MeConfirmationDialog::FakeIt2MeConfirmationDialog() {}
69
70 FakeIt2MeConfirmationDialog::~FakeIt2MeConfirmationDialog() {}
71
72 void FakeIt2MeConfirmationDialog::Show(const std::string& remote_user_email,
73 const ResultCallback& callback) {
74 remote_user_email_ = remote_user_email;
75
76 base::ThreadTaskRunnerHandle::Get()->PostTask(
77 FROM_HERE, base::Bind(callback, dialog_result_));
78 }
79
80 class FakeIt2MeConfirmationDialogFactory
81 : public It2MeConfirmationDialogFactory {
82 public:
83 FakeIt2MeConfirmationDialogFactory();
84 ~FakeIt2MeConfirmationDialogFactory() override;
85
86 // It2MeConfirmationDialogFactory override.
87 std::unique_ptr<It2MeConfirmationDialog> Create() override;
88
89 void set_confirmation_dialog(
90 std::unique_ptr<It2MeConfirmationDialog> confirmation_dialog) {
91 confirmation_dialog_ = std::move(confirmation_dialog);
92 }
93
94 private:
95 std::unique_ptr<It2MeConfirmationDialog> confirmation_dialog_;
96
97 DISALLOW_COPY_AND_ASSIGN(FakeIt2MeConfirmationDialogFactory);
98 };
99
100 FakeIt2MeConfirmationDialogFactory::FakeIt2MeConfirmationDialogFactory() {}
101
102 FakeIt2MeConfirmationDialogFactory::~FakeIt2MeConfirmationDialogFactory() {}
103
104 std::unique_ptr<It2MeConfirmationDialog>
105 FakeIt2MeConfirmationDialogFactory::Create() {
106 return std::move(confirmation_dialog_);
107 }
108
41 class It2MeHostTest : public testing::Test { 109 class It2MeHostTest : public testing::Test {
42 public: 110 public:
43 It2MeHostTest() {} 111 It2MeHostTest() {}
44 ~It2MeHostTest() override {} 112 ~It2MeHostTest() override {}
45 113
46 // testing::Test interface. 114 // testing::Test interface.
47 void SetUp() override; 115 void SetUp() override;
48 void TearDown() override; 116 void TearDown() override;
49 117
50 void OnValidationComplete(const base::Closure& resume_callback, 118 void OnValidationComplete(const base::Closure& resume_callback,
51 ValidationResult validation_result); 119 ValidationResult validation_result);
52 120
53 protected: 121 protected:
54 void SetClientDomainPolicy(const std::string& policy_value); 122 void SetClientDomainPolicy(const std::string& policy_value);
55 123
56 void RunValidationCallback(const std::string& remote_jid); 124 void RunValidationCallback(const std::string& remote_jid);
57 125
58 ValidationResult validation_result_ = ValidationResult::SUCCESS; 126 ValidationResult validation_result_ = ValidationResult::SUCCESS;
59 127
128 // Used to set ConfirmationDialog behavior.
129 FakeIt2MeConfirmationDialogFactory* fake_dialog_factory_ = nullptr;
130
60 private: 131 private:
61 std::unique_ptr<base::MessageLoop> message_loop_; 132 std::unique_ptr<base::MessageLoop> message_loop_;
62 std::unique_ptr<base::RunLoop> run_loop_; 133 std::unique_ptr<base::RunLoop> run_loop_;
63 134
64 scoped_refptr<It2MeHost> it2me_host_; 135 scoped_refptr<It2MeHost> it2me_host_;
65 136
66 std::string directory_bot_jid_; 137 std::string directory_bot_jid_;
67 XmppSignalStrategy::XmppServerConfig xmpp_server_config_; 138 XmppSignalStrategy::XmppServerConfig xmpp_server_config_;
68 139
69 DISALLOW_COPY_AND_ASSIGN(It2MeHostTest); 140 DISALLOW_COPY_AND_ASSIGN(It2MeHostTest);
70 }; 141 };
71 142
72 void It2MeHostTest::SetUp() { 143 void It2MeHostTest::SetUp() {
73 message_loop_.reset(new base::MessageLoop()); 144 message_loop_.reset(new base::MessageLoop());
74 run_loop_.reset(new base::RunLoop()); 145 run_loop_.reset(new base::RunLoop());
75 146
147 fake_dialog_factory_ = new FakeIt2MeConfirmationDialogFactory();
76 scoped_refptr<AutoThreadTaskRunner> auto_thread_task_runner = 148 scoped_refptr<AutoThreadTaskRunner> auto_thread_task_runner =
77 new AutoThreadTaskRunner(base::ThreadTaskRunnerHandle::Get(), 149 new AutoThreadTaskRunner(base::ThreadTaskRunnerHandle::Get(),
78 run_loop_->QuitClosure()); 150 run_loop_->QuitClosure());
79 it2me_host_ = new It2MeHost( 151 it2me_host_ = new It2MeHost(
80 ChromotingHostContext::Create(auto_thread_task_runner), 152 ChromotingHostContext::Create(auto_thread_task_runner),
81 /*policy_watcher=*/nullptr, 153 /*policy_watcher=*/nullptr, base::WrapUnique(fake_dialog_factory_),
82 /*confirmation_dialog_factory=*/nullptr,
83 /*observer=*/nullptr, xmpp_server_config_, directory_bot_jid_); 154 /*observer=*/nullptr, xmpp_server_config_, directory_bot_jid_);
84 } 155 }
85 156
86 void It2MeHostTest::TearDown() { 157 void It2MeHostTest::TearDown() {
87 it2me_host_ = nullptr; 158 it2me_host_ = nullptr;
88 run_loop_->Run(); 159 run_loop_->Run();
89 } 160 }
90 161
91 void It2MeHostTest::OnValidationComplete(const base::Closure& resume_callback, 162 void It2MeHostTest::OnValidationComplete(const base::Closure& resume_callback,
92 ValidationResult validation_result) { 163 ValidationResult validation_result) {
(...skipping 20 matching lines...) Expand all
113 run_loop.Run(); 184 run_loop.Run();
114 } 185 }
115 186
116 TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_ValidJid) { 187 TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_ValidJid) {
117 RunValidationCallback(kTestClientJid); 188 RunValidationCallback(kTestClientJid);
118 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); 189 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_);
119 } 190 }
120 191
121 TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_InvalidJid) { 192 TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_InvalidJid) {
122 RunValidationCallback(kTestClientUsernameNoJid); 193 RunValidationCallback(kTestClientUsernameNoJid);
123 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); 194 ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_);
124 } 195 }
125 196
126 TEST_F(It2MeHostTest, 197 TEST_F(It2MeHostTest,
127 ConnectionValidation_NoClientDomainPolicy_InvalidUsername) { 198 ConnectionValidation_NoClientDomainPolicy_InvalidUsername) {
128 RunValidationCallback(kTestClientJidWithSlash); 199 RunValidationCallback(kTestClientJidWithSlash);
129 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); 200 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_);
130 } 201 }
131 202
132 TEST_F(It2MeHostTest, ConnectionValidation_ClientDomainPolicy_MatchingDomain) { 203 TEST_F(It2MeHostTest, ConnectionValidation_ClientDomainPolicy_MatchingDomain) {
133 SetClientDomainPolicy(kMatchingDomain); 204 SetClientDomainPolicy(kMatchingDomain);
(...skipping 24 matching lines...) Expand all
158 RunValidationCallback(kTestClientJid); 229 RunValidationCallback(kTestClientJid);
159 ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_); 230 ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_);
160 } 231 }
161 232
162 TEST_F(It2MeHostTest, ConnectionValidation_WrongClientDomain_MatchEnd) { 233 TEST_F(It2MeHostTest, ConnectionValidation_WrongClientDomain_MatchEnd) {
163 SetClientDomainPolicy(kMismatchedDomain1); 234 SetClientDomainPolicy(kMismatchedDomain1);
164 RunValidationCallback(kTestClientJid); 235 RunValidationCallback(kTestClientJid);
165 ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_); 236 ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_);
166 } 237 }
167 238
239 TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_NoDialog) {
240 RunValidationCallback(kTestClientJid);
241 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_);
242 }
243
244 TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_Accept) {
245 FakeIt2MeConfirmationDialog* dialog = new FakeIt2MeConfirmationDialog();
246 fake_dialog_factory_->set_confirmation_dialog(base::WrapUnique(dialog));
247
248 RunValidationCallback(kTestClientJid);
249 ASSERT_EQ(ValidationResult::SUCCESS, validation_result_);
250 ASSERT_STREQ(kTestClientUserName, dialog->get_remote_user_email().c_str());
251 }
252
253 TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_Reject) {
254 FakeIt2MeConfirmationDialog* dialog = new FakeIt2MeConfirmationDialog();
255 dialog->set_dialog_result(DialogResult::CANCEL);
256 fake_dialog_factory_->set_confirmation_dialog(base::WrapUnique(dialog));
257
258 RunValidationCallback(kTestClientJid);
259 ASSERT_EQ(ValidationResult::ERROR_REJECTED_BY_USER, validation_result_);
260 ASSERT_STREQ(kTestClientUserName, dialog->get_remote_user_email().c_str());
261 }
262
168 } // namespace remoting 263 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698