aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/cover
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-01-23 21:54:41 +0100
committerTaras Madan <tarasmadan@google.com>2025-01-27 10:05:21 +0000
commit2bf68614de1620ef12f086d9e86d5c8b334bf32d (patch)
tree24b69669a1ee44c1a34988d917cb248faed40cd3 /pkg/cover
parent0868754a9d325ba9011e1cb74510f68d4b627c79 (diff)
dashboard/app: test coverage /file link
1. Init coveragedb client once and propagate it through context to enable mocking. 2. Always init coverage handlers. It simplifies testing. 3. Read webGit and coveragedb client from ctx to make it mockable. 4. Use int for file line number and int64 for merged coverage. 5. Add tests.
Diffstat (limited to 'pkg/cover')
-rw-r--r--pkg/cover/file.go4
-rw-r--r--pkg/cover/heatmap.go10
-rw-r--r--pkg/cover/heatmap_test.go16
3 files changed, 15 insertions, 15 deletions
diff --git a/pkg/cover/file.go b/pkg/cover/file.go
index c56f88204..ea6c326f0 100644
--- a/pkg/cover/file.go
+++ b/pkg/cover/file.go
@@ -40,10 +40,10 @@ func DefaultHTMLRenderConfig() *CoverageRenderConfig {
}
}
-func RendFileCoverage(repo, forCommit, filePath string, proxy covermerger.FuncProxyURI,
+func RendFileCoverage(repo, forCommit, filePath string, fileProvider covermerger.FileVersProvider,
mr *covermerger.MergeResult, renderConfig *CoverageRenderConfig) (string, error) {
repoCommit := covermerger.RepoCommit{Repo: repo, Commit: forCommit}
- files, err := covermerger.MakeWebGit(proxy).GetFileVersions(filePath, repoCommit)
+ files, err := fileProvider.GetFileVersions(filePath, repoCommit)
if err != nil {
return "", fmt.Errorf("failed to GetFileVersions: %w", err)
}
diff --git a/pkg/cover/heatmap.go b/pkg/cover/heatmap.go
index 04b7e6914..4cc212fad 100644
--- a/pkg/cover/heatmap.go
+++ b/pkg/cover/heatmap.go
@@ -116,13 +116,13 @@ type fileCoverageWithDetails struct {
Subsystems []string
}
-type fileCoverageWithLineInfo struct {
+type FileCoverageWithLineInfo struct {
fileCoverageWithDetails
LinesInstrumented []int64
HitCounts []int64
}
-func (fc *fileCoverageWithLineInfo) CovMap() map[int]int64 {
+func (fc *FileCoverageWithLineInfo) CovMap() map[int]int64 {
return MakeCovMap(fc.LinesInstrumented, fc.HitCounts)
}
@@ -223,12 +223,12 @@ func readCoverage(iterManager spannerclient.RowIterator) ([]*fileCoverageWithDet
func readCoverageUniq(full, mgr spannerclient.RowIterator,
) ([]*fileCoverageWithDetails, error) {
eg, ctx := errgroup.WithContext(context.Background())
- fullCh := make(chan *fileCoverageWithLineInfo)
+ fullCh := make(chan *FileCoverageWithLineInfo)
eg.Go(func() error {
defer close(fullCh)
return readIterToChan(ctx, full, fullCh)
})
- partCh := make(chan *fileCoverageWithLineInfo)
+ partCh := make(chan *FileCoverageWithLineInfo)
eg.Go(func() error {
defer close(partCh)
return readIterToChan(ctx, mgr, partCh)
@@ -309,7 +309,7 @@ func UniqCoverage(fullCov, partCov map[int]int64) map[int]int64 {
return res
}
-func readIterToChan[K fileCoverageWithLineInfo | fileCoverageWithDetails](
+func readIterToChan[K FileCoverageWithLineInfo | fileCoverageWithDetails](
ctx context.Context, iter spannerclient.RowIterator, ch chan<- *K) error {
for {
row, err := iter.Next()
diff --git a/pkg/cover/heatmap_test.go b/pkg/cover/heatmap_test.go
index ad1f9bf64..0f66256e4 100644
--- a/pkg/cover/heatmap_test.go
+++ b/pkg/cover/heatmap_test.go
@@ -65,7 +65,7 @@ func TestFilesCoverageWithDetails(t *testing.T) {
client: func() spannerclient.SpannerClient {
return fullCoverageDBFixture(
t,
- []*fileCoverageWithLineInfo{
+ []*FileCoverageWithLineInfo{
{
fileCoverageWithDetails: fileCoverageWithDetails{
Filepath: "file1",
@@ -98,7 +98,7 @@ func TestFilesCoverageWithDetails(t *testing.T) {
client: func() spannerclient.SpannerClient {
return fullCoverageDBFixture(
t,
- []*fileCoverageWithLineInfo{
+ []*FileCoverageWithLineInfo{
{
fileCoverageWithDetails: fileCoverageWithDetails{
Filepath: "file1",
@@ -109,7 +109,7 @@ func TestFilesCoverageWithDetails(t *testing.T) {
HitCounts: []int64{1, 1, 1},
},
},
- []*fileCoverageWithLineInfo{
+ []*FileCoverageWithLineInfo{
{
fileCoverageWithDetails: fileCoverageWithDetails{
Filepath: "file1",
@@ -141,7 +141,7 @@ func TestFilesCoverageWithDetails(t *testing.T) {
client: func() spannerclient.SpannerClient {
return fullCoverageDBFixture(
t,
- []*fileCoverageWithLineInfo{
+ []*FileCoverageWithLineInfo{
{
fileCoverageWithDetails: fileCoverageWithDetails{
Filepath: "file1",
@@ -152,7 +152,7 @@ func TestFilesCoverageWithDetails(t *testing.T) {
HitCounts: []int64{3, 4, 5, 6, 7},
},
},
- []*fileCoverageWithLineInfo{
+ []*FileCoverageWithLineInfo{
{
fileCoverageWithDetails: fileCoverageWithDetails{
Filepath: "file1",
@@ -212,7 +212,7 @@ func emptyCoverageDBFixture(t *testing.T, times int) spannerclient.SpannerClient
}
func fullCoverageDBFixture(
- t *testing.T, full, partial []*fileCoverageWithLineInfo,
+ t *testing.T, full, partial []*FileCoverageWithLineInfo,
) spannerclient.SpannerClient {
mPartialTran := mocks.NewReadOnlyTransaction(t)
mPartialTran.On("Query", mock.Anything, mock.Anything).
@@ -230,7 +230,7 @@ func fullCoverageDBFixture(
return m
}
-func newRowIteratorMock(t *testing.T, events []*fileCoverageWithLineInfo,
+func newRowIteratorMock(t *testing.T, events []*FileCoverageWithLineInfo,
) *mocks.RowIterator {
m := mocks.NewRowIterator(t)
m.On("Stop").Once().Return()
@@ -238,7 +238,7 @@ func newRowIteratorMock(t *testing.T, events []*fileCoverageWithLineInfo,
mRow := mocks.NewRow(t)
mRow.On("ToStruct", mock.Anything).
Run(func(args mock.Arguments) {
- arg := args.Get(0).(*fileCoverageWithLineInfo)
+ arg := args.Get(0).(*FileCoverageWithLineInfo)
*arg = *item
}).
Return(nil).Once()