diff --git a/poller/internal/snmp/collector_test.go b/poller/internal/snmp/collector_test.go new file mode 100644 index 0000000..c5b16a3 --- /dev/null +++ b/poller/internal/snmp/collector_test.go @@ -0,0 +1,67 @@ +package snmp + +import ( + "context" + "testing" + + "github.com/staack/the-other-dude/poller/internal/bus" + poller "github.com/staack/the-other-dude/poller/internal/poller" + "github.com/staack/the-other-dude/poller/internal/store" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// TestSNMPCollectorImplementsCollector is a compile-time interface assertion +// that SNMPCollector satisfies the poller.Collector interface. +func TestSNMPCollectorImplementsCollector(t *testing.T) { + // This test verifies the compile-time assertion in collector.go. + // If this compiles, SNMPCollector satisfies the Collector interface. + var _ poller.Collector = (*SNMPCollector)(nil) +} + +// TestSNMPCollectorCollect_NilProfileID verifies that Collect returns an error +// when the device has no SNMPProfileID set. +func TestSNMPCollectorCollect_NilProfileID(t *testing.T) { + collector := NewSNMPCollector(nil, nil, nil, DefaultSNMPConfig()) + dev := store.Device{ + ID: "test-device-001", + TenantID: "test-tenant-001", + DeviceType: "snmp", + SNMPProfileID: nil, // no profile + } + + err := collector.Collect(context.Background(), dev, &bus.Publisher{}) + require.Error(t, err) + assert.Contains(t, err.Error(), "no SNMP profile") +} + +// TestSNMPCollectorCollect_UnknownProfileID verifies that Collect returns an error +// when the device's profile ID is not found in the ProfileCache. +func TestSNMPCollectorCollect_UnknownProfileID(t *testing.T) { + // Create a ProfileCache with no loaded profiles. + profiles := &ProfileCache{ + profiles: make(map[string]*CompiledProfile), + } + + collector := NewSNMPCollector(profiles, nil, nil, DefaultSNMPConfig()) + unknownID := "nonexistent-profile-uuid" + dev := store.Device{ + ID: "test-device-002", + TenantID: "test-tenant-001", + DeviceType: "snmp", + SNMPProfileID: &unknownID, + } + + err := collector.Collect(context.Background(), dev, &bus.Publisher{}) + require.Error(t, err) + assert.Contains(t, err.Error(), "profile not found") +} + +// TestSNMPCollectorNewCreatesInstance verifies NewSNMPCollector returns a properly +// initialized struct with all dependencies set. +func TestSNMPCollectorNewCreatesInstance(t *testing.T) { + cfg := DefaultSNMPConfig() + collector := NewSNMPCollector(nil, nil, nil, cfg) + require.NotNil(t, collector) + assert.Equal(t, cfg.MaxRepetitions, collector.cfg.MaxRepetitions) +}