@@ -29,6 +29,8 @@ func TestScrape_Errors(t *testing.T) {
29
29
getPageFileStats func () ([]* pageFileStats , error )
30
30
pageReadsScrapeErr error
31
31
pageWritesScrapeErr error
32
+ pageMajFaultsScrapeErr error
33
+ pageFaultsScrapeErr error
32
34
expectedErr string
33
35
expectedErrCount int
34
36
expectedUsedValue int64
@@ -71,11 +73,32 @@ func TestScrape_Errors(t *testing.T) {
71
73
expectedErrCount : pagingMetricsLen ,
72
74
},
73
75
{
74
- name : "multipleErrors" ,
75
- getPageFileStats : func () ([]* pageFileStats , error ) { return nil , errors .New ("err1" ) },
76
- pageReadsScrapeErr : errors .New ("err2" ),
77
- expectedErr : "failed to read page file stats: err1; err2" ,
78
- expectedErrCount : pagingUsageMetricsLen + pagingMetricsLen ,
76
+ name : "pageMajFaultsScrapeError" ,
77
+ pageMajFaultsScrapeErr : errors .New ("err3" ),
78
+ expectedErr : "err3" ,
79
+ expectedErrCount : 2 , // If major faults failed to be scraped, the code can't report minor faults either
80
+ },
81
+ {
82
+ name : "pageFaultsScrapeError" ,
83
+ pageFaultsScrapeErr : errors .New ("err4" ),
84
+ expectedErr : "err4" ,
85
+ expectedErrCount : 1 ,
86
+ },
87
+ {
88
+ name : "multipleErrors-majorFaultErr" ,
89
+ getPageFileStats : func () ([]* pageFileStats , error ) { return nil , errors .New ("err1" ) },
90
+ pageReadsScrapeErr : errors .New ("err2" ),
91
+ pageMajFaultsScrapeErr : errors .New ("err3" ),
92
+ expectedErr : "failed to read page file stats: err1; err2; err3" ,
93
+ expectedErrCount : 4 , // If major faults failed to be scraped, the code can't report minor faults either
94
+ },
95
+ {
96
+ name : "multipleErrors-minorFaultErr" ,
97
+ getPageFileStats : func () ([]* pageFileStats , error ) { return nil , errors .New ("err1" ) },
98
+ pageReadsScrapeErr : errors .New ("err2" ),
99
+ pageFaultsScrapeErr : errors .New ("err3" ),
100
+ expectedErr : "failed to read page file stats: err1; err2; err3" ,
101
+ expectedErrCount : 3 ,
79
102
},
80
103
}
81
104
@@ -98,19 +121,46 @@ func TestScrape_Errors(t *testing.T) {
98
121
assert .Zero (t , pageSize % 4096 ) // page size on Windows should always be a multiple of 4KB
99
122
}
100
123
124
+ const (
125
+ defaultPageReadsPerSec int64 = 1000
126
+ defaultPageWritesPerSec int64 = 500
127
+ defaultPageFaultsPerSec int64 = 300
128
+ defaultPageMajPerSec int64 = 200
129
+ )
101
130
scraper .perfCounterFactory = func (_ , _ , counter string ) (winperfcounters.PerfCounterWatcher , error ) {
102
- if counter == pageReadsPerSec && test .pageReadsScrapeErr != nil {
103
- return & testmocks.PerfCounterWatcherMock {
104
- ScrapeErr : test .pageReadsScrapeErr ,
105
- }, nil
106
- }
107
- if counter == pageWritesPerSec && test .pageWritesScrapeErr != nil {
108
- return & testmocks.PerfCounterWatcherMock {
109
- ScrapeErr : test .pageWritesScrapeErr ,
110
- }, nil
131
+ perfCounterMock := & testmocks.PerfCounterWatcherMock {}
132
+ switch counter {
133
+ case pageReadsPerSec :
134
+ perfCounterMock .Val = defaultPageReadsPerSec
135
+ if test .pageReadsScrapeErr != nil {
136
+ return & testmocks.PerfCounterWatcherMock {
137
+ ScrapeErr : test .pageReadsScrapeErr ,
138
+ }, nil
139
+ }
140
+ case pageWritesPerSec :
141
+ perfCounterMock .Val = defaultPageWritesPerSec
142
+ if test .pageWritesScrapeErr != nil {
143
+ return & testmocks.PerfCounterWatcherMock {
144
+ ScrapeErr : test .pageWritesScrapeErr ,
145
+ }, nil
146
+ }
147
+ case pageFaultsPerSec :
148
+ perfCounterMock .Val = defaultPageFaultsPerSec
149
+ if test .pageFaultsScrapeErr != nil {
150
+ return & testmocks.PerfCounterWatcherMock {
151
+ ScrapeErr : test .pageFaultsScrapeErr ,
152
+ }, nil
153
+ }
154
+ case pageMajPerSec :
155
+ perfCounterMock .Val = defaultPageMajPerSec
156
+ if test .pageMajFaultsScrapeErr != nil {
157
+ return & testmocks.PerfCounterWatcherMock {
158
+ ScrapeErr : test .pageMajFaultsScrapeErr ,
159
+ }, nil
160
+ }
111
161
}
112
162
113
- return & testmocks. PerfCounterWatcherMock {} , nil
163
+ return perfCounterMock , nil
114
164
}
115
165
116
166
err := scraper .start (context .Background (), componenttest .NewNopHost ())
@@ -134,13 +184,25 @@ func TestScrape_Errors(t *testing.T) {
134
184
assert .NoError (t , err )
135
185
136
186
metrics := md .ResourceMetrics ().At (0 ).ScopeMetrics ().At (0 ).Metrics ()
137
- pagingUsageMetric := metrics .At (1 )
138
- assert .Equal (t , test .expectedUsedValue , pagingUsageMetric .Sum ().DataPoints ().At (0 ).IntValue ())
139
- assert .Equal (t , test .expectedFreeValue , pagingUsageMetric .Sum ().DataPoints ().At (1 ).IntValue ())
140
-
141
- pagingUtilizationMetric := metrics .At (2 )
142
- assert .Equal (t , test .expectedUtilizationUsedValue , pagingUtilizationMetric .Gauge ().DataPoints ().At (0 ).DoubleValue ())
143
- assert .Equal (t , test .expectedUtilizationFreeValue , pagingUtilizationMetric .Gauge ().DataPoints ().At (1 ).DoubleValue ())
187
+ for i := 0 ; i < metrics .Len (); i ++ {
188
+ metric := metrics .At (i )
189
+ switch metric .Name () {
190
+ case metadata .MetricsInfo .SystemPagingFaults .Name :
191
+ assert .Equal (t , defaultPageMajPerSec , metric .Sum ().DataPoints ().At (0 ).IntValue ())
192
+ assert .Equal (t , defaultPageFaultsPerSec - defaultPageMajPerSec , metric .Sum ().DataPoints ().At (1 ).IntValue ())
193
+ case metadata .MetricsInfo .SystemPagingOperations .Name :
194
+ assert .Equal (t , defaultPageReadsPerSec , metric .Sum ().DataPoints ().At (0 ).IntValue ())
195
+ assert .Equal (t , defaultPageWritesPerSec , metric .Sum ().DataPoints ().At (1 ).IntValue ())
196
+ case metadata .MetricsInfo .SystemPagingUsage .Name :
197
+ assert .Equal (t , test .expectedUsedValue , metric .Sum ().DataPoints ().At (0 ).IntValue ())
198
+ assert .Equal (t , test .expectedFreeValue , metric .Sum ().DataPoints ().At (1 ).IntValue ())
199
+ case metadata .MetricsInfo .SystemPagingUtilization .Name :
200
+ assert .Equal (t , test .expectedUtilizationUsedValue , metric .Gauge ().DataPoints ().At (0 ).DoubleValue ())
201
+ assert .Equal (t , test .expectedUtilizationFreeValue , metric .Gauge ().DataPoints ().At (1 ).DoubleValue ())
202
+ default :
203
+ assert .Fail (t , "Unexpected metric found" , metric .Name ())
204
+ }
205
+ }
144
206
})
145
207
}
146
208
}
@@ -159,10 +221,10 @@ func TestPagingScrapeWithRealData(t *testing.T) {
159
221
require .NotNil (t , metrics , "Metrics cannot be nil" )
160
222
161
223
// Expected metric names for paging scraper.
162
- // Note: the `system.paging.faults` is enabled by default, but is not being collected on Windows.
163
224
expectedMetrics := map [string ]bool {
164
- "system.paging.operations" : false ,
165
- "system.paging.usage" : false ,
225
+ metadata .MetricsInfo .SystemPagingOperations .Name : false ,
226
+ metadata .MetricsInfo .SystemPagingUsage .Name : false ,
227
+ metadata .MetricsInfo .SystemPagingFaults .Name : false ,
166
228
}
167
229
168
230
internal .AssertExpectedMetrics (t , expectedMetrics , metrics )
0 commit comments