telegraf/plugins/inputs/lanz/lanz_test.go

138 lines
4.4 KiB
Go

package lanz
import (
"net/url"
"strconv"
"testing"
pb "github.com/aristanetworks/goarista/lanz/proto"
"github.com/golang/protobuf/proto"
"github.com/influxdata/telegraf/testutil"
)
var testProtoBufCongestionRecord1 = &pb.LanzRecord{
CongestionRecord: &pb.CongestionRecord{
Timestamp: proto.Uint64(100000000000000),
IntfName: proto.String("eth1"),
SwitchId: proto.Uint32(1),
PortId: proto.Uint32(1),
QueueSize: proto.Uint32(1),
EntryType: pb.CongestionRecord_EntryType.Enum(1),
TrafficClass: proto.Uint32(1),
TimeOfMaxQLen: proto.Uint64(100000000000000),
TxLatency: proto.Uint32(100),
QDropCount: proto.Uint32(1),
FabricPeerIntfName: proto.String("FabricPeerIntfName1"),
},
}
var testProtoBufCongestionRecord2 = &pb.LanzRecord{
CongestionRecord: &pb.CongestionRecord{
Timestamp: proto.Uint64(200000000000000),
IntfName: proto.String("eth2"),
SwitchId: proto.Uint32(2),
PortId: proto.Uint32(2),
QueueSize: proto.Uint32(2),
EntryType: pb.CongestionRecord_EntryType.Enum(2),
TrafficClass: proto.Uint32(2),
TimeOfMaxQLen: proto.Uint64(200000000000000),
TxLatency: proto.Uint32(200),
QDropCount: proto.Uint32(2),
FabricPeerIntfName: proto.String("FabricPeerIntfName2"),
},
}
var testProtoBufGlobalBufferUsageRecord = &pb.LanzRecord{
GlobalBufferUsageRecord: &pb.GlobalBufferUsageRecord{
EntryType: pb.GlobalBufferUsageRecord_EntryType.Enum(1),
Timestamp: proto.Uint64(100000000000000),
BufferSize: proto.Uint32(1),
Duration: proto.Uint32(10),
},
}
func TestLanzGeneratesMetrics(t *testing.T) {
var acc testutil.Accumulator
l := NewLanz()
l.Servers = append(l.Servers, "tcp://switch01.int.example.com:50001")
l.Servers = append(l.Servers, "tcp://switch02.int.example.com:50001")
deviceUrl1, err := url.Parse(l.Servers[0])
if err != nil {
t.Fail()
}
deviceUrl2, err := url.Parse(l.Servers[1])
if err != nil {
t.Fail()
}
msgToAccumulator(&acc, testProtoBufCongestionRecord1, deviceUrl1)
acc.Wait(1)
vals1 := map[string]interface{}{
"timestamp": int64(100000000000000),
"queue_size": int64(1),
"time_of_max_qlen": int64(100000000000000),
"tx_latency": int64(100),
"q_drop_count": int64(1),
}
tags1 := map[string]string{
"intf_name": "eth1",
"switch_id": strconv.FormatInt(int64(1), 10),
"port_id": strconv.FormatInt(int64(1), 10),
"entry_type": strconv.FormatInt(int64(1), 10),
"traffic_class": strconv.FormatInt(int64(1), 10),
"fabric_peer_intf_name": "FabricPeerIntfName1",
"source": "switch01.int.example.com",
"port": "50001",
}
acc.AssertContainsFields(t, "lanz_congestion_record", vals1)
acc.AssertContainsTaggedFields(t, "lanz_congestion_record", vals1, tags1)
acc.ClearMetrics()
msgToAccumulator(&acc, testProtoBufCongestionRecord2, deviceUrl2)
acc.Wait(1)
vals2 := map[string]interface{}{
"timestamp": int64(200000000000000),
"queue_size": int64(2),
"time_of_max_qlen": int64(200000000000000),
"tx_latency": int64(200),
"q_drop_count": int64(2),
}
tags2 := map[string]string{
"intf_name": "eth2",
"switch_id": strconv.FormatInt(int64(2), 10),
"port_id": strconv.FormatInt(int64(2), 10),
"entry_type": strconv.FormatInt(int64(2), 10),
"traffic_class": strconv.FormatInt(int64(2), 10),
"fabric_peer_intf_name": "FabricPeerIntfName2",
"source": "switch02.int.example.com",
"port": "50001",
}
acc.AssertContainsFields(t, "lanz_congestion_record", vals2)
acc.AssertContainsTaggedFields(t, "lanz_congestion_record", vals2, tags2)
acc.ClearMetrics()
msgToAccumulator(&acc, testProtoBufGlobalBufferUsageRecord, deviceUrl1)
acc.Wait(1)
gburVals1 := map[string]interface{}{
"timestamp": int64(100000000000000),
"buffer_size": int64(1),
"duration": int64(10),
}
gburTags1 := map[string]string{
"entry_type": strconv.FormatInt(int64(1), 10),
"source": "switch01.int.example.com",
"port": "50001",
}
acc.AssertContainsFields(t, "lanz_global_buffer_usage_record", gburVals1)
acc.AssertContainsTaggedFields(t, "lanz_global_buffer_usage_record", gburVals1, gburTags1)
}