mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-12-31 02:46:16 +01:00
126 lines
3.6 KiB
Go
126 lines
3.6 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 metricdispatcher
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ClusterCockpit/cc-lib/schema"
|
|
)
|
|
|
|
func TestDeepCopy(t *testing.T) {
|
|
nodeId := "0"
|
|
original := schema.JobData{
|
|
"cpu_load": {
|
|
schema.MetricScopeNode: &schema.JobMetric{
|
|
Timestep: 60,
|
|
Unit: schema.Unit{Base: "load", Prefix: ""},
|
|
Series: []schema.Series{
|
|
{
|
|
Hostname: "node001",
|
|
Id: &nodeId,
|
|
Data: []schema.Float{1.0, 2.0, 3.0},
|
|
Statistics: schema.MetricStatistics{
|
|
Min: 1.0,
|
|
Avg: 2.0,
|
|
Max: 3.0,
|
|
},
|
|
},
|
|
},
|
|
StatisticsSeries: &schema.StatsSeries{
|
|
Min: []schema.Float{1.0, 1.5, 2.0},
|
|
Mean: []schema.Float{2.0, 2.5, 3.0},
|
|
Median: []schema.Float{2.0, 2.5, 3.0},
|
|
Max: []schema.Float{3.0, 3.5, 4.0},
|
|
Percentiles: map[int][]schema.Float{
|
|
25: {1.5, 2.0, 2.5},
|
|
75: {2.5, 3.0, 3.5},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
copied := deepCopy(original)
|
|
|
|
original["cpu_load"][schema.MetricScopeNode].Series[0].Data[0] = 999.0
|
|
original["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Min[0] = 888.0
|
|
original["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Percentiles[25][0] = 777.0
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].Series[0].Data[0] != 1.0 {
|
|
t.Errorf("Series data was not deeply copied: got %v, want 1.0",
|
|
copied["cpu_load"][schema.MetricScopeNode].Series[0].Data[0])
|
|
}
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Min[0] != 1.0 {
|
|
t.Errorf("StatisticsSeries was not deeply copied: got %v, want 1.0",
|
|
copied["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Min[0])
|
|
}
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Percentiles[25][0] != 1.5 {
|
|
t.Errorf("Percentiles was not deeply copied: got %v, want 1.5",
|
|
copied["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Percentiles[25][0])
|
|
}
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].Timestep != 60 {
|
|
t.Errorf("Timestep not copied correctly: got %v, want 60",
|
|
copied["cpu_load"][schema.MetricScopeNode].Timestep)
|
|
}
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].Series[0].Hostname != "node001" {
|
|
t.Errorf("Hostname not copied correctly: got %v, want node001",
|
|
copied["cpu_load"][schema.MetricScopeNode].Series[0].Hostname)
|
|
}
|
|
}
|
|
|
|
func TestDeepCopyNilStatisticsSeries(t *testing.T) {
|
|
original := schema.JobData{
|
|
"mem_used": {
|
|
schema.MetricScopeNode: &schema.JobMetric{
|
|
Timestep: 60,
|
|
Series: []schema.Series{
|
|
{
|
|
Hostname: "node001",
|
|
Data: []schema.Float{1.0, 2.0},
|
|
},
|
|
},
|
|
StatisticsSeries: nil,
|
|
},
|
|
},
|
|
}
|
|
|
|
copied := deepCopy(original)
|
|
|
|
if copied["mem_used"][schema.MetricScopeNode].StatisticsSeries != nil {
|
|
t.Errorf("StatisticsSeries should be nil, got %v",
|
|
copied["mem_used"][schema.MetricScopeNode].StatisticsSeries)
|
|
}
|
|
}
|
|
|
|
func TestDeepCopyEmptyPercentiles(t *testing.T) {
|
|
original := schema.JobData{
|
|
"cpu_load": {
|
|
schema.MetricScopeNode: &schema.JobMetric{
|
|
Timestep: 60,
|
|
Series: []schema.Series{},
|
|
StatisticsSeries: &schema.StatsSeries{
|
|
Min: []schema.Float{1.0},
|
|
Mean: []schema.Float{2.0},
|
|
Median: []schema.Float{2.0},
|
|
Max: []schema.Float{3.0},
|
|
Percentiles: nil,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
copied := deepCopy(original)
|
|
|
|
if copied["cpu_load"][schema.MetricScopeNode].StatisticsSeries.Percentiles != nil {
|
|
t.Errorf("Percentiles should be nil when source is nil/empty")
|
|
}
|
|
}
|