diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-01-26 20:22:42 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-01-27 10:43:16 +0300 |
commit | e92b4bb70f705905f02eaa26a212716f48b4d1e8 (patch) | |
tree | 0436a8e626ecd38715507616be1a3d4ddb825862 | |
parent | 846a1527172c5fd4d358fc6c256d78d4b7be2d25 (diff) |
housekeeping: Refactor testing metrics for OptimizeRepository
One of our tests for `OptimizeRepository()` exercises whether we're
reporting on specific metrics as expected. This test is quite repetitive
and hard to extend as we expect each testcase to spell out the full
format as expected by `testutil.CollectAndCompare()`.
Refactor the code to instead use an array of `metric` structures from
which we can then compute the expected string.
-rw-r--r-- | internal/git/housekeeping/optimize_repository_test.go | 138 |
1 files changed, 72 insertions, 66 deletions
diff --git a/internal/git/housekeeping/optimize_repository_test.go b/internal/git/housekeeping/optimize_repository_test.go index caddf732b..31b840f2b 100644 --- a/internal/git/housekeeping/optimize_repository_test.go +++ b/internal/git/housekeeping/optimize_repository_test.go @@ -163,12 +163,17 @@ func testOptimizeRepository(t *testing.T, ctx context.Context) { cfg := testcfg.Build(t) txManager := transaction.NewManager(cfg, backchannel.NewRegistry()) + type metric struct { + name, status string + count int + } + for _, tc := range []struct { desc string setup func(t *testing.T, relativePath string) *gitalypb.Repository expectedErr error - expectedMetrics string - expectedMetricsForPool string + expectedMetrics []metric + expectedMetricsForPool []metric }{ { desc: "empty repository does nothing", @@ -179,10 +184,9 @@ func testOptimizeRepository(t *testing.T, ctx context.Context) { }) return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "total", status: "success", count: 1}, + }, }, { desc: "repository without bitmap repacks objects", @@ -194,13 +198,12 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 gittest.WriteCommit(t, cfg, repoPath, gittest.WithBranch("main")) return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_objects_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_bitmap", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "packed_objects_full", status: "success", count: 1}, + {name: "written_commit_graph_full", status: "success", count: 1}, + {name: "written_bitmap", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "repository without commit-graph writes commit-graph", @@ -213,11 +216,10 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 gittest.Exec(t, cfg, "-C", repoPath, "repack", "-A", "-d", "--write-bitmap-index") return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "written_commit_graph_full", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "repository with commit-graph without generation data writes commit-graph", @@ -231,11 +233,10 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 gittest.Exec(t, cfg, "-c", "commitGraph.generationVersion=1", "-C", repoPath, "commit-graph", "write", "--split", "--changed-paths") return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "written_commit_graph_full", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "repository with multiple packfiles packs only for object pool", @@ -257,17 +258,15 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, - expectedMetricsForPool: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_objects_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_bitmap", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "total", status: "success", count: 1}, + }, + expectedMetricsForPool: []metric{ + {name: "packed_objects_full", status: "success", count: 1}, + {name: "written_bitmap", status: "success", count: 1}, + {name: "written_commit_graph_incremental", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "well-packed repository does not optimize", @@ -281,10 +280,9 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 gittest.Exec(t, cfg, "-c", "commitGraph.generationVersion=2", "-C", repoPath, "commit-graph", "write", "--split", "--changed-paths") return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "total", status: "success", count: 1}, + }, }, { desc: "recent loose objects don't get pruned", @@ -314,12 +312,11 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_objects_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "packed_objects_incremental", status: "success", count: 1}, + {name: "written_commit_graph_incremental", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "old loose objects get pruned", @@ -346,20 +343,18 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_objects_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_full", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="pruned_objects",status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "packed_objects_incremental", status: "success", count: 1}, + {name: "written_commit_graph_full", status: "success", count: 1}, + {name: "pruned_objects", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, // Object pools never prune objects. - expectedMetricsForPool: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_objects_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="written_commit_graph_incremental", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetricsForPool: []metric{ + {name: "packed_objects_incremental", status: "success", count: 1}, + {name: "written_commit_graph_incremental", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, { desc: "loose refs get packed", @@ -378,11 +373,10 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 return repo }, - expectedMetrics: `# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository -# TYPE gitaly_housekeeping_tasks_total counter -gitaly_housekeeping_tasks_total{housekeeping_task="packed_refs", status="success"} 1 -gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 -`, + expectedMetrics: []metric{ + {name: "packed_refs", status: "success", count: 1}, + {name: "total", status: "success", count: 1}, + }, }, } { tc := tc @@ -399,14 +393,26 @@ gitaly_housekeeping_tasks_total{housekeeping_task="total", status="success"} 1 require.Equal(t, tc.expectedErr, err) expectedMetrics := tc.expectedMetrics - if stats.IsPoolRepository(repoProto) && tc.expectedMetricsForPool != "" { + if stats.IsPoolRepository(repoProto) && tc.expectedMetricsForPool != nil { expectedMetrics = tc.expectedMetricsForPool } + var buf bytes.Buffer + _, err = buf.WriteString("# HELP gitaly_housekeeping_tasks_total Total number of housekeeping tasks performed in the repository\n") + require.NoError(t, err) + _, err = buf.WriteString("# TYPE gitaly_housekeeping_tasks_total counter\n") + require.NoError(t, err) + + for _, metric := range expectedMetrics { + _, err := buf.WriteString(fmt.Sprintf( + "gitaly_housekeeping_tasks_total{housekeeping_task=%q, status=%q} %d\n", + metric.name, metric.status, metric.count, + )) + require.NoError(t, err) + } + require.NoError(t, testutil.CollectAndCompare( - manager.tasksTotal, - bytes.NewBufferString(expectedMetrics), - "gitaly_housekeeping_tasks_total", + manager.tasksTotal, &buf, "gitaly_housekeeping_tasks_total", )) }) } |