/* * Copyright (C) 2024 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 "perfetto/trace_processor/trace_processor.h" #include "src/base/test/status_matchers.h" #include "src/trace_redaction/trace_redaction_integration_fixture.h" #include "test/gtest_and_gmock.h" namespace perfetto::trace_redaction { namespace { constexpr auto kTrace = …; constexpr auto kPackageName = …; constexpr auto kPackageUid = …; } // namespace class AfterRedactionIntegrationTest : public testing::Test, protected TraceRedactionIntegrationFixure { … }; // After redaction, the only package remaining in the package list should be the // target package. TEST_F(AfterRedactionIntegrationTest, FindsCorrectUid) { … } TEST_F(AfterRedactionIntegrationTest, CreatesThreadForEachCPU) { … } TEST_F(AfterRedactionIntegrationTest, ReducesProcesses) { … } // Tests comparing the trace before and after redaction. class BeforeAndAfterAfterIntegrationTest : public testing::Test, protected TraceRedactionIntegrationFixure { … }; TEST_F(BeforeAndAfterAfterIntegrationTest, KeepsAllTargetPackageThreads) { … } // There are two Zygotes on Android ('zygote', 'zygote64'). Modern device should // have both, so we assume both are present in the unredacted trace. During // redaction, all zygote information will be lost during the merge stage. // However, since the target process references the zygote (ppid) a "ghost" // process will appear in the process table. class RedactedZygoteIntegrationTest : public BeforeAndAfterAfterIntegrationTest { … }; TEST_F(RedactedZygoteIntegrationTest, KeepsOneZygote) { … } TEST_F(RedactedZygoteIntegrationTest, RemovesName) { … } // After redaction, the only application left should be the target package. // While an application can have multiple processes, there should one top level // process that was forked by the zygote. // // WARNING: This test relies on an assumption: there is only be one instance of // the application running. We know this assumption to be faulty as multiple // profiles allow for multiple instances of the same package to be running. // In redaction, we treat them all as a single instance. The test trace does not // use multiple profiles, so this assumption hold for this trace. TEST_F(RedactedZygoteIntegrationTest, OnlyReferencedByTargetPackage) { … } } // namespace perfetto::trace_redaction