tty-prometheus-exporter-merger/merger/merger_test.go

76 lines
2.3 KiB
Go

package merger_test
import (
"bytes"
"fmt"
"net"
"net/http"
"sort"
"strings"
"testing"
"time"
prom "github.com/prometheus/client_model/go"
"github.com/vadv/prometheus-exporter-merger/merger"
)
const (
data1 = `
# TYPE fluentbit_filter_add_records_total counter
fluentbit_filter_add_records_total{name="kubernetes.0"} 0 1589716338403
fluentbit_filter_add_records_total{name="lua.1"} 0 1589716338403
fluentbit_filter_add_records_total{name="lua.2"} 0 1589716338403
fluentbit_filter_add_records_total{name="lua.3"} 0 1589716338403
fluentbit_filter_add_records_total{name="kubernetes.0"} 0 1589716338417
`
data2 = `
# TYPE fluentbit_filter_add_records_total counter
fluentbit_filter_add_records_total{name="lua.1"} 0 1589716338417
fluentbit_filter_add_records_total{name="rewrite_tag.2"} 0 1589716338417
`
result = `
# TYPE fluentbit_filter_add_records_total counter
fluentbit_filter_add_records_total{name="kubernetes.0",url="value1"} 0 1589716338403
fluentbit_filter_add_records_total{name="kubernetes.0",url="value1"} 0 1589716338417
fluentbit_filter_add_records_total{name="lua.1",url="value1"} 0 1589716338403
fluentbit_filter_add_records_total{name="lua.1",url="value2"} 0 1589716338417
fluentbit_filter_add_records_total{name="lua.2",url="value1"} 0 1589716338403
fluentbit_filter_add_records_total{name="lua.3",url="value1"} 0 1589716338403
fluentbit_filter_add_records_total{name="rewrite_tag.2",url="value2"} 0 1589716338417`
)
func Test_Merger(t *testing.T) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
t.Fatal(err)
}
http.HandleFunc("/data_1", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, data1)
})
http.HandleFunc("/data_2", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, data2)
})
go http.Serve(listener, nil)
urlPrefix := fmt.Sprintf("http://127.0.0.1:%d", listener.Addr().(*net.TCPAddr).Port)
url, value1, value2 := "url", "value1", "value2"
label1 := []*prom.LabelPair{{Name: &url, Value: &value1}}
label2 := []*prom.LabelPair{{Name: &url, Value: &value2}}
m := merger.New(time.Second)
m.AddSource(urlPrefix+"/data_1", label1)
m.AddSource(urlPrefix+"/data_2", label2)
out := bytes.NewBuffer(make([]byte, 0))
m.Merge(out)
outStrs := strings.Split(out.String(), "\n")
sort.Strings(outStrs)
if result != strings.Join(outStrs, "\n") {
t.Fatalf("out:\n%s\n", strings.Join(outStrs, "\n"))
}
}