Index: remoting/protocol/validating_authenticator_unittest.cc |
diff --git a/remoting/protocol/validating_authenticator_unittest.cc b/remoting/protocol/validating_authenticator_unittest.cc |
index dd23b726c975cfe97862c8389afb733295aaacf7..2cb957dc8ec1b51397641c9cbbd55aecb60d3ad5 100644 |
--- a/remoting/protocol/validating_authenticator_unittest.cc |
+++ b/remoting/protocol/validating_authenticator_unittest.cc |
@@ -29,7 +29,7 @@ using testing::Return; |
typedef ValidatingAuthenticator::Result ValidationResult; |
-const char kRemoteTestJid[] = "ficticious_jid_for_testing"; |
+constexpr char kRemoteTestJid[] = "ficticious_jid_for_testing"; |
// testing::InvokeArgument<N> does not work with base::Callback, fortunately |
// gmock makes it simple to create action templates that do for the various |
@@ -48,6 +48,8 @@ class ValidatingAuthenticatorTest : public testing::Test { |
~ValidatingAuthenticatorTest() override; |
void ValidateCallback( |
+ ValidationResult* validation_result, |
+ bool* callback_called, |
const std::string& remote_jid, |
const ValidatingAuthenticator::ResultCallback& callback); |
@@ -63,14 +65,21 @@ class ValidatingAuthenticatorTest : public testing::Test { |
// to |validating_authenticator_|. Lifetime of the object is controlled by |
// |validating_authenticator_| so this pointer is no longer valid once |
// the owner is destroyed. |
- MockAuthenticator* mock_authenticator_ = nullptr; |
+ testing::NiceMock<MockAuthenticator>* mock_authenticator_ = nullptr; |
// This member is used to drive behavior in |validating_authenticator_| when |
- // it's validation complete callback is run. |
- ValidationResult validation_result_ = ValidationResult::SUCCESS; |
+ // its incoming validation complete callback is run. |
+ ValidationResult incoming_validation_result_ = ValidationResult::SUCCESS; |
- // Tracks whether our ValidateCallback has been called or not. |
- bool validate_complete_called_ = false; |
+ // Tracks whether our 'incoming' callback has been called or not. |
+ bool incoming_complete_called_ = false; |
+ |
+ // This member is used to drive behavior in |validating_authenticator_| when |
+ // its accepted validation complete callback is run. |
+ ValidationResult accepted_validation_result_ = ValidationResult::SUCCESS; |
+ |
+ // Tracks whether our 'accepted' callback has been called or not. |
+ bool accepted_complete_called_ = false; |
// The object under test. |
std::unique_ptr<ValidatingAuthenticator> validating_authenticator_; |
@@ -86,19 +95,26 @@ ValidatingAuthenticatorTest::ValidatingAuthenticatorTest() {} |
ValidatingAuthenticatorTest::~ValidatingAuthenticatorTest() {} |
void ValidatingAuthenticatorTest::ValidateCallback( |
+ ValidationResult* validation_result, |
+ bool* callback_called, |
const std::string& remote_jid, |
const ValidatingAuthenticator::ResultCallback& callback) { |
- validate_complete_called_ = true; |
- callback.Run(validation_result_); |
+ *callback_called = true; |
+ callback.Run(*validation_result); |
} |
void ValidatingAuthenticatorTest::SetUp() { |
- mock_authenticator_ = new MockAuthenticator(); |
+ mock_authenticator_ = new testing::NiceMock<MockAuthenticator>(); |
std::unique_ptr<Authenticator> authenticator(mock_authenticator_); |
validating_authenticator_.reset(new ValidatingAuthenticator( |
- kRemoteTestJid, base::Bind(&ValidatingAuthenticatorTest::ValidateCallback, |
- base::Unretained(this)), |
+ kRemoteTestJid, |
+ base::Bind(&ValidatingAuthenticatorTest::ValidateCallback, |
+ base::Unretained(this), &incoming_validation_result_, |
+ &incoming_complete_called_), |
+ base::Bind(&ValidatingAuthenticatorTest::ValidateCallback, |
+ base::Unretained(this), &accepted_validation_result_, |
+ &accepted_complete_called_), |
std::move(authenticator))); |
} |
@@ -120,7 +136,8 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_SingleMessage) { |
.WillByDefault(Return(Authenticator::ACCEPTED)); |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_TRUE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::ACCEPTED); |
} |
@@ -135,7 +152,8 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_TwoMessages) { |
.WillRepeatedly(Return(Authenticator::MESSAGE_READY)); |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::MESSAGE_READY); |
// Now 'retrieve' the message for the client which resets the state. |
@@ -159,10 +177,11 @@ TEST_F(ValidatingAuthenticatorTest, ValidConnection_TwoMessages) { |
.WillRepeatedly(Return(Authenticator::ACCEPTED)); |
// Reset the callback state, we don't expect the validate function to be |
- // called for the second message. |
- validate_complete_called_ = false; |
+ // called for the second message, but the accepted callback should. |
+ incoming_complete_called_ = false; |
SendMessageAndWaitForCallback(); |
- ASSERT_FALSE(validate_complete_called_); |
+ ASSERT_FALSE(incoming_complete_called_); |
+ ASSERT_TRUE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::ACCEPTED); |
} |
@@ -171,10 +190,11 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_RejectedByUser) { |
EXPECT_CALL(*mock_authenticator_, state()).Times(0); |
EXPECT_CALL(*mock_authenticator_, rejection_reason()).Times(0); |
- validation_result_ = ValidationResult::ERROR_REJECTED_BY_USER; |
+ incoming_validation_result_ = ValidationResult::ERROR_REJECTED_BY_USER; |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::REJECTED_BY_USER); |
@@ -185,10 +205,11 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_InvalidCredentials) { |
EXPECT_CALL(*mock_authenticator_, state()).Times(0); |
EXPECT_CALL(*mock_authenticator_, rejection_reason()).Times(0); |
- validation_result_ = ValidationResult::ERROR_INVALID_CREDENTIALS; |
+ incoming_validation_result_ = ValidationResult::ERROR_INVALID_CREDENTIALS; |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::INVALID_CREDENTIALS); |
@@ -199,15 +220,49 @@ TEST_F(ValidatingAuthenticatorTest, InvalidConnection_InvalidAccount) { |
EXPECT_CALL(*mock_authenticator_, state()).Times(0); |
EXPECT_CALL(*mock_authenticator_, rejection_reason()).Times(0); |
- validation_result_ = ValidationResult::ERROR_INVALID_ACCOUNT; |
+ incoming_validation_result_ = ValidationResult::ERROR_INVALID_ACCOUNT; |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::INVALID_ACCOUNT); |
} |
+TEST_F(ValidatingAuthenticatorTest, InvalidConnection_TooManyConnections) { |
+ EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)).Times(0); |
+ EXPECT_CALL(*mock_authenticator_, state()).Times(0); |
+ EXPECT_CALL(*mock_authenticator_, rejection_reason()).Times(0); |
+ |
+ incoming_validation_result_ = ValidationResult::ERROR_TOO_MANY_CONNECTIONS; |
+ |
+ SendMessageAndWaitForCallback(); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
+ ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
+ ASSERT_EQ(validating_authenticator_->rejection_reason(), |
+ Authenticator::TOO_MANY_CONNECTIONS); |
+} |
+ |
+TEST_F(ValidatingAuthenticatorTest, AcceptedConnection_RejectedByUser) { |
+ EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) |
+ .Times(1) |
+ .WillOnce(InvokeCallbackArgument<1>()); |
+ |
+ ON_CALL(*mock_authenticator_, state()) |
+ .WillByDefault(Return(Authenticator::ACCEPTED)); |
+ |
+ accepted_validation_result_ = ValidationResult::ERROR_REJECTED_BY_USER; |
+ |
+ SendMessageAndWaitForCallback(); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_TRUE(accepted_complete_called_); |
+ ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
+ ASSERT_EQ(validating_authenticator_->rejection_reason(), |
+ Authenticator::REJECTED_BY_USER); |
+} |
+ |
TEST_F(ValidatingAuthenticatorTest, |
WrappedAuthenticatorRejectsConnection_InvalidCredentials) { |
EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) |
@@ -221,7 +276,8 @@ TEST_F(ValidatingAuthenticatorTest, |
.WillByDefault(Return(Authenticator::REJECTED_BY_USER)); |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::REJECTED_BY_USER); |
@@ -240,14 +296,15 @@ TEST_F(ValidatingAuthenticatorTest, |
.WillByDefault(Return(Authenticator::INVALID_CREDENTIALS)); |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::INVALID_CREDENTIALS); |
} |
TEST_F(ValidatingAuthenticatorTest, |
- WrappedAuthenticatorRejectsConnection_PROTOCOL_ERROR) { |
+ WrappedAuthenticatorRejectsConnection_ProtocolError) { |
EXPECT_CALL(*mock_authenticator_, ProcessMessage(_, _)) |
.Times(1) |
.WillOnce(InvokeCallbackArgument<1>()); |
@@ -259,7 +316,8 @@ TEST_F(ValidatingAuthenticatorTest, |
.WillByDefault(Return(Authenticator::PROTOCOL_ERROR)); |
SendMessageAndWaitForCallback(); |
- ASSERT_TRUE(validate_complete_called_); |
+ ASSERT_TRUE(incoming_complete_called_); |
+ ASSERT_FALSE(accepted_complete_called_); |
ASSERT_EQ(validating_authenticator_->state(), Authenticator::REJECTED); |
ASSERT_EQ(validating_authenticator_->rejection_reason(), |
Authenticator::PROTOCOL_ERROR); |