mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
Fixes #11451 A refactor of the Agent API passes metrics as protobufs, which include pointers to label name/value pairs. The aggregator tested for sameness by doing a shallow compare of label values, which for different stats reports would compare unequal because the pointers would be different. This fix does a deep compare. While testing I also noted that we neglect to compare template names. This is unlikely to have caused any issue in practice, since the combination of username/workspace is unique, but in the context of comparing metric labels we should do the comparison. If a user creates a workspace, deletes it, then recreates from a different template, we could in principle have reported incorrect stats for the old template.
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package proto_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/coder/coder/v2/agent/proto"
|
|
)
|
|
|
|
func TestLabelsEqual(t *testing.T) {
|
|
t.Parallel()
|
|
for _, tc := range []struct {
|
|
name string
|
|
a []*proto.Stats_Metric_Label
|
|
b []*proto.Stats_Metric_Label
|
|
eq bool
|
|
}{
|
|
{
|
|
name: "mainlineEq",
|
|
a: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
b: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
eq: true,
|
|
},
|
|
{
|
|
name: "emptyValue",
|
|
a: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
{Name: "singularity", Value: ""},
|
|
},
|
|
b: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
eq: true,
|
|
},
|
|
{
|
|
name: "extra",
|
|
a: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
{Name: "opacity", Value: "seyshells"},
|
|
},
|
|
b: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
eq: false,
|
|
},
|
|
{
|
|
name: "different",
|
|
a: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "sus"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
b: []*proto.Stats_Metric_Label{
|
|
{Name: "credulity", Value: "legit"},
|
|
{Name: "color", Value: "aquamarine"},
|
|
},
|
|
eq: false,
|
|
},
|
|
} {
|
|
tc := tc
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
require.Equal(t, tc.eq, proto.LabelsEqual(tc.a, tc.b))
|
|
require.Equal(t, tc.eq, proto.LabelsEqual(tc.b, tc.a))
|
|
})
|
|
}
|
|
}
|