Path: blob/main/component/prometheus/exporter/snmp/snmp_test.go
4096 views
package snmp12import (3"testing"4"time"56"github.com/grafana/agent/component"7"github.com/grafana/agent/component/discovery"8"github.com/grafana/agent/pkg/river"910"github.com/prometheus/common/model"11snmp_config "github.com/prometheus/snmp_exporter/config"12"github.com/stretchr/testify/require"13)1415func TestUnmarshalRiver(t *testing.T) {16riverCfg := `17config_file = "modules.yml"18target "network_switch_1" {19address = "192.168.1.2"20module = "if_mib"21walk_params = "public"22}23target "network_router_2" {24address = "192.168.1.3"25module = "mikrotik"26walk_params = "private"27}28walk_param "private" {29version = "2"30auth {31community = "secret"32}33}34walk_param "public" {35version = "2"36auth {37community = "public"38}39}40`41var args Arguments42err := river.Unmarshal([]byte(riverCfg), &args)43require.NoError(t, err)44require.Equal(t, "modules.yml", args.ConfigFile)45require.Equal(t, 2, len(args.Targets))4647require.Contains(t, "network_switch_1", args.Targets[0].Name)48require.Contains(t, "192.168.1.2", args.Targets[0].Target)49require.Contains(t, "if_mib", args.Targets[0].Module)50require.Contains(t, "public", args.Targets[0].WalkParams)5152require.Contains(t, "network_router_2", args.Targets[1].Name)53require.Contains(t, "192.168.1.3", args.Targets[1].Target)54require.Contains(t, "mikrotik", args.Targets[1].Module)55require.Contains(t, "private", args.Targets[1].WalkParams)5657require.Equal(t, 2, len(args.WalkParams))5859require.Contains(t, "private", args.WalkParams[0].Name)60require.Contains(t, "secret", args.WalkParams[0].Auth.Community)6162require.Contains(t, "public", args.WalkParams[1].Name)63require.Contains(t, "public", args.WalkParams[1].Auth.Community)64}6566func TestConvertConfig(t *testing.T) {67args := Arguments{68ConfigFile: "modules.yml",69Targets: TargetBlock{{Name: "network_switch_1", Target: "192.168.1.2", Module: "if_mib"}},70WalkParams: WalkParams{{Name: "public", Version: 2, Auth: Auth{Community: "public"}}},71}7273res := args.Convert()74require.Equal(t, "modules.yml", res.SnmpConfigFile)75require.Equal(t, 1, len(res.SnmpTargets))76require.Equal(t, "network_switch_1", res.SnmpTargets[0].Name)77}7879func TestConvertTargets(t *testing.T) {80targets := TargetBlock{{81Name: "network_switch_1",82Target: "192.168.1.2",83Module: "if_mib",84}}8586res := targets.Convert()87require.Equal(t, 1, len(res))88require.Equal(t, "network_switch_1", res[0].Name)89require.Equal(t, "192.168.1.2", res[0].Target)90require.Equal(t, "if_mib", res[0].Module)91}9293func TestConvertWalkParams(t *testing.T) {94walkParams := WalkParams{{95Name: "public",96Version: 2,97MaxRepetitions: uint32(10),98Retries: 3,99Timeout: time.Duration(5),100UseUnconnectedUDPSocket: true,101}}102103res := walkParams.Convert()104require.Equal(t, 1, len(res))105require.Equal(t, 2, res["public"].Version)106require.Equal(t, uint32(10), res["public"].MaxRepetitions)107require.Equal(t, 3, res["public"].Retries)108require.Equal(t, time.Duration(5), res["public"].Timeout)109require.Equal(t, true, res["public"].UseUnconnectedUDPSocket)110}111112func TestConvertAuth(t *testing.T) {113auth := Auth{114Community: "public",115SecurityLevel: "authPriv",116Username: "user",117AuthProtocol: "MD5",118PrivProtocol: "DES",119Password: "password",120PrivPassword: "password",121ContextName: "context",122}123res := auth.Convert()124require.Equal(t, snmp_config.Secret("public"), res.Community)125require.Equal(t, "authPriv", res.SecurityLevel)126require.Equal(t, "user", res.Username)127require.Equal(t, "MD5", res.AuthProtocol)128require.Equal(t, "DES", res.PrivProtocol)129require.Equal(t, snmp_config.Secret("password"), res.Password)130require.Equal(t, snmp_config.Secret("password"), res.PrivPassword)131require.Equal(t, "context", res.ContextName)132}133134func TestBuildSNMPTargets(t *testing.T) {135baseArgs := Arguments{136ConfigFile: "modules.yml",137Targets: TargetBlock{{Name: "network_switch_1", Target: "192.168.1.2", Module: "if_mib", WalkParams: "public"}},138WalkParams: WalkParams{{Name: "public", Version: 2, Auth: Auth{Community: "public"}}},139}140baseTarget := discovery.Target{141model.SchemeLabel: "http",142model.MetricsPathLabel: "component/prometheus.exporter.snmp.default/metrics",143"instance": "prometheus.exporter.snmp.default",144"job": "integrations/snmp",145"__meta_agent_integration_name": "snmp",146"__meta_agent_integration_instance": "prometheus.exporter.snmp.default",147}148args := component.Arguments(baseArgs)149targets := buildSNMPTargets(baseTarget, args)150require.Equal(t, 1, len(targets))151require.Equal(t, "integrations/snmp/network_switch_1", targets[0]["job"])152require.Equal(t, "192.168.1.2", targets[0]["__param_target"])153require.Equal(t, "if_mib", targets[0]["__param_module"])154require.Equal(t, "public", targets[0]["__param_walk_params"])155}156157158