...

Source file src/github.com/go-kit/kit/metrics/influx/influx_test.go

Documentation: github.com/go-kit/kit/metrics/influx

     1  package influx
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"regexp"
     7  	"strconv"
     8  	"strings"
     9  	"testing"
    10  
    11  	influxdb "github.com/influxdata/influxdb1-client/v2"
    12  
    13  	"github.com/go-kit/kit/metrics/teststat"
    14  	"github.com/go-kit/log"
    15  )
    16  
    17  func TestCounter(t *testing.T) {
    18  	in := New(map[string]string{"a": "b"}, influxdb.BatchPointsConfig{}, log.NewNopLogger())
    19  	re := regexp.MustCompile(`influx_counter,a=b count=([0-9\.]+) [0-9]+`) // reverse-engineered :\
    20  	counter := in.NewCounter("influx_counter")
    21  	value := func() float64 {
    22  		client := &bufWriter{}
    23  		in.WriteTo(client)
    24  		match := re.FindStringSubmatch(client.buf.String())
    25  		f, _ := strconv.ParseFloat(match[1], 64)
    26  		return f
    27  	}
    28  	if err := teststat.TestCounter(counter, value); err != nil {
    29  		t.Fatal(err)
    30  	}
    31  }
    32  
    33  func TestGauge(t *testing.T) {
    34  	in := New(map[string]string{"foo": "alpha"}, influxdb.BatchPointsConfig{}, log.NewNopLogger())
    35  	re := regexp.MustCompile(`influx_gauge,foo=alpha value=([0-9\.]+) [0-9]+`)
    36  	gauge := in.NewGauge("influx_gauge")
    37  	value := func() []float64 {
    38  		client := &bufWriter{}
    39  		in.WriteTo(client)
    40  		match := re.FindStringSubmatch(client.buf.String())
    41  		f, _ := strconv.ParseFloat(match[1], 64)
    42  		return []float64{f}
    43  	}
    44  	if err := teststat.TestGauge(gauge, value); err != nil {
    45  		t.Fatal(err)
    46  	}
    47  }
    48  
    49  func TestHistogram(t *testing.T) {
    50  	in := New(map[string]string{"foo": "alpha"}, influxdb.BatchPointsConfig{}, log.NewNopLogger())
    51  	re := regexp.MustCompile(`influx_histogram,bar=beta,foo=alpha p50=([0-9\.]+),p90=([0-9\.]+),p95=([0-9\.]+),p99=([0-9\.]+) [0-9]+`)
    52  	histogram := in.NewHistogram("influx_histogram").With("bar", "beta")
    53  	quantiles := func() (float64, float64, float64, float64) {
    54  		w := &bufWriter{}
    55  		in.WriteTo(w)
    56  		match := re.FindStringSubmatch(w.buf.String())
    57  		if len(match) != 5 {
    58  			t.Errorf("These are not the quantiles you're looking for: %v\n", match)
    59  		}
    60  		var result [4]float64
    61  		for i, q := range match[1:] {
    62  			result[i], _ = strconv.ParseFloat(q, 64)
    63  		}
    64  		return result[0], result[1], result[2], result[3]
    65  	}
    66  	if err := teststat.TestHistogram(histogram, quantiles, 0.01); err != nil {
    67  		t.Fatal(err)
    68  	}
    69  }
    70  
    71  func TestHistogramLabels(t *testing.T) {
    72  	in := New(map[string]string{}, influxdb.BatchPointsConfig{}, log.NewNopLogger())
    73  	h := in.NewHistogram("foo")
    74  	h.Observe(123)
    75  	h.With("abc", "xyz").Observe(456)
    76  	w := &bufWriter{}
    77  	if err := in.WriteTo(w); err != nil {
    78  		t.Fatal(err)
    79  	}
    80  	if want, have := 2, len(strings.Split(strings.TrimSpace(w.buf.String()), "\n")); want != have {
    81  		t.Errorf("want %d, have %d", want, have)
    82  	}
    83  }
    84  
    85  func TestIssue404(t *testing.T) {
    86  	in := New(map[string]string{}, influxdb.BatchPointsConfig{}, log.NewNopLogger())
    87  
    88  	counterOne := in.NewCounter("influx_counter_one").With("a", "b")
    89  	counterOne.Add(123)
    90  
    91  	counterTwo := in.NewCounter("influx_counter_two").With("c", "d")
    92  	counterTwo.Add(456)
    93  
    94  	w := &bufWriter{}
    95  	in.WriteTo(w)
    96  
    97  	lines := strings.Split(strings.TrimSpace(w.buf.String()), "\n")
    98  	if want, have := 2, len(lines); want != have {
    99  		t.Fatalf("want %d, have %d", want, have)
   100  	}
   101  	for _, line := range lines {
   102  		if strings.HasPrefix(line, "influx_counter_one") {
   103  			if !strings.HasPrefix(line, "influx_counter_one,a=b count=123 ") {
   104  				t.Errorf("invalid influx_counter_one: %s", line)
   105  			}
   106  		} else if strings.HasPrefix(line, "influx_counter_two") {
   107  			if !strings.HasPrefix(line, "influx_counter_two,c=d count=456 ") {
   108  				t.Errorf("invalid influx_counter_two: %s", line)
   109  			}
   110  		} else {
   111  			t.Errorf("unexpected line: %s", line)
   112  		}
   113  	}
   114  }
   115  
   116  type bufWriter struct {
   117  	buf bytes.Buffer
   118  }
   119  
   120  func (w *bufWriter) Write(bp influxdb.BatchPoints) error {
   121  	for _, p := range bp.Points() {
   122  		fmt.Fprintf(&w.buf, p.String()+"\n")
   123  	}
   124  	return nil
   125  }
   126  

View as plain text