| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package covargs |
| |
| import ( |
| "context" |
| "fmt" |
| "path/filepath" |
| "reflect" |
| "testing" |
| |
| "go.fuchsia.dev/fuchsia/tools/debug/elflib" |
| "go.fuchsia.dev/fuchsia/tools/debug/symbolize" |
| "go.fuchsia.dev/fuchsia/tools/testing/runtests" |
| ) |
| |
| type repository []elflib.BinaryFileRef |
| |
| func (r repository) GetBuildObject(buildID string) (symbolize.FileCloser, error) { |
| for _, file := range r { |
| if file.BuildID == buildID { |
| return symbolize.NopFileCloser(file.Filepath), nil |
| } |
| } |
| return nil, fmt.Errorf("could not find file associated with %s", buildID) |
| } |
| |
| var testRepository = repository{ |
| {Filepath: filepath.Join("testdata", "libc.so"), BuildID: "5bf6a28a259b95b4f20ffbcea0cbb149"}, |
| {Filepath: filepath.Join("testdata", "libfbl.so"), BuildID: "4fcb712aa6387724a9f465a32cd8c14b"}, |
| {Filepath: filepath.Join("testdata", "foo"), BuildID: "12ef5c50b3ed3599c07c02d4509311be"}, |
| {Filepath: filepath.Join("testdata", "bar"), BuildID: "e242ed3bffccdf271b7fbaf34ed72d08"}, |
| } |
| |
| var testDumps = map[string]symbolize.DumpEntry{ |
| "llvm-profile.1234": { |
| Modules: []symbolize.Module{ |
| {Name: "foo", Build: "12ef5c50b3ed3599c07c02d4509311be", Id: 0}, |
| {Name: "libc.so", Build: "5bf6a28a259b95b4f20ffbcea0cbb149", Id: 1}, |
| {Name: "libfbl.so", Build: "4fcb712aa6387724a9f465a32cd8c14b", Id: 2}, |
| }, |
| Segments: []symbolize.Segment{}, |
| Type: "llvm-profile", |
| Name: "llvm-profile.1234", |
| }, |
| "llvm-profile.5678": { |
| Modules: []symbolize.Module{ |
| {Name: "bar", Build: "e242ed3bffccdf271b7fbaf34ed72d08", Id: 0}, |
| {Name: "libc.so", Build: "5bf6a28a259b95b4f20ffbcea0cbb149", Id: 1}, |
| }, |
| Segments: []symbolize.Segment{}, |
| Type: "llvm-profile", |
| Name: "llvm-profile.5678", |
| }, |
| } |
| |
| var testSummary = runtests.DataSinkMap{ |
| "llvm-profile": { |
| {Name: "llvm-profile.1234", File: "build/llvm-profile.4321"}, |
| {Name: "llvm-profile.5678", File: "build/llvm-profile.8765"}, |
| }, |
| } |
| |
| var testEntries = []ProfileEntry{ |
| {Profile: "build/llvm-profile.4321", Modules: []string{"12ef5c50b3ed3599c07c02d4509311be", "5bf6a28a259b95b4f20ffbcea0cbb149", "4fcb712aa6387724a9f465a32cd8c14b"}}, |
| {Profile: "build/llvm-profile.8765", Modules: []string{"e242ed3bffccdf271b7fbaf34ed72d08", "5bf6a28a259b95b4f20ffbcea0cbb149"}}, |
| } |
| |
| func TestMergeEntries(t *testing.T) { |
| ctx := context.Background() |
| |
| entries, err := MergeEntries(ctx, testDumps, testSummary) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if !reflect.DeepEqual(entries, testEntries) { |
| t.Error("expected", testEntries, "but got", entries) |
| } |
| } |