Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
225
plugins/inputs/xtremio/xtremio_test.go
Normal file
225
plugins/inputs/xtremio/xtremio_test.go
Normal file
|
@ -0,0 +1,225 @@
|
|||
package xtremio
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
var testdataDir = getTestdataDir()
|
||||
|
||||
func TestInitDefault(t *testing.T) {
|
||||
// This test should succeed with the default initialization.
|
||||
plugin := &XtremIO{
|
||||
Username: "testuser",
|
||||
Password: "testpass",
|
||||
URL: "http://example.com",
|
||||
Log: testutil.Logger{},
|
||||
}
|
||||
|
||||
// Test the initialization succeeds
|
||||
require.NoError(t, plugin.Init())
|
||||
|
||||
// Also test that default values are set correctly
|
||||
require.Equal(t, "testuser", plugin.Username)
|
||||
require.Equal(t, "testpass", plugin.Password)
|
||||
require.Equal(t, "http://example.com", plugin.URL)
|
||||
}
|
||||
|
||||
func TestInitFail(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
plugin *XtremIO
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "all empty",
|
||||
plugin: &XtremIO{},
|
||||
expected: "username cannot be empty",
|
||||
},
|
||||
{
|
||||
name: "no username",
|
||||
plugin: &XtremIO{Password: "testpass", URL: "http://example.com"},
|
||||
expected: "username cannot be empty",
|
||||
},
|
||||
{
|
||||
name: "no password",
|
||||
plugin: &XtremIO{Username: "testuser", URL: "http://example.com"},
|
||||
expected: "password cannot be empty",
|
||||
},
|
||||
{
|
||||
name: "no url",
|
||||
plugin: &XtremIO{Username: "testuser", Password: "testpass"},
|
||||
expected: "url cannot be empty",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.plugin.Log = testutil.Logger{}
|
||||
err := tt.plugin.Init()
|
||||
require.Error(t, err)
|
||||
require.EqualError(t, err, tt.expected)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFixedValue(t *testing.T) {
|
||||
ts := httptest.NewServer(
|
||||
http.HandlerFunc(
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path == "/api/json/v3/commands/login" {
|
||||
cookie := &http.Cookie{Name: "sessid", Value: "cookie:123456789"}
|
||||
http.SetCookie(w, cookie)
|
||||
|
||||
if _, err := fmt.Fprintln(w, "authentication succeeded"); err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
} else if r.URL.Path == "/api/json/v3/types/bbus" {
|
||||
sampleGetBBUsResponse, err := os.ReadFile(filepath.Join(testdataDir, "sample_get_bbu_response.json"))
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = fmt.Fprintln(w, string(sampleGetBBUsResponse)); err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
} else if r.URL.Path == "/api/json/v3/types/bbus/987654321abcdef" {
|
||||
sampleBBUResponseOne, err := os.ReadFile(filepath.Join(testdataDir, "sample_bbu_response.json"))
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err = fmt.Fprintln(w, string(sampleBBUResponseOne)); err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
},
|
||||
),
|
||||
)
|
||||
defer ts.Close()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
plugin *XtremIO
|
||||
expected []telegraf.Metric
|
||||
}{
|
||||
{
|
||||
name: "gather bbus only",
|
||||
plugin: &XtremIO{
|
||||
Username: "testuser",
|
||||
Password: "testpass",
|
||||
URL: ts.URL,
|
||||
Collectors: []string{"bbus"},
|
||||
},
|
||||
expected: []telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"xio",
|
||||
map[string]string{
|
||||
"serial_number": "A123B45678",
|
||||
"guid": "987654321abcdef",
|
||||
"power_feed": "PWR-A",
|
||||
"name": "X1-BBU",
|
||||
"model_name": "Eaton Model Name",
|
||||
},
|
||||
map[string]interface{}{
|
||||
"bbus_power": 244,
|
||||
"bbus_average_daily_temp": 23,
|
||||
"bbus_enabled": true,
|
||||
"bbus_ups_need_battery_replacement": false,
|
||||
"bbus_ups_low_battery_no_input": false,
|
||||
},
|
||||
time.Unix(0, 0),
|
||||
),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var acc testutil.Accumulator
|
||||
tt.plugin.Log = testutil.Logger{}
|
||||
require.NoError(t, tt.plugin.Init())
|
||||
require.NoError(t, tt.plugin.Gather(&acc))
|
||||
require.Empty(t, acc.Errors, "found errors accumulated by acc.AddError()")
|
||||
acc.Wait(len(tt.expected))
|
||||
testutil.RequireMetricsEqual(t, tt.expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthenticationFailed(t *testing.T) {
|
||||
ts := httptest.NewServer(
|
||||
http.HandlerFunc(
|
||||
func(w http.ResponseWriter, _ *http.Request) {
|
||||
if _, err := fmt.Fprintln(w, "bad request"); err != nil {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
},
|
||||
),
|
||||
)
|
||||
defer ts.Close()
|
||||
tests := []struct {
|
||||
name string
|
||||
plugin *XtremIO
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "authentication failed",
|
||||
plugin: &XtremIO{
|
||||
Username: "usertest",
|
||||
Password: "userpass",
|
||||
URL: ts.URL,
|
||||
},
|
||||
expected: "no authentication cookie set",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var acc testutil.Accumulator
|
||||
|
||||
tt.plugin.Log = testutil.Logger{}
|
||||
require.NoError(t, tt.plugin.Init())
|
||||
|
||||
err := tt.plugin.Gather(&acc)
|
||||
require.Error(t, err)
|
||||
require.EqualError(t, err, tt.expected)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func getTestdataDir() string {
|
||||
dir, err := os.Getwd()
|
||||
if err != nil {
|
||||
// if we cannot even establish the test directory, further progress is meaningless
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return filepath.Join(dir, "testdata")
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue