test(18-03): add failing tests for SNMPCollector interface and edge cases

- Compile-time Collector interface assertion
- Collect returns error with nil SNMPProfileID
- Collect returns error with unknown profile ID
- NewSNMPCollector returns initialized struct

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jason Staack
2026-03-21 19:26:23 -05:00
parent 2aaccb77be
commit 590b1c8d4d

View File

@@ -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)
}