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
252
internal/snmp/field_test.go
Normal file
252
internal/snmp/field_test.go
Normal file
|
@ -0,0 +1,252 @@
|
|||
package snmp
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gosnmp/gosnmp"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestConvertDefault(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
ent gosnmp.SnmpPDU
|
||||
expected interface{}
|
||||
errmsg string
|
||||
}{
|
||||
{
|
||||
name: "integer",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.Integer,
|
||||
Value: int(2),
|
||||
},
|
||||
expected: 2,
|
||||
},
|
||||
{
|
||||
name: "octet string with valid bytes",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64},
|
||||
},
|
||||
expected: "Hello world",
|
||||
},
|
||||
{
|
||||
name: "octet string with invalid bytes",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff, 0xfd, 0x38, 0x54, 0xc1},
|
||||
},
|
||||
expected: "84c807fffd3854c1",
|
||||
},
|
||||
}
|
||||
|
||||
f := Field{}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
actual, err := f.Convert(tt.ent)
|
||||
|
||||
if tt.errmsg != "" {
|
||||
require.ErrorContains(t, err, tt.errmsg)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
require.Equal(t, tt.expected, actual)
|
||||
})
|
||||
}
|
||||
|
||||
t.Run("invalid", func(t *testing.T) {
|
||||
f.Conversion = "invalid"
|
||||
actual, err := f.Convert(gosnmp.SnmpPDU{})
|
||||
|
||||
require.Nil(t, actual)
|
||||
require.ErrorContains(t, err, "invalid conversion type")
|
||||
})
|
||||
}
|
||||
|
||||
func TestConvertHex(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
ent gosnmp.SnmpPDU
|
||||
expected interface{}
|
||||
errmsg string
|
||||
}{
|
||||
{
|
||||
name: "octet string with valid bytes",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64},
|
||||
},
|
||||
expected: "48656c6c6f20776f726c64",
|
||||
},
|
||||
{
|
||||
name: "octet string with invalid bytes",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff, 0xfd, 0x38, 0x54, 0xc1},
|
||||
},
|
||||
expected: "84c807fffd3854c1",
|
||||
},
|
||||
{
|
||||
name: "IPv4",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.IPAddress,
|
||||
Value: "192.0.2.1",
|
||||
},
|
||||
expected: "c0000201",
|
||||
},
|
||||
{
|
||||
name: "IPv6",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.IPAddress,
|
||||
Value: "2001:db8::1",
|
||||
},
|
||||
expected: "20010db8000000000000000000000001",
|
||||
},
|
||||
{
|
||||
name: "oid",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.ObjectIdentifier,
|
||||
Value: ".1.2.3",
|
||||
},
|
||||
errmsg: "unsupported Asn1BER (0x6) for hex conversion",
|
||||
},
|
||||
{
|
||||
name: "integer",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.Integer,
|
||||
Value: int(2),
|
||||
},
|
||||
errmsg: "unsupported type (int) for hex conversion",
|
||||
},
|
||||
}
|
||||
|
||||
f := Field{Conversion: "hex"}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
actual, err := f.Convert(tt.ent)
|
||||
|
||||
if tt.errmsg != "" {
|
||||
require.ErrorContains(t, err, tt.errmsg)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
require.Equal(t, tt.expected, actual)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestConvertHextoint(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
conversion string
|
||||
ent gosnmp.SnmpPDU
|
||||
expected interface{}
|
||||
errmsg string
|
||||
}{
|
||||
{
|
||||
name: "empty",
|
||||
conversion: "hextoint:BigEndian:uint64",
|
||||
ent: gosnmp.SnmpPDU{},
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
name: "big endian uint64",
|
||||
conversion: "hextoint:BigEndian:uint64",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff, 0xfd, 0x38, 0x54, 0xc1},
|
||||
},
|
||||
expected: uint64(0x84c807fffd3854c1),
|
||||
},
|
||||
{
|
||||
name: "big endian uint32",
|
||||
conversion: "hextoint:BigEndian:uint32",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff},
|
||||
},
|
||||
expected: uint32(0x84c807ff),
|
||||
},
|
||||
{
|
||||
name: "big endian uint16",
|
||||
conversion: "hextoint:BigEndian:uint16",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8},
|
||||
},
|
||||
expected: uint16(0x84c8),
|
||||
},
|
||||
{
|
||||
name: "big endian invalid",
|
||||
conversion: "hextoint:BigEndian:invalid",
|
||||
ent: gosnmp.SnmpPDU{Type: gosnmp.OctetString, Value: make([]uint8, 0)},
|
||||
errmsg: "invalid bit value",
|
||||
},
|
||||
{
|
||||
name: "little endian uint64",
|
||||
conversion: "hextoint:LittleEndian:uint64",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff, 0xfd, 0x38, 0x54, 0xc1},
|
||||
},
|
||||
expected: uint64(0xc15438fdff07c884),
|
||||
},
|
||||
{
|
||||
name: "little endian uint32",
|
||||
conversion: "hextoint:LittleEndian:uint32",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8, 0x7, 0xff},
|
||||
},
|
||||
expected: uint32(0xff07c884),
|
||||
},
|
||||
{
|
||||
name: "little endian uint16",
|
||||
conversion: "hextoint:LittleEndian:uint16",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84, 0xc8},
|
||||
},
|
||||
expected: uint16(0xc884),
|
||||
},
|
||||
{
|
||||
name: "little endian single byte",
|
||||
conversion: "hextoint:LittleEndian:uint16",
|
||||
ent: gosnmp.SnmpPDU{
|
||||
Type: gosnmp.OctetString,
|
||||
Value: []byte{0x84},
|
||||
},
|
||||
expected: uint16(0x84),
|
||||
},
|
||||
{
|
||||
name: "little endian invalid",
|
||||
conversion: "hextoint:LittleEndian:invalid",
|
||||
ent: gosnmp.SnmpPDU{Type: gosnmp.OctetString, Value: make([]byte, 0)},
|
||||
errmsg: "invalid bit value",
|
||||
},
|
||||
{
|
||||
name: "invalid",
|
||||
conversion: "hextoint:invalid:uint64",
|
||||
ent: gosnmp.SnmpPDU{Type: gosnmp.OctetString, Value: make([]byte, 0)},
|
||||
errmsg: "invalid Endian value",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
f := Field{Conversion: tt.conversion}
|
||||
|
||||
actual, err := f.Convert(tt.ent)
|
||||
|
||||
if tt.errmsg != "" {
|
||||
require.ErrorContains(t, err, tt.errmsg)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
require.Equal(t, tt.expected, actual)
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue