|  | /* | 
|  | * 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 |