diff options
Diffstat (limited to 'chrome/service/service_process_unittest.cc')
-rw-r--r-- | chrome/service/service_process_unittest.cc | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/chrome/service/service_process_unittest.cc b/chrome/service/service_process_unittest.cc index b3ba608..e72a1e4 100644 --- a/chrome/service/service_process_unittest.cc +++ b/chrome/service/service_process_unittest.cc @@ -2,8 +2,75 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <vector> + +#include "base/base64.h" +#include "base/crypto/rsa_private_key.h" +#include "base/message_loop.h" +#include "base/waitable_event.h" +#include "chrome/service/service_process.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" TEST(ServiceProcessTest, Run) { - // TODO(hclam): Implement this test. + MessageLoopForUI main_message_loop; + ServiceProcess process; + EXPECT_TRUE(process.Initialize(&main_message_loop)); + EXPECT_TRUE(process.Teardown()); +} + +#if defined(ENABLE_REMOTING) +// TODO(hclam): This method should be made into a util. +static std::string GeneratePrivateKey() { + scoped_ptr<base::RSAPrivateKey> key(base::RSAPrivateKey::Create(2048)); + + std::vector<uint8> private_key_buf; + key->ExportPrivateKey(&private_key_buf); + std::string private_key_str(private_key_buf.begin(), private_key_buf.end()); + std::string private_key_base64; + base::Base64Encode(private_key_str, &private_key_base64); + return private_key_base64; +} + +// This test seems to break randomly so disabling it. +TEST(ServiceProcessTest, DISABLED_RunChromoting) { + MessageLoopForUI main_message_loop; + ServiceProcess process; + EXPECT_TRUE(process.Initialize(&main_message_loop)); + + // Then config the chromoting host and start it. + process.SaveChromotingConfig("hello", "world", "it's a", "good day", + GeneratePrivateKey()); + EXPECT_TRUE(process.StartChromotingHost()); + EXPECT_TRUE(process.ShutdownChromotingHost()); + EXPECT_TRUE(process.Teardown()); +} + +class MockServiceProcess : public ServiceProcess { + private: + FRIEND_TEST_ALL_PREFIXES(ServiceProcessTest, RunChromotingUntilShutdown); + MOCK_METHOD0(OnChromotingHostShutdown, void()); +}; + +ACTION_P(QuitMessageLoop, message_loop) { + message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask()); +} + +TEST(ServiceProcessTest, DISABLED_RunChromotingUntilShutdown) { + MessageLoopForUI main_message_loop; + MockServiceProcess process; + EXPECT_TRUE(process.Initialize(&main_message_loop)); + + // Expect chromoting shutdown be called because the login token is invalid. + EXPECT_CALL(process, OnChromotingHostShutdown()) + .WillOnce(QuitMessageLoop(&main_message_loop)); + + // Then config the chromoting host and start it. + process.SaveChromotingConfig("hello", "world", "it's a", "good day", + GeneratePrivateKey()); + EXPECT_TRUE(process.StartChromotingHost()); + MessageLoop::current()->Run(); + + EXPECT_TRUE(process.Teardown()); } +#endif // defined(ENABLE_REMOTING) |