mirror of
				https://github.com/datarhei/core.git
				synced 2025-11-01 03:42:51 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package metric
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestPattern(t *testing.T) {
 | |
| 	p := NewPattern("bla", "label1", "value1", "label2")
 | |
| 	require.Equal(t, false, p.IsValid())
 | |
| 
 | |
| 	p = NewPattern("bla", "label1", "value1", "label2", "valu(e2")
 | |
| 	require.Equal(t, false, p.IsValid())
 | |
| 
 | |
| 	p = NewPattern("bla")
 | |
| 	require.Equal(t, true, p.IsValid())
 | |
| 	require.Equal(t, "bla", p.Name())
 | |
| 
 | |
| 	p = NewPattern("bla", "label1", "value1", "label2", "value2")
 | |
| 	require.Equal(t, true, p.IsValid())
 | |
| }
 | |
| 
 | |
| func TestPatternMatch(t *testing.T) {
 | |
| 	p := NewPattern("bla", "label1", "value1", "label2")
 | |
| 	require.Equal(t, false, p.IsValid())
 | |
| 	require.Equal(t, false, p.Match(map[string]string{"label1": "value1"}))
 | |
| 
 | |
| 	p0 := NewPattern("bla")
 | |
| 	require.Equal(t, true, p0.IsValid())
 | |
| 	require.Equal(t, true, p0.Match(map[string]string{}))
 | |
| 	require.Equal(t, true, p0.Match(map[string]string{"labelX": "foobar"}))
 | |
| 
 | |
| 	p = NewPattern("bla", "label1", "value.", "label2", "val?ue2")
 | |
| 	require.Equal(t, true, p.IsValid())
 | |
| 	require.Equal(t, false, p.Match(map[string]string{}))
 | |
| 	require.Equal(t, false, p.Match(map[string]string{"label1": "value1"}))
 | |
| 	require.Equal(t, true, p.Match(map[string]string{"label1": "value1", "label2": "value2"}))
 | |
| 	require.Equal(t, true, p.Match(map[string]string{"label1": "value5", "label2": "vaue2"}))
 | |
| }
 | |
| 
 | |
| func TestValue(t *testing.T) {
 | |
| 	d := NewDesc("group", "", []string{"label1", "label2"})
 | |
| 	v := NewValue(d, 42, "foobar")
 | |
| 	require.Nil(t, v)
 | |
| 
 | |
| 	v = NewValue(d, 42, "foobar", "foobaz")
 | |
| 	require.NotNil(t, v)
 | |
| 	require.Equal(t, float64(42), v.Val())
 | |
| 
 | |
| 	require.Equal(t, "", v.L("labelX"))
 | |
| 	require.Equal(t, "foobar", v.L("label1"))
 | |
| 	require.Equal(t, "foobaz", v.L("label2"))
 | |
| 	require.Equal(t, "group", v.Name())
 | |
| 	require.Equal(t, "group:label1=foobar label2=foobaz ", v.Hash())
 | |
| 	require.Equal(t, "group: 42.000000 {label1=foobar label2=foobaz }", v.String())
 | |
| 
 | |
| 	require.Equal(t, map[string]string{"label1": "foobar", "label2": "foobaz"}, v.Labels())
 | |
| }
 | |
| 
 | |
| func TestValuePattern(t *testing.T) {
 | |
| 	d := NewDesc("group", "", []string{"label1", "label2"})
 | |
| 	v := NewValue(d, 42, "foobar", "foobaz")
 | |
| 
 | |
| 	p1 := NewPattern("group")
 | |
| 	p2 := NewPattern("group", "label1", "foobar")
 | |
| 	p3 := NewPattern("group", "label2", "foobaz")
 | |
| 	p4 := NewPattern("group", "label2", "foobaz", "label1", "foobar")
 | |
| 
 | |
| 	require.Equal(t, true, v.Match(nil))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p1}))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p2}))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p3}))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p4}))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p1, p2, p3, p4}))
 | |
| 
 | |
| 	p5 := NewPattern("group", "label1", "foobaz")
 | |
| 
 | |
| 	require.Equal(t, false, v.Match([]Pattern{p5}))
 | |
| 
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p4, p5}))
 | |
| 	require.Equal(t, true, v.Match([]Pattern{p5, p4}))
 | |
| }
 | |
| 
 | |
| func TestDescription(t *testing.T) {
 | |
| 	d := NewDesc("name", "blabla", []string{"label"})
 | |
| 
 | |
| 	require.Equal(t, "name", d.Name())
 | |
| 	require.Equal(t, "blabla", d.Description())
 | |
| 	require.ElementsMatch(t, []string{"label"}, d.Labels())
 | |
| 	require.Equal(t, "name: blabla (label)", d.String())
 | |
| }
 | |
| 
 | |
| func TestMetrics(t *testing.T) {
 | |
| 	m := NewMetrics()
 | |
| 
 | |
| 	require.Equal(t, "", m.String())
 | |
| 	require.Equal(t, 0, len(m.All()))
 | |
| 
 | |
| 	d := NewDesc("group", "", []string{"label1", "label2"})
 | |
| 	v1 := NewValue(d, 42, "foobar", "foobaz")
 | |
| 	require.NotNil(t, v1)
 | |
| 
 | |
| 	m.Add(v1)
 | |
| 
 | |
| 	require.Equal(t, v1.String(), m.String())
 | |
| 	require.Equal(t, 1, len(m.All()))
 | |
| 
 | |
| 	l := m.Labels("group", "label2")
 | |
| 
 | |
| 	require.ElementsMatch(t, []string{"foobaz"}, l)
 | |
| 
 | |
| 	v2 := NewValue(d, 77, "barfoo", "bazfoo")
 | |
| 
 | |
| 	m.Add(v2)
 | |
| 
 | |
| 	require.Equal(t, v1.String()+v2.String(), m.String())
 | |
| 	require.Equal(t, 2, len(m.All()))
 | |
| 
 | |
| 	l = m.Labels("group", "label2")
 | |
| 
 | |
| 	require.ElementsMatch(t, []string{"foobaz", "bazfoo"}, l)
 | |
| 
 | |
| 	v := m.Value("bla", "label1", "foo*")
 | |
| 
 | |
| 	require.Equal(t, nullValue, v)
 | |
| 
 | |
| 	v = m.Value("group")
 | |
| 
 | |
| 	require.NotEqual(t, nullValue, v)
 | |
| 
 | |
| 	v = m.Value("group", "label1", "foo*")
 | |
| 
 | |
| 	require.NotEqual(t, nullValue, v)
 | |
| 
 | |
| 	v = m.Value("group", "label2", "baz")
 | |
| 
 | |
| 	require.NotEqual(t, nullValue, v)
 | |
| 
 | |
| 	vs := m.Values("group")
 | |
| 
 | |
| 	require.Equal(t, 2, len(vs))
 | |
| 
 | |
| 	vs = m.Values("group", "label1", "foo*")
 | |
| 
 | |
| 	require.Equal(t, 2, len(vs))
 | |
| 
 | |
| 	vs = m.Values("group", "label2", "*baz*")
 | |
| 
 | |
| 	require.NotEqual(t, 2, len(vs))
 | |
| 
 | |
| 	vs = m.Values("group", "label1")
 | |
| 
 | |
| 	require.Equal(t, 0, len(vs))
 | |
| }
 | 
