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

Unified Diff: remoting/protocol/simple_authenticator_unittest.cc

Issue 8647001: Add implementation for current IT2Me auth. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/simple_authenticator_unittest.cc
diff --git a/remoting/protocol/simple_authenticator_unittest.cc b/remoting/protocol/simple_authenticator_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..ecce7b9df9ffe112328341fbd00eb3e85a149a74
--- /dev/null
+++ b/remoting/protocol/simple_authenticator_unittest.cc
@@ -0,0 +1,125 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Unittests in this file test both SimpleClientAuthenticator and
Wez 2011/11/22 22:58:05 nit: Unit tests in this file...
Sergey Ulanov 2011/11/23 02:02:25 Done.
+// SimpleHostAuthenticator.
Wez 2011/11/22 22:58:05 Do you really need this comment?
Sergey Ulanov 2011/11/23 02:02:25 Done.
+
+#include "base/file_path.h"
+#include "base/file_util.h"
+#include "base/path_service.h"
+#include "crypto/rsa_private_key.h"
+#include "remoting/protocol/simple_client_authenticator.h"
+#include "remoting/protocol/simple_host_authenticator.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
+
+namespace remoting {
+namespace protocol {
+
+namespace {
+const char kHostJid[] = "host1@gmail.com/123";
+const char kClientJid[] = "host2@gmail.com/321";
+
+const char kTestSharedSecret[] = "1234-1234-5678";
+const char kTestSharedSecretBad[] = "0000-0000-0001";
+} // namespace
+
+class SimpleAuthenticatorTest : public testing::Test {
+ public:
+ SimpleAuthenticatorTest() {
+ }
+ virtual ~SimpleAuthenticatorTest() {
+ }
+
+ protected:
+ void InitAuthenticators(const std::string& client_secret,
+ const std::string& host_secret) {
+ FilePath certs_dir;
+ PathService::Get(base::DIR_SOURCE_ROOT, &certs_dir);
+ certs_dir = certs_dir.AppendASCII("net");
+ certs_dir = certs_dir.AppendASCII("data");
+ certs_dir = certs_dir.AppendASCII("ssl");
+ certs_dir = certs_dir.AppendASCII("certificates");
+
+ FilePath cert_path = certs_dir.AppendASCII("unittest.selfsigned.der");
+ std::string cert_der;
+ ASSERT_TRUE(file_util::ReadFileToString(cert_path, &cert_der));
+
+ FilePath key_path = certs_dir.AppendASCII("unittest.key.bin");
+ std::string key_string;
+ ASSERT_TRUE(file_util::ReadFileToString(key_path, &key_string));
+ std::vector<uint8> key_vector(
+ reinterpret_cast<const uint8*>(key_string.data()),
+ reinterpret_cast<const uint8*>(key_string.data() +
+ key_string.length()));
+ private_key_.reset(
+ crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
+
+ host_.reset(new SimpleHostAuthenticator(
+ cert_der, private_key_.get(), host_secret, kClientJid));
+ client_.reset(new SimpleClientAuthenticator(kClientJid, client_secret));
+ }
+
+ void RunAuthExchange() {
+ do {
+ scoped_ptr<buzz::XmlElement> message;
+
+ // Pass message from client to host.
+ ASSERT_EQ(Authenticator::MESSAGE_READY, client_->state());
+ message.reset(client_->GetNextMessage());
+ ASSERT_TRUE(message.get());
+ ASSERT_NE(Authenticator::MESSAGE_READY, client_->state());
+
+ ASSERT_EQ(Authenticator::WAITING_MESSAGE, host_->state());
+ host_->ProcessMessage(message.get());
+ ASSERT_NE(Authenticator::WAITING_MESSAGE, host_->state());
+
+ // Are we done yet?
+ if (host_->state() == Authenticator::ACCEPTED ||
+ host_->state() == Authenticator::REJECTED) {
+ break;
+ }
+
+ // Pass message from host to client.
+ ASSERT_EQ(Authenticator::MESSAGE_READY, host_->state());
+ message.reset(host_->GetNextMessage());
+ ASSERT_TRUE(message.get());
+ ASSERT_NE(Authenticator::MESSAGE_READY, host_->state());
+
+ ASSERT_EQ(Authenticator::WAITING_MESSAGE, client_->state());
+ client_->ProcessMessage(message.get());
+ ASSERT_NE(Authenticator::WAITING_MESSAGE, client_->state());
+ } while (host_->state() != Authenticator::ACCEPTED &&
+ host_->state() != Authenticator::REJECTED);
+ }
+
+ scoped_ptr<crypto::RSAPrivateKey> private_key_;
+ scoped_ptr<SimpleHostAuthenticator> host_;
+ scoped_ptr<SimpleClientAuthenticator> client_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimpleAuthenticatorTest);
+};
+
+TEST_F(SimpleAuthenticatorTest, SuccessfulAuth) {
+ {
+ SCOPED_TRACE("RunAuthExchange");
+ InitAuthenticators(kTestSharedSecret, kTestSharedSecret);
+ RunAuthExchange();
+ }
+ ASSERT_EQ(Authenticator::ACCEPTED, host_->state());
+ ASSERT_EQ(Authenticator::ACCEPTED, client_->state());
+}
+
+TEST_F(SimpleAuthenticatorTest, InvalidSecret) {
+ {
+ SCOPED_TRACE("RunAuthExchange");
+ InitAuthenticators(kTestSharedSecretBad, kTestSharedSecret);
+ RunAuthExchange();
+ }
+ ASSERT_EQ(Authenticator::REJECTED, host_->state());
+}
+
+} // namespace protocol
+} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698