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

Unified Diff: remoting/test/connection_time_observer_unittest.cc

Issue 1238343002: Added ConnectionTimeObserver to calculate the times to authenticate and connect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unused headers. Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/test/connection_time_observer.cc ('k') | remoting/test/test_chromoting_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/test/connection_time_observer_unittest.cc
diff --git a/remoting/test/connection_time_observer_unittest.cc b/remoting/test/connection_time_observer_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..3a4929a77b556b8d3be86bb49147dabdd28233ab
--- /dev/null
+++ b/remoting/test/connection_time_observer_unittest.cc
@@ -0,0 +1,176 @@
+// Copyright 2015 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.
+
+#include "remoting/test/connection_time_observer.h"
+
+#include <utility>
+
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#include "base/time/time.h"
+#include "base/timer/timer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace remoting {
+namespace test {
+
+class ConnectionTimeObserverTest : public ::testing::Test {
+ public:
+ ConnectionTimeObserverTest();
+ ~ConnectionTimeObserverTest() override;
+
+ protected:
+ // Test interface.
+ void SetUp() override;
+
+ // A map of fake times to calculate TimeDelta between two states.
+ std::map<protocol::ConnectionToHost::State, base::TimeTicks> test_map_;
+
+ // Observes and saves the times when the chromoting connection state changes.
+ scoped_ptr<ConnectionTimeObserver> connection_time_observer_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ConnectionTimeObserverTest);
+};
+
+ConnectionTimeObserverTest::ConnectionTimeObserverTest() {
+}
+
+ConnectionTimeObserverTest::~ConnectionTimeObserverTest() {
+}
+
+void ConnectionTimeObserverTest::SetUp() {
+ connection_time_observer_.reset(new ConnectionTimeObserver());
+
+ base::TimeTicks now = base::TimeTicks::Now();
+ test_map_.insert(std::make_pair(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ now + base::TimeDelta::FromMilliseconds(10)));
+ test_map_.insert(std::make_pair(
+ protocol::ConnectionToHost::State::CONNECTING,
+ now + base::TimeDelta::FromMilliseconds(20)));
+ test_map_.insert(std::make_pair(
+ protocol::ConnectionToHost::State::AUTHENTICATED,
+ now + base::TimeDelta::FromMilliseconds(30)));
+ test_map_.insert(std::make_pair(
+ protocol::ConnectionToHost::State::CONNECTED,
+ now + base::TimeDelta::FromMilliseconds(40)));
+ test_map_.insert(std::make_pair(
+ protocol::ConnectionToHost::State::CLOSED,
+ now + base::TimeDelta::FromMilliseconds(50)));
+
+ connection_time_observer_->SetTransitionTimesMapForTest(test_map_);
+}
+
+TEST_F(ConnectionTimeObserverTest, ChromotingConnectionSuccess) {
+ EXPECT_EQ(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::CONNECTING).InMilliseconds(), 10);
+ EXPECT_EQ(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::CONNECTING,
+ protocol::ConnectionToHost::State::AUTHENTICATED).InMilliseconds(), 10);
+ EXPECT_EQ(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::AUTHENTICATED,
+ protocol::ConnectionToHost::State::CONNECTED).InMilliseconds(), 10);
+ EXPECT_EQ(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::CONNECTED,
+ protocol::ConnectionToHost::State::CLOSED).InMilliseconds(), 10);
+}
+
+TEST_F(ConnectionTimeObserverTest, StartStateNotFound) {
+ EXPECT_TRUE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::FAILED,
+ protocol::ConnectionToHost::State::CLOSED).is_max());
+}
+
+TEST_F(ConnectionTimeObserverTest, EndStateNotFound) {
+ EXPECT_TRUE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::FAILED).is_max());
+}
+
+TEST_F(ConnectionTimeObserverTest, NegativeTransitionDelay) {
+ EXPECT_TRUE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::CLOSED,
+ protocol::ConnectionToHost::State::INITIALIZING).is_max());
+}
+
+TEST_F(ConnectionTimeObserverTest, TestOnConnectionStateChangedWithTestMap) {
+ // Should fail to find FAILED.
+ EXPECT_TRUE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::FAILED).is_max());
+
+ // Registers the time at which FAILED state occurred into the map.
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::FAILED,
+ protocol::ErrorCode::PEER_IS_OFFLINE);
+
+ EXPECT_FALSE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::FAILED).is_zero());
+}
+
+TEST_F(ConnectionTimeObserverTest, TestOnConnectionStateChangedWithoutTestMap) {
+ connection_time_observer_->SetTransitionTimesMapForTest(
+ std::map<protocol::ConnectionToHost::State, base::TimeTicks>());
+
+ base::MessageLoopForIO message_loop;
+ base::RunLoop run_loop;
+
+ // Should fail to find INITIALIZING in an empty map.
+ EXPECT_TRUE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::FAILED).is_max());
+
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ErrorCode::OK);
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::CONNECTING,
+ protocol::ErrorCode::OK);
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::AUTHENTICATED,
+ protocol::ErrorCode::OK);
+
+ // Wait for 10 milliseconds for CONNECTED state.
+ // Note: This test can only guarantee a positive TimeDelta between a previous
+ // state and the CONNECTED state. Prior states have non-deterministic times
+ // between each other.
+ base::Timer timer(true, false);
+ timer.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(10),
+ run_loop.QuitClosure());
+ run_loop.Run();
+
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::CONNECTED,
+ protocol::ErrorCode::OK);
+
+ // Verify that the time waited is positive and at least 10 milliseconds.
+ EXPECT_GE(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::AUTHENTICATED,
+ protocol::ConnectionToHost::State::CONNECTED).InMilliseconds(), 10);
+}
+
+TEST_F(ConnectionTimeObserverTest, TestOnConnectionStateDataDoesNotChange) {
+ base::TimeDelta first_time_delta =
+ connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::CONNECTED);
+
+ // This check makes sure that the two states are actually found.
+ EXPECT_FALSE(first_time_delta.is_zero());
+
+ // The initial data should not change and should log an error.
+ connection_time_observer_->ConnectionStateChanged(
+ protocol::ConnectionToHost::State::CONNECTED, protocol::ErrorCode::OK);
+
+ EXPECT_EQ(connection_time_observer_->GetStateTransitionTime(
+ protocol::ConnectionToHost::State::INITIALIZING,
+ protocol::ConnectionToHost::State::CONNECTED), first_time_delta);
+}
+
+} // namespace test
+} // namespace remoting
« no previous file with comments | « remoting/test/connection_time_observer.cc ('k') | remoting/test/test_chromoting_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698