| /* |
| * Copyright (C) 2020 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/traced/probes/ftrace/printk_formats_parser.h" |
| |
| #include "test/gtest_and_gmock.h" |
| |
| using ::testing::Contains; |
| using ::testing::Eq; |
| using ::testing::IsEmpty; |
| using ::testing::Key; |
| using ::testing::Not; |
| using ::testing::Pair; |
| |
| namespace perfetto { |
| namespace { |
| |
| TEST(PrintkFormatParserTest, AllZeros) { |
| std::string format = R"(0x0 : "Rescheduling interrupts" |
| 0x0 : "Function call interrupts" |
| 0x0 : "CPU stop interrupts" |
| 0x0 : "Timer broadcast interrupts" |
| 0x0 : "IRQ work interrupts" |
| 0x0 : "CPU wakeup interrupts" |
| 0x0 : "CPU backtrace" |
| 0x0 : "rcu_sched" |
| 0x0 : "rcu_bh" |
| 0x0 : "rcu_preempt" |
| )"; |
| |
| PrintkMap result = ParsePrintkFormats(format); |
| EXPECT_THAT(result, IsEmpty()); |
| } |
| |
| TEST(PrintkFormatParserTest, VariousAddresses) { |
| std::string format = R"(0x1 : "First line" |
| 0x1 : "First line" |
| 0x2 : "Unfortunate: colon" |
| 0x3 : "" |
| 0xffffff92349439b8 : "Large address" |
| 0x9 : "Last line")"; |
| |
| PrintkMap result = ParsePrintkFormats(format); |
| EXPECT_THAT(result.at(1), Eq("First line")); |
| EXPECT_THAT(result.at(2), Eq("Unfortunate: colon")); |
| EXPECT_THAT(result.at(18446743602145278392ULL), Eq("Large address")); |
| EXPECT_THAT(result.at(9), Eq("Last line")); |
| EXPECT_THAT(result.at(3), Eq("")); |
| } |
| |
| TEST(PrintkFormatParserTest, RobustToRubbish) { |
| std::string format = R"( |
| : leading colon |
| trailing colon: |
| multiple colons: : : : : |
| Empty line: |
| |
| Just colon: |
| : |
| : "No address" |
| No name: |
| 0x1 : |
| 0xbadhexaddress : "Bad hex address" |
| 0x2 : No quotes |
| 0x3:"No gap" |
| "Wrong way round" : 0x4 |
| )"; |
| |
| PrintkMap result = ParsePrintkFormats(format); |
| EXPECT_THAT(result.at(2), Eq("No quotes")); |
| EXPECT_THAT(result.at(3), Eq("No gap")); |
| } |
| |
| } // namespace |
| } // namespace perfetto |