|
7 | 7 | "math" |
8 | 8 | "strconv" |
9 | 9 | "testing" |
| 10 | + "time" |
10 | 11 |
|
11 | 12 | "github.com/pingcap/tiproxy/pkg/balance/metricsreader" |
12 | 13 | "github.com/pingcap/tiproxy/pkg/util/monotime" |
@@ -77,7 +78,7 @@ func TestCPUBalanceOnce(t *testing.T) { |
77 | 78 | values := make([]*model.SampleStream, 0, len(test.cpus)) |
78 | 79 | for j := 0; j < len(test.cpus); j++ { |
79 | 80 | backends = append(backends, createBackend(j, 0, 0)) |
80 | | - values = append(values, createSampleStream(test.cpus[j], j)) |
| 81 | + values = append(values, createSampleStream(test.cpus[j], j, model.Now())) |
81 | 82 | } |
82 | 83 | mmr := &mockMetricsReader{ |
83 | 84 | qrs: map[uint64]metricsreader.QueryResult{ |
@@ -185,13 +186,15 @@ func TestCPUBalanceContinuously(t *testing.T) { |
185 | 186 |
|
186 | 187 | mmr := newMockMetricsReader() |
187 | 188 | fc := NewFactorCPU(mmr) |
| 189 | + curTime := model.Now().Add(-10 * time.Second) |
188 | 190 | for i, test := range tests { |
189 | 191 | backends := make([]scoredBackend, 0, len(test.cpus)) |
190 | 192 | values := make([]*model.SampleStream, 0, len(test.cpus)) |
191 | 193 | for j := 0; j < len(test.cpus); j++ { |
192 | 194 | backends = append(backends, createBackend(j, test.connCounts[j], test.connScores[j])) |
193 | | - values = append(values, createSampleStream(test.cpus[j], j)) |
| 195 | + values = append(values, createSampleStream(test.cpus[j], j, curTime)) |
194 | 196 | } |
| 197 | + curTime = curTime.Add(time.Millisecond) |
195 | 198 | mmr.qrs[1] = metricsreader.QueryResult{ |
196 | 199 | UpdateTime: monotime.Now(), |
197 | 200 | Value: model.Matrix(values), |
@@ -221,38 +224,74 @@ func TestCPUBalanceContinuously(t *testing.T) { |
221 | 224 |
|
222 | 225 | func TestNoCPUMetric(t *testing.T) { |
223 | 226 | tests := []struct { |
224 | | - cpus []float64 |
| 227 | + cpus [][]float64 |
225 | 228 | updateTime monotime.Time |
226 | 229 | }{ |
227 | 230 | { |
228 | 231 | cpus: nil, |
229 | 232 | }, |
230 | 233 | { |
231 | | - cpus: []float64{1.0, 0.0}, |
232 | | - updateTime: monotime.Now().Sub(cpuMetricExpDuration * 2), |
| 234 | + cpus: [][]float64{{1.0}, {0.0}}, |
| 235 | + updateTime: monotime.Now().Add(-cpuMetricExpDuration * 2), |
233 | 236 | }, |
234 | 237 | { |
235 | | - cpus: []float64{math.NaN(), math.NaN()}, |
| 238 | + cpus: [][]float64{{math.NaN()}, {math.NaN()}}, |
236 | 239 | updateTime: monotime.Now(), |
237 | 240 | }, |
238 | 241 | } |
239 | | - |
240 | 242 | mmr := newMockMetricsReader() |
241 | 243 | fc := NewFactorCPU(mmr) |
242 | | - backends := make([]scoredBackend, 0, 2) |
243 | | - for i := 0; i < 2; i++ { |
244 | | - backends = append(backends, createBackend(i, i*100, i*100)) |
245 | | - } |
| 244 | + backends := []scoredBackend{createBackend(0, 0, 0), createBackend(1, 0, 0)} |
246 | 245 | for i, test := range tests { |
247 | | - values := make([]*model.Sample, 0, len(test.cpus)) |
| 246 | + values := make([]*model.SampleStream, 0, len(test.cpus)) |
248 | 247 | for j := 0; j < len(test.cpus); j++ { |
249 | | - values = append(values, createSample(test.cpus[j], j)) |
| 248 | + ss := createSampleStream(test.cpus[j], j, model.Time(test.updateTime/monotime.Time(time.Millisecond))) |
| 249 | + values = append(values, ss) |
250 | 250 | } |
251 | 251 | mmr.qrs[1] = metricsreader.QueryResult{ |
252 | 252 | UpdateTime: test.updateTime, |
253 | | - Value: model.Vector(values), |
| 253 | + Value: model.Matrix(values), |
254 | 254 | } |
255 | 255 | updateScore(fc, backends) |
256 | 256 | require.Equal(t, backends[0].score(), backends[1].score(), "test index %d", i) |
257 | 257 | } |
258 | 258 | } |
| 259 | + |
| 260 | +func TestCPUResultNotUpdated(t *testing.T) { |
| 261 | + now := model.Now() |
| 262 | + tests := []struct { |
| 263 | + cpu float64 |
| 264 | + updateTime model.Time |
| 265 | + expectedScore int |
| 266 | + }{ |
| 267 | + { |
| 268 | + cpu: 0.1, |
| 269 | + updateTime: now, |
| 270 | + expectedScore: 2, |
| 271 | + }, |
| 272 | + { |
| 273 | + cpu: 0.1, |
| 274 | + updateTime: now, |
| 275 | + expectedScore: 2, |
| 276 | + }, |
| 277 | + { |
| 278 | + cpu: 0.3, |
| 279 | + updateTime: now.Add(time.Second), |
| 280 | + expectedScore: 6, |
| 281 | + }, |
| 282 | + } |
| 283 | + |
| 284 | + mmr := newMockMetricsReader() |
| 285 | + fc := NewFactorCPU(mmr) |
| 286 | + backends := []scoredBackend{createBackend(0, 0, 0), createBackend(1, 0, 0)} |
| 287 | + for i, test := range tests { |
| 288 | + array := []float64{test.cpu} |
| 289 | + values := []*model.SampleStream{createSampleStream(array, 0, test.updateTime), createSampleStream(array, 1, test.updateTime)} |
| 290 | + mmr.qrs[1] = metricsreader.QueryResult{ |
| 291 | + UpdateTime: monotime.Now(), |
| 292 | + Value: model.Matrix(values), |
| 293 | + } |
| 294 | + updateScore(fc, backends) |
| 295 | + require.EqualValues(t, test.expectedScore, backends[0].score(), "test index %d", i) |
| 296 | + } |
| 297 | +} |
0 commit comments