@@ -162,6 +162,79 @@ TEST(LocalBinaryIndexerTest, SimpleTree) {
162162 EXPECT_EQ (bin2.value ().file_name , tmp.path () + " /dir2/elf1" );
163163}
164164
165+ TEST (LocalBinaryFinderTest, AbsolutePath) {
166+ base::TmpDirTree tmp;
167+ tmp.AddDir (" root" );
168+ tmp.AddDir (" root/dir" );
169+ tmp.AddFile (" root/dir/elf1.so" , CreateElfWithBuildId (" AAAAAAAAAAAAAAAAAAAA" ));
170+
171+ LocalBinaryFinder finder ({tmp.path () + " /root" });
172+
173+ base::Optional<FoundBinary> bin1 =
174+ finder.FindBinary (" /dir/elf1.so" , " AAAAAAAAAAAAAAAAAAAA" );
175+ ASSERT_TRUE (bin1.has_value ());
176+ EXPECT_EQ (bin1.value ().file_name , tmp.path () + " /root/dir/elf1.so" );
177+ }
178+
179+ TEST (LocalBinaryFinderTest, AbsolutePathWithoutBaseApk) {
180+ base::TmpDirTree tmp;
181+ tmp.AddDir (" root" );
182+ tmp.AddDir (" root/dir" );
183+ tmp.AddFile (" root/dir/elf1.so" , CreateElfWithBuildId (" AAAAAAAAAAAAAAAAAAAA" ));
184+
185+ LocalBinaryFinder finder ({tmp.path () + " /root" });
186+
187+ base::Optional<FoundBinary> bin1 =
188+ finder.FindBinary (" /dir/base.apk!elf1.so" , " AAAAAAAAAAAAAAAAAAAA" );
189+ ASSERT_TRUE (bin1.has_value ());
190+ EXPECT_EQ (bin1.value ().file_name , tmp.path () + " /root/dir/elf1.so" );
191+ }
192+
193+ TEST (LocalBinaryFinderTest, OnlyFilename) {
194+ base::TmpDirTree tmp;
195+ tmp.AddDir (" root" );
196+ tmp.AddFile (" root/elf1.so" , CreateElfWithBuildId (" AAAAAAAAAAAAAAAAAAAA" ));
197+
198+ LocalBinaryFinder finder ({tmp.path () + " /root" });
199+
200+ base::Optional<FoundBinary> bin1 =
201+ finder.FindBinary (" /ignored_dir/elf1.so" , " AAAAAAAAAAAAAAAAAAAA" );
202+ ASSERT_TRUE (bin1.has_value ());
203+ EXPECT_EQ (bin1.value ().file_name , tmp.path () + " /root/elf1.so" );
204+ }
205+
206+ TEST (LocalBinaryFinderTest, OnlyFilenameWithoutBaseApk) {
207+ base::TmpDirTree tmp;
208+ tmp.AddDir (" root" );
209+ tmp.AddFile (" root/elf1.so" , CreateElfWithBuildId (" AAAAAAAAAAAAAAAAAAAA" ));
210+
211+ LocalBinaryFinder finder ({tmp.path () + " /root" });
212+
213+ base::Optional<FoundBinary> bin1 = finder.FindBinary (
214+ " /ignored_dir/base.apk!elf1.so" , " AAAAAAAAAAAAAAAAAAAA" );
215+ ASSERT_TRUE (bin1.has_value ());
216+ EXPECT_EQ (bin1.value ().file_name , tmp.path () + " /root/elf1.so" );
217+ }
218+
219+ TEST (LocalBinaryFinderTest, BuildIdSubdir) {
220+ base::TmpDirTree tmp;
221+ tmp.AddDir (" root" );
222+ tmp.AddDir (" root/.build-id" );
223+ tmp.AddDir (" root/.build-id/41" );
224+ tmp.AddFile (" root/.build-id/41/41414141414141414141414141414141414141.debug" ,
225+ CreateElfWithBuildId (" AAAAAAAAAAAAAAAAAAAA" ));
226+
227+ LocalBinaryFinder finder ({tmp.path () + " /root" });
228+
229+ base::Optional<FoundBinary> bin1 =
230+ finder.FindBinary (" /ignored_dir/ignored_name.so" , " AAAAAAAAAAAAAAAAAAAA" );
231+ ASSERT_TRUE (bin1.has_value ());
232+ EXPECT_EQ (
233+ bin1.value ().file_name ,
234+ tmp.path () +
235+ " /root/.build-id/41/41414141414141414141414141414141414141.debug" );
236+ }
237+
165238} // namespace
166239} // namespace profiling
167240} // namespace perfetto
0 commit comments