/*
|
* Copyright (C) 2018 The Android Open Source Project
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
#include "src/perfetto_cmd/config.h"
|
|
#include "gmock/gmock.h"
|
#include "gtest/gtest.h"
|
|
#include "perfetto/config/trace_config.pb.h"
|
|
namespace perfetto {
|
namespace {
|
|
using testing::Contains;
|
using protos::TraceConfig;
|
|
class CreateConfigFromOptionsTest : public ::testing::Test {
|
public:
|
TraceConfig config;
|
ConfigOptions options;
|
};
|
|
TEST_F(CreateConfigFromOptionsTest, Default) {
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_FALSE(config.write_into_file());
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, MilliSeconds) {
|
options.time = "2ms";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.duration_ms(), 2);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Seconds) {
|
options.time = "100s";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.duration_ms(), 100 * 1000);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Minutes) {
|
options.time = "2m";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.duration_ms(), 2 * 60 * 1000);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Hours) {
|
options.time = "2h";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.duration_ms(), 2 * 60 * 60 * 1000);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Kilobyte) {
|
options.buffer_size = "2kb";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.buffers().Get(0).size_kb(), 2);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Megabyte) {
|
options.buffer_size = "2mb";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.buffers().Get(0).size_kb(), 2 * 1024);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Gigabyte) {
|
options.buffer_size = "2gb";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.buffers().Get(0).size_kb(), 2 * 1024 * 1024);
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, BadTrailingSpace) {
|
options.buffer_size = "2gb ";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, UnmatchedUnit) {
|
options.buffer_size = "2ly";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, OnlyNumber) {
|
options.buffer_size = "2";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, OnlyUnit) {
|
options.buffer_size = "kb";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, Empty) {
|
options.buffer_size = "";
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, InvalidTime) {
|
options.time = "2mb";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, InvalidSize) {
|
options.max_file_size = "2s";
|
ASSERT_FALSE(CreateConfigFromOptions(options, &config));
|
}
|
|
TEST_F(CreateConfigFromOptionsTest, FullConfig) {
|
options.buffer_size = "100mb";
|
options.max_file_size = "1gb";
|
options.time = "1h";
|
options.categories.push_back("sw");
|
options.categories.push_back("sched/sched_switch");
|
options.atrace_apps.push_back("com.android.chrome");
|
ASSERT_TRUE(CreateConfigFromOptions(options, &config));
|
EXPECT_EQ(config.duration_ms(), 60 * 60 * 1000);
|
EXPECT_EQ(config.flush_period_ms(), 30 * 1000);
|
EXPECT_EQ(config.max_file_size_bytes(), 1 * 1024 * 1024 * 1024);
|
EXPECT_EQ(config.buffers().Get(0).size_kb(), 100 * 1024);
|
EXPECT_EQ(config.data_sources().Get(0).config().name(), "linux.ftrace");
|
EXPECT_EQ(config.data_sources().Get(0).config().target_buffer(), 0);
|
auto ftrace = config.data_sources().Get(0).config().ftrace_config();
|
EXPECT_THAT(ftrace.ftrace_events(), Contains("sched/sched_switch"));
|
EXPECT_THAT(ftrace.atrace_categories(), Contains("sw"));
|
EXPECT_THAT(ftrace.atrace_apps(), Contains("com.android.chrome"));
|
}
|
|
} // namespace
|
} // namespace perfetto
|