func TestWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } o := &OpenTSDB{ Host: testutil.GetLocalHost(), Port: 4242, Prefix: "prefix.test.", } // Verify that we can connect to the OpenTSDB instance err := o.Connect() require.NoError(t, err) // Verify that we can successfully write data to OpenTSDB err = o.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) // Verify postive and negative test cases of writing data bp := testutil.MockBatchPoints() bp.AddPoint(testutil.TestPoint(float64(1.0), "justametric.float")) bp.AddPoint(testutil.TestPoint(int64(123456789), "justametric.int")) bp.AddPoint(testutil.TestPoint(uint64(123456789012345), "justametric.uint")) bp.AddPoint(testutil.TestPoint("Lorem Ipsum", "justametric.string")) bp.AddPoint(testutil.TestPoint(float64(42.0), "justametric.anotherfloat")) err = o.Write(bp.Points()) require.NoError(t, err) }
// Test that each tag becomes one dimension func TestBuildDimensions(t *testing.T) { const MaxDimensions = 10 assert := assert.New(t) testPoint := testutil.TestPoint(1) dimensions := BuildDimensions(testPoint.Tags()) tagKeys := make([]string, len(testPoint.Tags())) i := 0 for k, _ := range testPoint.Tags() { tagKeys[i] = k i += 1 } sort.Strings(tagKeys) if len(testPoint.Tags()) >= MaxDimensions { assert.Equal(MaxDimensions, len(dimensions), "Number of dimensions should be less than MaxDimensions") } else { assert.Equal(len(testPoint.Tags()), len(dimensions), "Number of dimensions should be equal to number of tags") } for i, key := range tagKeys { if i >= 10 { break } assert.Equal(key, *dimensions[i].Name, "Key should be equal") assert.Equal(testPoint.Tags()[key], *dimensions[i].Value, "Value should be equal") } }
// Test that points with valid values have a MetricDatum created where as non valid do not. // Skips "time.Time" type as something is converting the value to string. func TestBuildMetricDatums(t *testing.T) { assert := assert.New(t) validPoints := []*client.Point{ testutil.TestPoint(1), testutil.TestPoint(int32(1)), testutil.TestPoint(int64(1)), testutil.TestPoint(float64(1)), testutil.TestPoint(true), } for _, point := range validPoints { datums := BuildMetricDatum(point) assert.Equal(1, len(datums), "Valid type should create a Datum") } nonValidPoint := testutil.TestPoint("Foo") assert.Equal(0, len(BuildMetricDatum(nonValidPoint)), "Invalid type should not create a Datum") }
func TestBuildGauge(t *testing.T) { var gaugeTests = []struct { ptIn *client.Point outGauge *Gauge err error }{ { testutil.TestPoint(0.0, "test1"), &Gauge{ Name: "test1", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 0.0, }, nil, }, { testutil.TestPoint(1.0, "test2"), &Gauge{ Name: "test2", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 1.0, }, nil, }, { testutil.TestPoint(10, "test3"), &Gauge{ Name: "test3", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 10.0, }, nil, }, { testutil.TestPoint(int32(112345), "test4"), &Gauge{ Name: "test4", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 112345.0, }, nil, }, { testutil.TestPoint(int64(112345), "test5"), &Gauge{ Name: "test5", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 112345.0, }, nil, }, { testutil.TestPoint(float32(11234.5), "test6"), &Gauge{ Name: "test6", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 11234.5, }, nil, }, { testutil.TestPoint("11234.5", "test7"), &Gauge{ Name: "test7", MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(), Value: 11234.5, }, fmt.Errorf("unable to extract value from Fields, undeterminable type"), }, } l := NewLibrato(fakeUrl) for _, gt := range gaugeTests { gauges, err := l.buildGauges(gt.ptIn) if err != nil && gt.err == nil { t.Errorf("%s: unexpected error, %+v\n", gt.ptIn.Name(), err) } if gt.err != nil && err == nil { t.Errorf("%s: expected an error (%s) but none returned", gt.ptIn.Name(), gt.err.Error()) } if len(gauges) == 0 { continue } if gt.err == nil && !reflect.DeepEqual(gauges[0], gt.outGauge) { t.Errorf("%s: \nexpected %+v\ngot %+v\n", gt.ptIn.Name(), gt.outGauge, gauges[0]) } } }
func TestBuildPoint(t *testing.T) { var tagtests = []struct { ptIn *client.Point outPt Point err error }{ { testutil.TestPoint(float64(0.0), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 0.0, }, nil, }, { testutil.TestPoint(float64(1.0), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 1.0, }, nil, }, { testutil.TestPoint(int(10), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 10.0, }, nil, }, { testutil.TestPoint(int32(112345), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 112345.0, }, nil, }, { testutil.TestPoint(int64(112345), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 112345.0, }, nil, }, { testutil.TestPoint(float32(11234.5), "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 11234.5, }, nil, }, { testutil.TestPoint("11234.5", "testpt"), Point{ float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()), 11234.5, }, fmt.Errorf("unable to extract value from Fields, undeterminable type"), }, } for _, tt := range tagtests { pt, err := buildPoints(tt.ptIn) if err != nil && tt.err == nil { t.Errorf("%s: unexpected error, %+v\n", tt.ptIn.Name(), err) } if tt.err != nil && err == nil { t.Errorf("%s: expected an error (%s) but none returned", tt.ptIn.Name(), tt.err.Error()) } if !reflect.DeepEqual(pt["value"], tt.outPt) && tt.err == nil { t.Errorf("%s: \nexpected %+v\ngot %+v\n", tt.ptIn.Name(), tt.outPt, pt["value"]) } } }