Index: remoting/host/it2me/it2me_host_unittest.cc |
diff --git a/remoting/host/it2me/it2me_host_unittest.cc b/remoting/host/it2me/it2me_host_unittest.cc |
index d3919f6bf4a961923530184143031048e32a782f..ef53af73b0c26cbf4f098d662deb74fcfa1dc59b 100644 |
--- a/remoting/host/it2me/it2me_host_unittest.cc |
+++ b/remoting/host/it2me/it2me_host_unittest.cc |
@@ -12,6 +12,7 @@ |
#include "base/callback.h" |
#include "base/location.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "base/memory/ref_counted.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
@@ -19,6 +20,7 @@ |
#include "components/policy/policy_constants.h" |
#include "remoting/base/auto_thread_task_runner.h" |
#include "remoting/host/chromoting_host_context.h" |
+#include "remoting/host/it2me/it2me_confirmation_dialog.h" |
#include "remoting/host/policy_watcher.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -26,11 +28,15 @@ namespace remoting { |
namespace { |
+// Shortening some type names for readability. |
typedef protocol::ValidatingAuthenticator::Result ValidationResult; |
+typedef It2MeConfirmationDialog::Result DialogResult; |
+const char kTestClientUserName[] = "ficticious_user@gmail.com"; |
const char kTestClientJid[] = "ficticious_user@gmail.com/jid_resource"; |
const char kTestClientUsernameNoJid[] = "completely_ficticious_user@gmail.com"; |
const char kTestClientJidWithSlash[] = "fake/user@gmail.com/jid_resource"; |
+const char kResourceOnly[] = "/jid_resource"; |
const char kMatchingDomain[] = "gmail.com"; |
const char kMismatchedDomain1[] = "similar_to_gmail.com"; |
const char kMismatchedDomain2[] = "gmail_at_the_beginning.com"; |
@@ -38,6 +44,69 @@ const char kMismatchedDomain3[] = "not_even_close.com"; |
} // namespace |
+class FakeIt2MeConfirmationDialog : public It2MeConfirmationDialog { |
+ public: |
+ FakeIt2MeConfirmationDialog(); |
+ ~FakeIt2MeConfirmationDialog() override; |
+ |
+ // It2MeConfirmationDialog implementation. |
+ void Show(const std::string& remote_user_email, |
+ const ResultCallback& callback) override; |
+ |
+ void set_dialog_result(DialogResult dialog_result) { |
+ dialog_result_ = dialog_result; |
+ } |
+ |
+ const std::string& get_remote_user_email() { return remote_user_email_; } |
+ |
+ private: |
+ std::string remote_user_email_; |
+ DialogResult dialog_result_ = DialogResult::OK; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeIt2MeConfirmationDialog); |
+}; |
+ |
+FakeIt2MeConfirmationDialog::FakeIt2MeConfirmationDialog() {} |
+ |
+FakeIt2MeConfirmationDialog::~FakeIt2MeConfirmationDialog() {} |
+ |
+void FakeIt2MeConfirmationDialog::Show(const std::string& remote_user_email, |
+ const ResultCallback& callback) { |
+ remote_user_email_ = remote_user_email; |
+ |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(callback, dialog_result_)); |
+} |
+ |
+class FakeIt2MeConfirmationDialogFactory |
+ : public It2MeConfirmationDialogFactory { |
+ public: |
+ FakeIt2MeConfirmationDialogFactory(); |
+ ~FakeIt2MeConfirmationDialogFactory() override; |
+ |
+ // It2MeConfirmationDialogFactory override. |
+ std::unique_ptr<It2MeConfirmationDialog> Create() override; |
+ |
+ void set_confirmation_dialog( |
+ std::unique_ptr<It2MeConfirmationDialog> confirmation_dialog) { |
+ confirmation_dialog_ = std::move(confirmation_dialog); |
+ } |
+ |
+ private: |
+ std::unique_ptr<It2MeConfirmationDialog> confirmation_dialog_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FakeIt2MeConfirmationDialogFactory); |
+}; |
+ |
+FakeIt2MeConfirmationDialogFactory::FakeIt2MeConfirmationDialogFactory() {} |
+ |
+FakeIt2MeConfirmationDialogFactory::~FakeIt2MeConfirmationDialogFactory() {} |
+ |
+std::unique_ptr<It2MeConfirmationDialog> |
+FakeIt2MeConfirmationDialogFactory::Create() { |
+ return std::move(confirmation_dialog_); |
+} |
+ |
class It2MeHostTest : public testing::Test { |
public: |
It2MeHostTest() {} |
@@ -57,6 +126,9 @@ class It2MeHostTest : public testing::Test { |
ValidationResult validation_result_ = ValidationResult::SUCCESS; |
+ // Used to set ConfirmationDialog behavior. |
+ FakeIt2MeConfirmationDialogFactory* fake_dialog_factory_ = nullptr; |
+ |
private: |
std::unique_ptr<base::MessageLoop> message_loop_; |
std::unique_ptr<base::RunLoop> run_loop_; |
@@ -73,13 +145,13 @@ void It2MeHostTest::SetUp() { |
message_loop_.reset(new base::MessageLoop()); |
run_loop_.reset(new base::RunLoop()); |
+ fake_dialog_factory_ = new FakeIt2MeConfirmationDialogFactory(); |
scoped_refptr<AutoThreadTaskRunner> auto_thread_task_runner = |
new AutoThreadTaskRunner(base::ThreadTaskRunnerHandle::Get(), |
run_loop_->QuitClosure()); |
it2me_host_ = new It2MeHost( |
ChromotingHostContext::Create(auto_thread_task_runner), |
- /*policy_watcher=*/nullptr, |
- /*confirmation_dialog_factory=*/nullptr, |
+ /*policy_watcher=*/nullptr, base::WrapUnique(fake_dialog_factory_), |
/*observer=*/nullptr, xmpp_server_config_, directory_bot_jid_); |
} |
@@ -120,7 +192,7 @@ TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_ValidJid) { |
TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_InvalidJid) { |
RunValidationCallback(kTestClientUsernameNoJid); |
- ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); |
+ ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_); |
} |
TEST_F(It2MeHostTest, |
@@ -129,6 +201,11 @@ TEST_F(It2MeHostTest, |
ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); |
} |
+TEST_F(It2MeHostTest, ConnectionValidation_NoClientDomainPolicy_ResourceOnly) { |
+ RunValidationCallback(kResourceOnly); |
+ ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_); |
+} |
+ |
TEST_F(It2MeHostTest, ConnectionValidation_ClientDomainPolicy_MatchingDomain) { |
SetClientDomainPolicy(kMatchingDomain); |
RunValidationCallback(kTestClientJid); |
@@ -165,4 +242,28 @@ TEST_F(It2MeHostTest, ConnectionValidation_WrongClientDomain_MatchEnd) { |
ASSERT_EQ(ValidationResult::ERROR_INVALID_ACCOUNT, validation_result_); |
} |
+TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_NoDialog) { |
+ RunValidationCallback(kTestClientJid); |
+ ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); |
+} |
+ |
+TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_Accept) { |
+ FakeIt2MeConfirmationDialog* dialog = new FakeIt2MeConfirmationDialog(); |
+ fake_dialog_factory_->set_confirmation_dialog(base::WrapUnique(dialog)); |
+ |
+ RunValidationCallback(kTestClientJid); |
+ ASSERT_EQ(ValidationResult::SUCCESS, validation_result_); |
+ ASSERT_STREQ(kTestClientUserName, dialog->get_remote_user_email().c_str()); |
+} |
+ |
+TEST_F(It2MeHostTest, ConnectionValidation_ConfirmationDialog_Reject) { |
+ FakeIt2MeConfirmationDialog* dialog = new FakeIt2MeConfirmationDialog(); |
+ dialog->set_dialog_result(DialogResult::CANCEL); |
+ fake_dialog_factory_->set_confirmation_dialog(base::WrapUnique(dialog)); |
+ |
+ RunValidationCallback(kTestClientJid); |
+ ASSERT_EQ(ValidationResult::ERROR_REJECTED_BY_USER, validation_result_); |
+ ASSERT_STREQ(kTestClientUserName, dialog->get_remote_user_email().c_str()); |
+} |
+ |
} // namespace remoting |