254 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Go
		
	
	
	
package value
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
func TestParseValidValues(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	metrics, err := parser.Parse([]byte("55"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": int64(55),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "float",
 | 
						|
	}
 | 
						|
	metrics, err = parser.Parse([]byte("64"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": float64(64),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "string",
 | 
						|
	}
 | 
						|
	metrics, err = parser.Parse([]byte("foobar"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": "foobar",
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "boolean",
 | 
						|
	}
 | 
						|
	metrics, err = parser.Parse([]byte("true"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": true,
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
}
 | 
						|
 | 
						|
func TestParseMultipleValues(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	metrics, err := parser.Parse([]byte(`55
 | 
						|
45
 | 
						|
223
 | 
						|
12
 | 
						|
999
 | 
						|
`))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": int64(999),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
}
 | 
						|
 | 
						|
func TestParseLineValidValues(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	metric, err := parser.ParseLine("55")
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Equal(t, "value_test", metric.Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": int64(55),
 | 
						|
	}, metric.Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metric.Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "float",
 | 
						|
	}
 | 
						|
	metric, err = parser.ParseLine("64")
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Equal(t, "value_test", metric.Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": float64(64),
 | 
						|
	}, metric.Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metric.Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "string",
 | 
						|
	}
 | 
						|
	metric, err = parser.ParseLine("foobar")
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Equal(t, "value_test", metric.Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": "foobar",
 | 
						|
	}, metric.Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metric.Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "boolean",
 | 
						|
	}
 | 
						|
	metric, err = parser.ParseLine("true")
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Equal(t, "value_test", metric.Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": true,
 | 
						|
	}, metric.Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metric.Tags())
 | 
						|
}
 | 
						|
 | 
						|
func TestParseInvalidValues(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	metrics, err := parser.Parse([]byte("55.0"))
 | 
						|
	assert.Error(t, err)
 | 
						|
	assert.Len(t, metrics, 0)
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "float",
 | 
						|
	}
 | 
						|
	metrics, err = parser.Parse([]byte("foobar"))
 | 
						|
	assert.Error(t, err)
 | 
						|
	assert.Len(t, metrics, 0)
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "boolean",
 | 
						|
	}
 | 
						|
	metrics, err = parser.Parse([]byte("213"))
 | 
						|
	assert.Error(t, err)
 | 
						|
	assert.Len(t, metrics, 0)
 | 
						|
}
 | 
						|
 | 
						|
func TestParseLineInvalidValues(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	_, err := parser.ParseLine("55.0")
 | 
						|
	assert.Error(t, err)
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "float",
 | 
						|
	}
 | 
						|
	_, err = parser.ParseLine("foobar")
 | 
						|
	assert.Error(t, err)
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "boolean",
 | 
						|
	}
 | 
						|
	_, err = parser.ParseLine("213")
 | 
						|
	assert.Error(t, err)
 | 
						|
}
 | 
						|
 | 
						|
func TestParseValidValuesDefaultTags(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	parser.SetDefaultTags(map[string]string{"test": "tag"})
 | 
						|
	metrics, err := parser.Parse([]byte("55"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": int64(55),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{"test": "tag"}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "float",
 | 
						|
	}
 | 
						|
	parser.SetDefaultTags(map[string]string{"test": "tag"})
 | 
						|
	metrics, err = parser.Parse([]byte("64"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": float64(64),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{"test": "tag"}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "string",
 | 
						|
	}
 | 
						|
	parser.SetDefaultTags(map[string]string{"test": "tag"})
 | 
						|
	metrics, err = parser.Parse([]byte("foobar"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": "foobar",
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{"test": "tag"}, metrics[0].Tags())
 | 
						|
 | 
						|
	parser = ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "boolean",
 | 
						|
	}
 | 
						|
	parser.SetDefaultTags(map[string]string{"test": "tag"})
 | 
						|
	metrics, err = parser.Parse([]byte("true"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": true,
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{"test": "tag"}, metrics[0].Tags())
 | 
						|
}
 | 
						|
 | 
						|
func TestParseValuesWithNullCharacter(t *testing.T) {
 | 
						|
	parser := ValueParser{
 | 
						|
		MetricName: "value_test",
 | 
						|
		DataType:   "integer",
 | 
						|
	}
 | 
						|
	metrics, err := parser.Parse([]byte("55\x00"))
 | 
						|
	assert.NoError(t, err)
 | 
						|
	assert.Len(t, metrics, 1)
 | 
						|
	assert.Equal(t, "value_test", metrics[0].Name())
 | 
						|
	assert.Equal(t, map[string]interface{}{
 | 
						|
		"value": int64(55),
 | 
						|
	}, metrics[0].Fields())
 | 
						|
	assert.Equal(t, map[string]string{}, metrics[0].Tags())
 | 
						|
}
 |