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

Unified Diff: remoting/host/session_manager_unittest.cc

Issue 2690003: Copy the (early prototype of) remoting in Chrome into the public tree.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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/host/session_manager.cc ('k') | remoting/host/simple_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/session_manager_unittest.cc
===================================================================
--- remoting/host/session_manager_unittest.cc (revision 0)
+++ remoting/host/session_manager_unittest.cc (revision 0)
@@ -0,0 +1,139 @@
+// Copyright (c) 2010 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 "base/message_loop.h"
+#include "base/task.h"
+#include "remoting/host/mock_objects.h"
+#include "remoting/host/session_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+using ::testing::AtLeast;
+using ::testing::NotNull;
+using ::testing::Return;
+
+namespace remoting {
+
+static const int kWidth = 640;
+static const int kHeight = 480;
+static int kStride[3] = {
+ kWidth * 4,
+ kWidth * 4,
+ kWidth * 4,
+};
+static uint8* kData[3] = {
+ reinterpret_cast<uint8*>(0x01),
+ reinterpret_cast<uint8*>(0x02),
+ reinterpret_cast<uint8*>(0x03),
+};
+static const chromotocol_pb::PixelFormat kFormat =
+ chromotocol_pb::PixelFormatRgb32;
+
+class SessionManagerTest : public testing::Test {
+ public:
+ SessionManagerTest() {
+ }
+
+ protected:
+ void Init() {
+ capturer_ = new MockCapturer();
+ encoder_ = new MockEncoder();
+ client_ = new MockClientConnection();
+ record_ = new SessionManager(&message_loop_,
+ &message_loop_,
+ &message_loop_,
+ capturer_,
+ encoder_);
+ }
+
+ scoped_refptr<SessionManager> record_;
+ scoped_refptr<MockClientConnection> client_;
+ MockCapturer* capturer_;
+ MockEncoder* encoder_;
+ MessageLoop message_loop_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SessionManagerTest);
+};
+
+TEST_F(SessionManagerTest, Init) {
+ Init();
+}
+
+ACTION(RunSimpleTask) {
+ arg0->Run();
+ delete arg0;
+}
+
+ACTION_P2(FinishDecode, header, data) {
+ *arg4 = header;
+ *arg5 = data;
+ *arg6 = true;
+ arg7->Run();
+ delete arg7;
+}
+
+ACTION_P(AssignCaptureData, data) {
+ arg0[0] = data[0];
+ arg0[1] = data[1];
+ arg0[2] = data[2];
+}
+
+TEST_F(SessionManagerTest, OneRecordCycle) {
+ Init();
+
+ // Set the recording rate to very low to avoid capture twice.
+ record_->SetMaxRate(0.01);
+
+ // Add the mock client connection to the session.
+ EXPECT_CALL(*capturer_, GetWidth()).WillRepeatedly(Return(kWidth));
+ EXPECT_CALL(*capturer_, GetHeight()).WillRepeatedly(Return(kHeight));
+ EXPECT_CALL(*client_, SendInitClientMessage(kWidth, kHeight));
+ record_->AddClient(client_);
+
+ // First the capturer is called.
+ EXPECT_CALL(*capturer_, CaptureDirtyRects(NotNull()))
+ .WillOnce(RunSimpleTask());
+ // TODO(hclam): Return DirtyRects for verification.
+ EXPECT_CALL(*capturer_, GetDirtyRects(NotNull()));
+ EXPECT_CALL(*capturer_, GetData(NotNull()))
+ .WillOnce(AssignCaptureData(kData));
+ EXPECT_CALL(*capturer_, GetDataStride(NotNull()))
+ .WillOnce(AssignCaptureData(kStride));
+ EXPECT_CALL(*capturer_, GetPixelFormat())
+ .WillOnce(Return(kFormat));
+
+ // Expect the encoder be called.
+ chromotocol_pb::UpdateStreamPacketHeader header;
+ scoped_refptr<media::DataBuffer> buffer = new media::DataBuffer(0);
+ EXPECT_CALL(*encoder_, SetSize(kWidth, kHeight));
+ EXPECT_CALL(*encoder_, SetPixelFormat(kFormat));
+ // TODO(hclam): Expect the content of the dirty rects.
+ EXPECT_CALL(*encoder_,
+ Encode(_, NotNull(), NotNull(), false, NotNull(),
+ NotNull(), NotNull(), NotNull()))
+ .WillOnce(FinishDecode(header, buffer));
+
+ // Expect the client be notified.
+ EXPECT_CALL(*client_, SendBeginUpdateStreamMessage());
+ EXPECT_CALL(*client_, SendUpdateStreamPacketMessage(NotNull(), buffer));
+ EXPECT_CALL(*client_, SendEndUpdateStreamMessage());
+ EXPECT_CALL(*client_, GetPendingUpdateStreamMessages())
+ .Times(AtLeast(0))
+ .WillRepeatedly(Return(0));
+
+
+ // Start the recording.
+ record_->Start();
+
+ // Make sure all tasks are completed.
+ message_loop_.RunAllPending();
+}
+
+// TODO(hclam): Add test for double buffering.
+// TODO(hclam): Add test for multiple captures.
+// TODO(hclam): Add test for interruption.
+
+} // namespace remoting
Property changes on: remoting/host/session_manager_unittest.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « remoting/host/session_manager.cc ('k') | remoting/host/simple_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698