mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-20 23:07:29 +01:00
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
|
|
// All rights reserved. This file is part of cc-backend.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
package metricdispatch
|
|
|
|
import "testing"
|
|
|
|
func TestTargetPointsForPolicy(t *testing.T) {
|
|
tests := []struct {
|
|
policy ResamplePolicy
|
|
want int
|
|
}{
|
|
{ResamplePolicyLow, 200},
|
|
{ResamplePolicyMedium, 500},
|
|
{ResamplePolicyHigh, 1000},
|
|
{ResamplePolicy("unknown"), 0},
|
|
{ResamplePolicy(""), 0},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
if got := TargetPointsForPolicy(tt.policy); got != tt.want {
|
|
t.Errorf("TargetPointsForPolicy(%q) = %d, want %d", tt.policy, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestComputeResolution(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
duration int64
|
|
frequency int64
|
|
targetPoints int
|
|
want int
|
|
}{
|
|
// 24h job, 60s frequency, 1440 total points
|
|
{"low_24h_60s", 86400, 60, 200, 480},
|
|
{"medium_24h_60s", 86400, 60, 500, 180},
|
|
{"high_24h_60s", 86400, 60, 1000, 120},
|
|
|
|
// 2h job, 60s frequency, 120 total points — no resampling needed
|
|
{"low_2h_60s", 7200, 60, 200, 0},
|
|
{"medium_2h_60s", 7200, 60, 500, 0},
|
|
{"high_2h_60s", 7200, 60, 1000, 0},
|
|
|
|
// Edge: zero/negative inputs
|
|
{"zero_duration", 0, 60, 200, 0},
|
|
{"zero_frequency", 86400, 0, 200, 0},
|
|
{"zero_target", 86400, 60, 0, 0},
|
|
{"negative_duration", -100, 60, 200, 0},
|
|
|
|
// 12h job, 30s frequency, 1440 total points
|
|
{"medium_12h_30s", 43200, 30, 500, 90},
|
|
|
|
// Exact fit: total points == target points
|
|
{"exact_fit", 12000, 60, 200, 0},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := ComputeResolution(tt.duration, tt.frequency, tt.targetPoints)
|
|
if got != tt.want {
|
|
t.Errorf("ComputeResolution(%d, %d, %d) = %d, want %d",
|
|
tt.duration, tt.frequency, tt.targetPoints, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|