package warp10 import ( "math" "testing" "github.com/stretchr/testify/require" "github.com/influxdata/telegraf/config" "github.com/influxdata/telegraf/testutil" ) type ErrorTest struct { Message string Expected string } func TestWriteWarp10(t *testing.T) { w := Warp10{ Prefix: "unit.test", WarpURL: "http://localhost:8090", Token: config.NewSecret([]byte("WRITE")), } payload := w.GenWarp10Payload(testutil.MockMetrics()) require.Exactly(t, "1257894000000000// unit.testtest1.value{source=telegraf,tag1=value1} 1.000000\n", payload) } func TestWriteWarp10ValueNaN(t *testing.T) { w := Warp10{ Prefix: "unit.test", WarpURL: "http://localhost:8090", Token: config.NewSecret([]byte("WRITE")), } payload := w.GenWarp10Payload(testutil.MockMetricsWithValue(math.NaN())) require.Exactly(t, "1257894000000000// unit.testtest1.value{source=telegraf,tag1=value1} NaN\n", payload) } func TestWriteWarp10ValueInfinity(t *testing.T) { w := Warp10{ Prefix: "unit.test", WarpURL: "http://localhost:8090", Token: config.NewSecret([]byte("WRITE")), } payload := w.GenWarp10Payload(testutil.MockMetricsWithValue(math.Inf(1))) require.Exactly(t, "1257894000000000// unit.testtest1.value{source=telegraf,tag1=value1} Infinity\n", payload) } func TestWriteWarp10ValueMinusInfinity(t *testing.T) { w := Warp10{ Prefix: "unit.test", WarpURL: "http://localhost:8090", Token: config.NewSecret([]byte("WRITE")), } payload := w.GenWarp10Payload(testutil.MockMetricsWithValue(math.Inf(-1))) require.Exactly(t, "1257894000000000// unit.testtest1.value{source=telegraf,tag1=value1} -Infinity\n", payload) } func TestWriteWarp10EncodedTags(t *testing.T) { w := Warp10{ Prefix: "unit.test", WarpURL: "http://localhost:8090", Token: config.NewSecret([]byte("WRITE")), } metrics := testutil.MockMetrics() for _, metric := range metrics { metric.AddTag("encoded{tag", "value1,value2") } payload := w.GenWarp10Payload(metrics) require.Exactly(t, "1257894000000000// unit.testtest1.value{encoded%7Btag=value1%2Cvalue2,source=telegraf,tag1=value1} 1.000000\n", payload) } func TestHandleWarp10Error(t *testing.T) { tests := [...]*ErrorTest{ { Message: ` Error 500 io.warp10.script.WarpScriptException: Invalid token.

HTTP ERROR 500

Problem accessing /api/v0/update. Reason:

    io.warp10.script.WarpScriptException: Invalid token.

`, Expected: "Invalid token", }, { Message: ` Error 500 io.warp10.script.WarpScriptException: Token Expired.

HTTP ERROR 500

Problem accessing /api/v0/update. Reason:

    io.warp10.script.WarpScriptException: Token Expired.

`, Expected: "Token Expired", }, { Message: ` Error 500 io.warp10.script.WarpScriptException: Token revoked.

HTTP ERROR 500

Problem accessing /api/v0/update. Reason:

    io.warp10.script.WarpScriptException: Token revoked.

`, Expected: "Token revoked", }, { Message: ` Error 500 io.warp10.script.WarpScriptException: Write token missing.

HTTP ERROR 500

Problem accessing /api/v0/update. Reason:

    io.warp10.script.WarpScriptException: Write token missing.

`, Expected: "Write token missing", }, { Message: `Error 503: server unavailable`, Expected: "Error 503: server unavailable", }, } for _, handledError := range tests { payload := HandleError(handledError.Message, 511) require.Exactly(t, handledError.Expected, payload) } }