2020-10-22 23:53:08 +08:00
|
|
|
package logzio
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"compress/gzip"
|
|
|
|
|
"encoding/json"
|
2023-04-14 23:14:55 +08:00
|
|
|
"errors"
|
2020-10-22 23:53:08 +08:00
|
|
|
"io"
|
|
|
|
|
"net/http"
|
|
|
|
|
"net/http/httptest"
|
|
|
|
|
"testing"
|
2023-01-26 04:02:29 +08:00
|
|
|
|
2024-02-13 06:26:10 +08:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
|
2023-01-26 04:02:29 +08:00
|
|
|
"github.com/influxdata/telegraf"
|
|
|
|
|
"github.com/influxdata/telegraf/config"
|
|
|
|
|
"github.com/influxdata/telegraf/testutil"
|
2020-10-22 23:53:08 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
testToken = "123456789"
|
|
|
|
|
testURL = "https://logzio.com"
|
|
|
|
|
)
|
|
|
|
|
|
2023-01-26 04:02:29 +08:00
|
|
|
func TestConnectWithoutToken(t *testing.T) {
|
2020-10-22 23:53:08 +08:00
|
|
|
l := &Logzio{
|
|
|
|
|
URL: testURL,
|
|
|
|
|
Log: testutil.Logger{},
|
|
|
|
|
}
|
|
|
|
|
err := l.Connect()
|
2023-01-26 04:02:29 +08:00
|
|
|
require.ErrorContains(t, err, "token is required")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestConnectWithDefaultToken(t *testing.T) {
|
|
|
|
|
l := &Logzio{
|
|
|
|
|
URL: testURL,
|
|
|
|
|
Token: config.NewSecret([]byte("your logz.io token")),
|
|
|
|
|
Log: testutil.Logger{},
|
|
|
|
|
}
|
|
|
|
|
err := l.Connect()
|
|
|
|
|
require.ErrorContains(t, err, "please replace 'token'")
|
2020-10-22 23:53:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestParseMetric(t *testing.T) {
|
|
|
|
|
l := &Logzio{}
|
|
|
|
|
for _, tm := range testutil.MockMetrics() {
|
|
|
|
|
lm := l.parseMetric(tm)
|
|
|
|
|
require.Equal(t, tm.Fields(), lm.Metric[tm.Name()])
|
|
|
|
|
require.Equal(t, logzioType, lm.Type)
|
|
|
|
|
require.Equal(t, tm.Tags(), lm.Dimensions)
|
|
|
|
|
require.Equal(t, tm.Time(), lm.Time)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestBadStatusCode(t *testing.T) {
|
2024-02-13 06:26:10 +08:00
|
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
|
2020-10-22 23:53:08 +08:00
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
}))
|
|
|
|
|
defer ts.Close()
|
|
|
|
|
|
|
|
|
|
l := &Logzio{
|
2023-01-26 04:02:29 +08:00
|
|
|
Token: config.NewSecret([]byte(testToken)),
|
2020-10-22 23:53:08 +08:00
|
|
|
URL: ts.URL,
|
|
|
|
|
Log: testutil.Logger{},
|
|
|
|
|
}
|
2023-01-26 04:02:29 +08:00
|
|
|
require.NoError(t, l.Connect())
|
|
|
|
|
require.Error(t, l.Write(testutil.MockMetrics()))
|
2020-10-22 23:53:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestWrite(t *testing.T) {
|
|
|
|
|
tm := testutil.TestMetric(float64(3.14), "test1")
|
|
|
|
|
var body bytes.Buffer
|
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
gz, err := gzip.NewReader(r.Body)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2023-04-14 23:14:55 +08:00
|
|
|
var maxDecompressionSize int64 = 500 * 1024 * 1024
|
|
|
|
|
n, err := io.CopyN(&body, gz, maxDecompressionSize)
|
|
|
|
|
if errors.Is(err, io.EOF) {
|
|
|
|
|
err = nil
|
|
|
|
|
}
|
2020-10-22 23:53:08 +08:00
|
|
|
require.NoError(t, err)
|
2023-04-14 23:14:55 +08:00
|
|
|
require.NotEqualf(t, n, maxDecompressionSize, "size of decoded data exceeds allowed size %d", maxDecompressionSize)
|
2020-10-22 23:53:08 +08:00
|
|
|
|
|
|
|
|
var lm Metric
|
|
|
|
|
err = json.Unmarshal(body.Bytes(), &lm)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
|
|
require.Equal(t, tm.Fields(), lm.Metric[tm.Name()])
|
|
|
|
|
require.Equal(t, logzioType, lm.Type)
|
|
|
|
|
require.Equal(t, tm.Tags(), lm.Dimensions)
|
|
|
|
|
require.Equal(t, tm.Time(), lm.Time)
|
|
|
|
|
|
|
|
|
|
w.WriteHeader(http.StatusOK)
|
|
|
|
|
}))
|
|
|
|
|
defer ts.Close()
|
|
|
|
|
|
|
|
|
|
l := &Logzio{
|
2023-01-26 04:02:29 +08:00
|
|
|
Token: config.NewSecret([]byte(testToken)),
|
2020-10-22 23:53:08 +08:00
|
|
|
URL: ts.URL,
|
|
|
|
|
Log: testutil.Logger{},
|
|
|
|
|
}
|
2023-01-26 04:02:29 +08:00
|
|
|
require.NoError(t, l.Connect())
|
|
|
|
|
require.NoError(t, l.Write([]telegraf.Metric{tm}))
|
2020-10-22 23:53:08 +08:00
|
|
|
}
|