mirror of
https://github.com/golang/go
synced 2024-11-06 06:36:20 -07:00
2f6d8bf0ad
Now the tests are at a high enough level, we can switch them to using the full exporter by bulding a fake http client to bind it to. This lets us use the true public interface and also excercise more of the functionality in the tests. With this we are now ready to replace the entire implementation safely. Change-Id: Ifdbf6230de3ec7c7c5381c840b135cb7a0bc1e55 Reviewed-on: https://go-review.googlesource.com/c/tools/+/209161 Run-TryBot: Ian Cottrell <iancottrell@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
325 lines
5.9 KiB
Go
325 lines
5.9 KiB
Go
package ocagent_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"golang.org/x/tools/internal/telemetry"
|
|
"golang.org/x/tools/internal/telemetry/metric"
|
|
)
|
|
|
|
func TestEncodeMetric(t *testing.T) {
|
|
end, _ := time.Parse(time.RFC3339Nano, "1970-01-01T00:00:30Z")
|
|
const prefix = testNodeStr + `
|
|
"metrics":[`
|
|
const suffix = `]}`
|
|
tests := []struct {
|
|
name string
|
|
data telemetry.MetricData
|
|
want string
|
|
}{
|
|
{
|
|
name: "nil data",
|
|
want: prefix + `null` + suffix,
|
|
},
|
|
{
|
|
name: "Int64Data cumulative",
|
|
data: &metric.Int64Data{
|
|
Info: &metric.Scalar{
|
|
Name: "int",
|
|
Description: "int metric",
|
|
Keys: []interface{}{"hello"},
|
|
},
|
|
Rows: []int64{
|
|
1,
|
|
2,
|
|
3,
|
|
},
|
|
EndTime: &end,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "int",
|
|
"description": "int metric",
|
|
"type": 4,
|
|
"label_keys": [
|
|
{
|
|
"key": "hello"
|
|
}
|
|
]
|
|
},
|
|
"timeseries": [
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"int64Value": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"int64Value": 2
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"int64Value": 3
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}` + suffix,
|
|
},
|
|
{
|
|
name: "Int64Data gauge",
|
|
data: &metric.Int64Data{
|
|
Info: &metric.Scalar{
|
|
Name: "int-gauge",
|
|
Description: "int metric gauge",
|
|
Keys: []interface{}{"hello"},
|
|
},
|
|
IsGauge: true,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "int-gauge",
|
|
"description": "int metric gauge",
|
|
"type": 1,
|
|
"label_keys": [
|
|
{
|
|
"key": "hello"
|
|
}
|
|
]
|
|
}
|
|
}` + suffix,
|
|
},
|
|
{
|
|
name: "Float64Data cumulative",
|
|
data: &metric.Float64Data{
|
|
Info: &metric.Scalar{
|
|
Name: "float",
|
|
Description: "float metric",
|
|
Keys: []interface{}{"world"},
|
|
},
|
|
Rows: []float64{
|
|
1.5,
|
|
4.5,
|
|
},
|
|
EndTime: &end,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "float",
|
|
"description": "float metric",
|
|
"type": 5,
|
|
"label_keys": [
|
|
{
|
|
"key": "world"
|
|
}
|
|
]
|
|
},
|
|
"timeseries": [
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"doubleValue": 1.5
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"doubleValue": 4.5
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}` + suffix,
|
|
},
|
|
{
|
|
name: "Float64Data gauge",
|
|
data: &metric.Float64Data{
|
|
Info: &metric.Scalar{
|
|
Name: "float-gauge",
|
|
Description: "float metric gauge",
|
|
Keys: []interface{}{"world"},
|
|
},
|
|
IsGauge: true,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "float-gauge",
|
|
"description": "float metric gauge",
|
|
"type": 2,
|
|
"label_keys": [
|
|
{
|
|
"key": "world"
|
|
}
|
|
]
|
|
}
|
|
}` + suffix,
|
|
},
|
|
{
|
|
name: "HistogramInt64",
|
|
data: &metric.HistogramInt64Data{
|
|
Info: &metric.HistogramInt64{
|
|
Name: "histogram int",
|
|
Description: "histogram int metric",
|
|
Keys: []interface{}{"hello"},
|
|
Buckets: []int64{
|
|
0, 5, 10,
|
|
},
|
|
},
|
|
Rows: []*metric.HistogramInt64Row{
|
|
{
|
|
Count: 6,
|
|
Sum: 40,
|
|
Values: []int64{
|
|
1,
|
|
2,
|
|
3,
|
|
},
|
|
},
|
|
},
|
|
EndTime: &end,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "histogram int",
|
|
"description": "histogram int metric",
|
|
"type": 6,
|
|
"label_keys": [
|
|
{
|
|
"key": "hello"
|
|
}
|
|
]
|
|
},
|
|
"timeseries": [
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"distributionValue": {
|
|
"count": 6,
|
|
"sum": 40,
|
|
"bucket_options": {
|
|
"explicit": {
|
|
"bounds": [
|
|
0,
|
|
5,
|
|
10
|
|
]
|
|
}
|
|
},
|
|
"buckets": [
|
|
{
|
|
"count": 1
|
|
},
|
|
{
|
|
"count": 2
|
|
},
|
|
{
|
|
"count": 3
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}` + suffix,
|
|
},
|
|
{
|
|
name: "HistogramFloat64",
|
|
data: &metric.HistogramFloat64Data{
|
|
Info: &metric.HistogramFloat64{
|
|
Name: "histogram float",
|
|
Description: "histogram float metric",
|
|
Keys: []interface{}{"hello"},
|
|
Buckets: []float64{
|
|
0, 5,
|
|
},
|
|
},
|
|
Rows: []*metric.HistogramFloat64Row{
|
|
{
|
|
Count: 3,
|
|
Sum: 10,
|
|
Values: []int64{
|
|
1,
|
|
2,
|
|
},
|
|
},
|
|
},
|
|
EndTime: &end,
|
|
},
|
|
want: prefix + `{
|
|
"metric_descriptor": {
|
|
"name": "histogram float",
|
|
"description": "histogram float metric",
|
|
"type": 6,
|
|
"label_keys": [
|
|
{
|
|
"key": "hello"
|
|
}
|
|
]
|
|
},
|
|
"timeseries": [
|
|
{
|
|
"start_timestamp": "1970-01-01T00:00:00Z",
|
|
"points": [
|
|
{
|
|
"timestamp": "1970-01-01T00:00:30Z",
|
|
"distributionValue": {
|
|
"count": 3,
|
|
"sum": 10,
|
|
"bucket_options": {
|
|
"explicit": {
|
|
"bounds": [
|
|
0,
|
|
5
|
|
]
|
|
}
|
|
},
|
|
"buckets": [
|
|
{
|
|
"count": 1
|
|
},
|
|
{
|
|
"count": 2
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}` + suffix,
|
|
},
|
|
}
|
|
|
|
ctx := context.TODO()
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
exporter.Metric(ctx, tt.data)
|
|
exporter.Flush()
|
|
got := sent.get("/v1/metrics")
|
|
checkJSON(t, got, []byte(tt.want))
|
|
})
|
|
}
|
|
}
|