Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/metrics/cleaner_test.go
4093 views
1
package metrics
2
3
import (
4
"os"
5
"path/filepath"
6
"testing"
7
"time"
8
9
"github.com/go-kit/log"
10
"github.com/grafana/agent/pkg/metrics/instance"
11
"github.com/stretchr/testify/require"
12
)
13
14
func TestWALCleaner_getAllStorageNoRoot(t *testing.T) {
15
walRoot := filepath.Join(os.TempDir(), "getAllStorageNoRoot")
16
logger := log.NewLogfmtLogger(os.Stderr)
17
cleaner := NewWALCleaner(
18
logger,
19
&instance.MockManager{},
20
walRoot,
21
DefaultCleanupAge,
22
DefaultCleanupPeriod,
23
)
24
25
// Bogus WAL root that doesn't exist. Method should return no results
26
wals := cleaner.getAllStorage()
27
28
require.Empty(t, wals)
29
}
30
31
func TestWALCleaner_getAllStorageSuccess(t *testing.T) {
32
walRoot := t.TempDir()
33
34
walDir := filepath.Join(walRoot, "instance-1")
35
err := os.MkdirAll(walDir, 0755)
36
require.NoError(t, err)
37
38
logger := log.NewLogfmtLogger(os.Stderr)
39
cleaner := NewWALCleaner(
40
logger,
41
&instance.MockManager{},
42
walRoot,
43
DefaultCleanupAge,
44
DefaultCleanupPeriod,
45
)
46
wals := cleaner.getAllStorage()
47
48
require.Equal(t, []string{walDir}, wals)
49
}
50
51
func TestWALCleaner_getAbandonedStorageBeforeCutoff(t *testing.T) {
52
walRoot := t.TempDir()
53
54
walDir := filepath.Join(walRoot, "instance-1")
55
err := os.MkdirAll(walDir, 0755)
56
require.NoError(t, err)
57
58
all := []string{walDir}
59
managed := make(map[string]bool)
60
now := time.Now()
61
62
logger := log.NewLogfmtLogger(os.Stderr)
63
cleaner := NewWALCleaner(
64
logger,
65
&instance.MockManager{},
66
walRoot,
67
5*time.Minute,
68
DefaultCleanupPeriod,
69
)
70
71
cleaner.walLastModified = func(path string) (time.Time, error) {
72
return now, nil
73
}
74
75
// Last modification time on our WAL directory is the same as "now"
76
// so there shouldn't be any results even though it's not part of the
77
// set of "managed" directories.
78
abandoned := cleaner.getAbandonedStorage(all, managed, now)
79
require.Empty(t, abandoned)
80
}
81
82
func TestWALCleaner_getAbandonedStorageAfterCutoff(t *testing.T) {
83
walRoot := t.TempDir()
84
85
walDir := filepath.Join(walRoot, "instance-1")
86
err := os.MkdirAll(walDir, 0755)
87
require.NoError(t, err)
88
89
all := []string{walDir}
90
managed := make(map[string]bool)
91
now := time.Now()
92
93
logger := log.NewLogfmtLogger(os.Stderr)
94
cleaner := NewWALCleaner(
95
logger,
96
&instance.MockManager{},
97
walRoot,
98
5*time.Minute,
99
DefaultCleanupPeriod,
100
)
101
102
cleaner.walLastModified = func(path string) (time.Time, error) {
103
return now.Add(-30 * time.Minute), nil
104
}
105
106
// Last modification time on our WAL directory is 30 minutes in the past
107
// compared to "now" and we've set the cutoff for our cleaner to be 5
108
// minutes: our WAL directory should show up as abandoned
109
abandoned := cleaner.getAbandonedStorage(all, managed, now)
110
require.Equal(t, []string{walDir}, abandoned)
111
}
112
113
func TestWALCleaner_cleanup(t *testing.T) {
114
walRoot := t.TempDir()
115
116
walDir := filepath.Join(walRoot, "instance-1")
117
err := os.MkdirAll(walDir, 0755)
118
require.NoError(t, err)
119
120
now := time.Now()
121
logger := log.NewLogfmtLogger(os.Stderr)
122
manager := &instance.MockManager{}
123
manager.ListInstancesFunc = func() map[string]instance.ManagedInstance {
124
return make(map[string]instance.ManagedInstance)
125
}
126
127
cleaner := NewWALCleaner(
128
logger,
129
manager,
130
walRoot,
131
5*time.Minute,
132
DefaultCleanupPeriod,
133
)
134
135
cleaner.walLastModified = func(path string) (time.Time, error) {
136
return now.Add(-30 * time.Minute), nil
137
}
138
139
// Last modification time on our WAL directory is 30 minutes in the past
140
// compared to "now" and we've set the cutoff for our cleaner to be 5
141
// minutes: our WAL directory should be removed since it's abandoned
142
cleaner.cleanup()
143
_, err = os.Stat(walDir)
144
require.Error(t, err)
145
require.True(t, os.IsNotExist(err))
146
}
147
148