blob: a7f97c58f2b3c8a4a0f1123cb1295b5beeab8fcf [file] [log] [blame]
// Copyright 2016 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 <sstream>
#include <string>
#include "base/at_exit.h"
#include "base/strings/stringprintf.h"
#include "blimp/common/logging.h"
#include "blimp/common/proto/blimp_message.pb.h"
#include "blimp/net/test_common.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::Return;
namespace blimp {
namespace {
const int kTargetTab = 123;
// Verifies that the logged form of |msg| matches |expected|, modulo prefix
// and suffix.
void VerifyLogOutput(const std::string& expected_fragment,
const BlimpMessage& msg) {
std::string expected = "<BlimpMessage " + expected_fragment + " byte_size=" +
std::to_string(msg.ByteSize()) + ">";
std::stringstream outstream;
outstream << msg;
EXPECT_EQ(expected, outstream.str());
}
class LoggingTest : public testing::Test {
public:
LoggingTest() {}
~LoggingTest() override {}
private:
// Deletes the singleton on test termination.
base::ShadowingAtExitManager at_exit_;
};
TEST_F(LoggingTest, Compositor) {
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::COMPOSITOR);
base_msg.set_target_tab_id(kTargetTab);
VerifyLogOutput("type=COMPOSITOR render_widget_id=0 target_tab_id=123",
base_msg);
}
TEST_F(LoggingTest, Input) {
const char* fragment_format =
"type=INPUT render_widget_id=1 timestamp_seconds=2.000000 subtype=%s"
" target_tab_id=123";
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::INPUT);
base_msg.set_target_tab_id(kTargetTab);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureScrollBegin);
base_msg.mutable_input()->set_render_widget_id(1);
base_msg.mutable_input()->set_timestamp_seconds(2);
VerifyLogOutput(base::StringPrintf(fragment_format, "GestureScrollBegin"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureScrollEnd);
VerifyLogOutput(base::StringPrintf(fragment_format, "GestureScrollEnd"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureScrollUpdate);
VerifyLogOutput(base::StringPrintf(fragment_format, "GestureScrollUpdate"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureFlingStart);
VerifyLogOutput(base::StringPrintf(fragment_format, "GestureFlingStart"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureTap);
VerifyLogOutput(base::StringPrintf(fragment_format, "GestureTap"), base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GesturePinchBegin);
VerifyLogOutput(base::StringPrintf(fragment_format, "GesturePinchBegin"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GesturePinchEnd);
VerifyLogOutput(base::StringPrintf(fragment_format, "GesturePinchEnd"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GesturePinchUpdate);
VerifyLogOutput(base::StringPrintf(fragment_format, "GesturePinchUpdate"),
base_msg);
base_msg.mutable_input()->set_type(InputMessage::Type_GestureFlingCancel);
base_msg.mutable_input()
->mutable_gesture_fling_cancel()
->set_prevent_boosting(true);
VerifyLogOutput(
"type=INPUT render_widget_id=1 timestamp_seconds=2.000000 "
"subtype=GestureFlingCancel prevent_boosting=true target_tab_id=123",
base_msg);
}
TEST_F(LoggingTest, Navigation) {
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::NAVIGATION);
base_msg.set_target_tab_id(kTargetTab);
BlimpMessage navigation_state_msg = base_msg;
navigation_state_msg.mutable_navigation()->set_type(
NavigationMessage::NAVIGATION_STATE_CHANGED);
navigation_state_msg.mutable_navigation()
->mutable_navigation_state_changed()
->set_url("http://foo.com");
navigation_state_msg.mutable_navigation()
->mutable_navigation_state_changed()
->set_favicon("bytes!");
navigation_state_msg.mutable_navigation()
->mutable_navigation_state_changed()
->set_title("FooCo");
navigation_state_msg.mutable_navigation()
->mutable_navigation_state_changed()
->set_loading(true);
VerifyLogOutput(
"type=NAVIGATION subtype=NAVIGATION_STATE_CHANGED url=\"http://foo.com\" "
"favicon_size=6 title=\"FooCo\" loading=true target_tab_id=123",
navigation_state_msg);
BlimpMessage load_url_msg = base_msg;
load_url_msg.mutable_navigation()->set_type(NavigationMessage::LOAD_URL);
load_url_msg.mutable_navigation()->mutable_load_url()->set_url(
"http://foo.com");
VerifyLogOutput(
"type=NAVIGATION subtype=LOAD_URL url=\"http://foo.com\" "
"target_tab_id=123",
load_url_msg);
BlimpMessage go_back_msg = base_msg;
go_back_msg.mutable_navigation()->set_type(NavigationMessage::GO_BACK);
VerifyLogOutput("type=NAVIGATION subtype=GO_BACK target_tab_id=123",
go_back_msg);
BlimpMessage go_forward_msg = base_msg;
go_forward_msg.mutable_navigation()->set_type(NavigationMessage::GO_FORWARD);
VerifyLogOutput("type=NAVIGATION subtype=GO_FORWARD target_tab_id=123",
go_forward_msg);
BlimpMessage reload_msg = base_msg;
reload_msg.mutable_navigation()->set_type(NavigationMessage::RELOAD);
VerifyLogOutput("type=NAVIGATION subtype=RELOAD target_tab_id=123",
reload_msg);
}
TEST_F(LoggingTest, TabControl) {
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::TAB_CONTROL);
base_msg.set_target_tab_id(kTargetTab);
BlimpMessage create_tab_msg = base_msg;
create_tab_msg.mutable_tab_control()->set_type(TabControlMessage::CREATE_TAB);
VerifyLogOutput("type=TAB_CONTROL subtype=CREATE_TAB target_tab_id=123",
create_tab_msg);
BlimpMessage close_tab_msg = base_msg;
close_tab_msg.mutable_tab_control()->set_type(TabControlMessage::CLOSE_TAB);
VerifyLogOutput("type=TAB_CONTROL subtype=CLOSE_TAB target_tab_id=123",
close_tab_msg);
BlimpMessage size_msg = base_msg;
size_msg.mutable_tab_control()->set_type(TabControlMessage::SIZE);
size_msg.mutable_tab_control()->mutable_size()->set_width(640);
size_msg.mutable_tab_control()->mutable_size()->set_height(480);
size_msg.mutable_tab_control()->mutable_size()->set_device_pixel_ratio(2);
VerifyLogOutput(
"type=TAB_CONTROL subtype=SIZE size=640x480:2.00 target_tab_id=123",
size_msg);
}
TEST_F(LoggingTest, ProtocolControl) {
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::PROTOCOL_CONTROL);
BlimpMessage start_connection_msg = base_msg;
start_connection_msg.mutable_protocol_control()->set_type(
ProtocolControlMessage::START_CONNECTION);
start_connection_msg.mutable_protocol_control()
->mutable_start_connection()
->set_client_token("token");
start_connection_msg.mutable_protocol_control()
->mutable_start_connection()
->set_protocol_version(2);
VerifyLogOutput(
"type=PROTOCOL_CONTROL subtype=START_CONNECTION "
"client_token=\"token\" protocol_version=2",
start_connection_msg);
BlimpMessage checkpoint_msg = base_msg;
start_connection_msg.mutable_protocol_control()->set_type(
ProtocolControlMessage::CHECKPOINT_ACK);
start_connection_msg.mutable_protocol_control()
->mutable_checkpoint_ack()
->set_checkpoint_id(123);
VerifyLogOutput(
"type=PROTOCOL_CONTROL subtype=CHECKPOINT_ACK "
"checkpoint_id=123",
start_connection_msg);
}
TEST_F(LoggingTest, RenderWidget) {
BlimpMessage base_msg;
base_msg.set_type(BlimpMessage::RENDER_WIDGET);
base_msg.mutable_render_widget()->set_render_widget_id(123);
BlimpMessage initialize_msg = base_msg;
initialize_msg.mutable_render_widget()->set_type(
RenderWidgetMessage::INITIALIZE);
VerifyLogOutput("type=RENDER_WIDGET subtype=INITIALIZE render_widget_id=123",
initialize_msg);
BlimpMessage created_msg = base_msg;
created_msg.mutable_render_widget()->set_type(
RenderWidgetMessage::CREATED);
VerifyLogOutput("type=RENDER_WIDGET subtype=CREATED render_widget_id=123",
created_msg);
BlimpMessage deleted_msg = base_msg;
deleted_msg.mutable_render_widget()->set_type(RenderWidgetMessage::DELETED);
VerifyLogOutput("type=RENDER_WIDGET subtype=DELETED render_widget_id=123",
deleted_msg);
}
} // namespace
} // namespace blimp