• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "src/traced/probes/initial_display_state/initial_display_state_data_source.h"
18 #include "perfetto/tracing/core/data_source_config.h"
19 #include "src/base/test/test_task_runner.h"
20 #include "src/tracing/core/trace_writer_for_testing.h"
21 #include "test/gtest_and_gmock.h"
22 
23 #include "protos/perfetto/trace/android/initial_display_state.gen.h"
24 #include "protos/perfetto/trace/trace_packet.gen.h"
25 
26 using ::testing::AnyOf;
27 using ::testing::ElementsAre;
28 using ::testing::Return;
29 
30 namespace perfetto {
31 namespace {
32 
33 class TestInitialDisplayStateDataSource : public InitialDisplayStateDataSource {
34  public:
TestInitialDisplayStateDataSource(base::TaskRunner * task_runner,const DataSourceConfig & config,std::unique_ptr<TraceWriter> writer)35   TestInitialDisplayStateDataSource(base::TaskRunner* task_runner,
36                                     const DataSourceConfig& config,
37                                     std::unique_ptr<TraceWriter> writer)
38       : InitialDisplayStateDataSource(task_runner,
39                                       config,
40                                       /* session_id */ 0,
41                                       std::move(writer)) {}
42 
43   MOCK_METHOD(const std::optional<std::string>,
44               ReadProperty,
45               (const std::string),
46               (override));
47 };
48 
49 class InitialDisplayStateDataSourceTest : public ::testing::Test {
50  protected:
51   std::unique_ptr<TestInitialDisplayStateDataSource>
GetInitialDisplayStateDataSource(const DataSourceConfig & config)52   GetInitialDisplayStateDataSource(const DataSourceConfig& config) {
53     auto writer =
54         std::unique_ptr<TraceWriterForTesting>(new TraceWriterForTesting());
55     writer_raw_ = writer.get();
56     auto instance = std::unique_ptr<TestInitialDisplayStateDataSource>(
57         new TestInitialDisplayStateDataSource(&task_runner_, config,
58                                               std::move(writer)));
59     return instance;
60   }
61 
62   base::TestTaskRunner task_runner_;
63   TraceWriterForTesting* writer_raw_ = nullptr;
64 };
65 
TEST_F(InitialDisplayStateDataSourceTest,Success)66 TEST_F(InitialDisplayStateDataSourceTest, Success) {
67   ASSERT_TRUE(true);
68   auto data_source = GetInitialDisplayStateDataSource(DataSourceConfig());
69   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_state"))
70       .WillOnce(Return(std::make_optional("2")));
71   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_brightness"))
72       .WillOnce(Return(std::make_optional("0.123456")));
73   data_source->Start();
74 
75   protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
76   ASSERT_TRUE(packet.has_initial_display_state());
77   auto state = packet.initial_display_state();
78   ASSERT_EQ(state.display_state(), 2);
79   ASSERT_EQ(state.brightness(), 0.123456);
80 }
81 
TEST_F(InitialDisplayStateDataSourceTest,Invalid)82 TEST_F(InitialDisplayStateDataSourceTest, Invalid) {
83   ASSERT_TRUE(true);
84   auto data_source = GetInitialDisplayStateDataSource(DataSourceConfig());
85   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_state"))
86       .WillOnce(Return(std::make_optional("2")));
87   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_brightness"))
88       .WillOnce(Return(std::make_optional("gotta wear shades")));
89   data_source->Start();
90 
91   protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
92   ASSERT_TRUE(packet.has_initial_display_state());
93   auto state = packet.initial_display_state();
94   ASSERT_EQ(state.display_state(), 2);
95   ASSERT_FALSE(state.has_brightness());
96 }
97 
TEST_F(InitialDisplayStateDataSourceTest,Failure)98 TEST_F(InitialDisplayStateDataSourceTest, Failure) {
99   ASSERT_TRUE(true);
100   auto data_source = GetInitialDisplayStateDataSource(DataSourceConfig());
101   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_state"))
102       .WillOnce(Return(std::nullopt));
103   EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_brightness"))
104       .WillOnce(Return(std::nullopt));
105   data_source->Start();
106 
107   protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
108   ASSERT_FALSE(packet.has_initial_display_state());
109 }
110 
111 }  // namespace
112 }  // namespace perfetto
113