131 lines
4.1 KiB
Go
131 lines
4.1 KiB
Go
//go:build linux
|
|
|
|
package dpdk
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/influxdata/telegraf"
|
|
"github.com/influxdata/telegraf/testutil"
|
|
)
|
|
|
|
func Test_LinkStatusCommand(t *testing.T) {
|
|
t.Run("when 'status' field is DOWN then return 'link_status'=0", func(t *testing.T) {
|
|
mockConn, dpdk, mockAcc := prepareEnvironment()
|
|
defer mockConn.AssertExpectations(t)
|
|
response := fmt.Sprintf(`{%q:{%q: "DOWN"}}`, ethdevLinkStatusCommand, linkStatusStringFieldName)
|
|
simulateResponse(mockConn, response, nil)
|
|
dpdkConn := dpdk.connectors[0]
|
|
dpdkConn.processCommand(mockAcc, testutil.Logger{}, ethdevLinkStatusCommand+",1", nil)
|
|
|
|
expected := []telegraf.Metric{
|
|
testutil.MustMetric(
|
|
"dpdk",
|
|
map[string]string{
|
|
"command": ethdevLinkStatusCommand,
|
|
"params": "1",
|
|
},
|
|
map[string]interface{}{
|
|
linkStatusStringFieldName: "DOWN",
|
|
linkStatusIntegerFieldName: int64(0),
|
|
},
|
|
time.Unix(0, 0),
|
|
),
|
|
}
|
|
|
|
actual := mockAcc.GetTelegrafMetrics()
|
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
|
})
|
|
|
|
t.Run("when 'status' field is UP then return 'link_status'=1", func(t *testing.T) {
|
|
mockConn, dpdk, mockAcc := prepareEnvironment()
|
|
defer mockConn.AssertExpectations(t)
|
|
response := fmt.Sprintf(`{%q:{%q: "UP"}}`, ethdevLinkStatusCommand, linkStatusStringFieldName)
|
|
simulateResponse(mockConn, response, nil)
|
|
dpdkConn := dpdk.connectors[0]
|
|
dpdkConn.processCommand(mockAcc, testutil.Logger{}, ethdevLinkStatusCommand+",1", nil)
|
|
|
|
expected := []telegraf.Metric{
|
|
testutil.MustMetric(
|
|
"dpdk",
|
|
map[string]string{
|
|
"command": ethdevLinkStatusCommand,
|
|
"params": "1",
|
|
},
|
|
map[string]interface{}{
|
|
linkStatusStringFieldName: "UP",
|
|
linkStatusIntegerFieldName: int64(1),
|
|
},
|
|
time.Unix(0, 0),
|
|
),
|
|
}
|
|
|
|
actual := mockAcc.GetTelegrafMetrics()
|
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
|
})
|
|
|
|
t.Run("when link status output doesn't have any fields then don't return 'link_status' field", func(t *testing.T) {
|
|
mockConn, dpdk, mockAcc := prepareEnvironment()
|
|
defer mockConn.AssertExpectations(t)
|
|
response := fmt.Sprintf(`{%q:{}}`, ethdevLinkStatusCommand)
|
|
simulateResponse(mockConn, response, nil)
|
|
dpdkConn := dpdk.connectors[0]
|
|
dpdkConn.processCommand(mockAcc, testutil.Logger{}, ethdevLinkStatusCommand+",1", nil)
|
|
|
|
actual := mockAcc.GetTelegrafMetrics()
|
|
testutil.RequireMetricsEqual(t, nil, actual, testutil.IgnoreTime())
|
|
})
|
|
|
|
t.Run("when link status output doesn't have status field then don't return 'link_status' field", func(t *testing.T) {
|
|
mockConn, dpdk, mockAcc := prepareEnvironment()
|
|
defer mockConn.AssertExpectations(t)
|
|
response := fmt.Sprintf(`{%q:{"tag1": 1}}`, ethdevLinkStatusCommand)
|
|
simulateResponse(mockConn, response, nil)
|
|
dpdkConn := dpdk.connectors[0]
|
|
dpdkConn.processCommand(mockAcc, testutil.Logger{}, ethdevLinkStatusCommand+",1", nil)
|
|
expected := []telegraf.Metric{
|
|
testutil.MustMetric(
|
|
"dpdk",
|
|
map[string]string{
|
|
"command": ethdevLinkStatusCommand,
|
|
"params": "1",
|
|
},
|
|
map[string]interface{}{
|
|
"tag1": float64(1),
|
|
},
|
|
time.Unix(0, 0),
|
|
),
|
|
}
|
|
|
|
actual := mockAcc.GetTelegrafMetrics()
|
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
|
})
|
|
|
|
t.Run("when link status output is invalid then don't return 'link_status' field", func(t *testing.T) {
|
|
mockConn, dpdk, mockAcc := prepareEnvironment()
|
|
defer mockConn.AssertExpectations(t)
|
|
response := fmt.Sprintf(`{%q:{%q: "BOB"}}`, ethdevLinkStatusCommand, linkStatusStringFieldName)
|
|
simulateResponse(mockConn, response, nil)
|
|
dpdkConn := dpdk.connectors[0]
|
|
dpdkConn.processCommand(mockAcc, testutil.Logger{}, ethdevLinkStatusCommand+",1", nil)
|
|
|
|
expected := []telegraf.Metric{
|
|
testutil.MustMetric(
|
|
"dpdk",
|
|
map[string]string{
|
|
"command": ethdevLinkStatusCommand,
|
|
"params": "1",
|
|
},
|
|
map[string]interface{}{
|
|
linkStatusStringFieldName: "BOB",
|
|
},
|
|
time.Unix(0, 0),
|
|
),
|
|
}
|
|
|
|
actual := mockAcc.GetTelegrafMetrics()
|
|
testutil.RequireMetricsEqual(t, expected, actual, testutil.IgnoreTime())
|
|
})
|
|
}
|