- Add internal/netbox/types.go with Device and CustomFields domain types - Add internal/netbox/client.go with NewClient, Ping, ListDevices, GetDevice - Add client_test.go with validation unit tests and skippable integration tests - go-netbox v4.3.0 dependency added
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package netbox_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"git.georgsen.dk/hwlab/internal/netbox"
|
|
)
|
|
|
|
func TestNewClientValidation(t *testing.T) {
|
|
_, err := netbox.NewClient("", "token")
|
|
if err == nil {
|
|
t.Error("expected error for empty url")
|
|
}
|
|
|
|
_, err = netbox.NewClient("http://10.5.0.130:8000/api", "")
|
|
if err == nil {
|
|
t.Error("expected error for empty token")
|
|
}
|
|
|
|
c, err := netbox.NewClient("http://10.5.0.130:8000/api", "sometoken")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if c == nil {
|
|
t.Error("expected non-nil client")
|
|
}
|
|
}
|
|
|
|
// integrationToken returns the real NetBox token from env, or skips the test
|
|
// if only the placeholder is present (placeholder is never 40 hex chars).
|
|
func integrationToken(t *testing.T) string {
|
|
t.Helper()
|
|
token := os.Getenv("HWLAB_NETBOX_TOKEN")
|
|
if len(token) != 40 {
|
|
t.Skip("HWLAB_NETBOX_TOKEN is not a real 40-char token — skipping integration test")
|
|
}
|
|
return token
|
|
}
|
|
|
|
func TestPingLive(t *testing.T) {
|
|
token := integrationToken(t)
|
|
c, err := netbox.NewClient("http://10.5.0.130:8000/api", token)
|
|
if err != nil {
|
|
t.Fatalf("NewClient: %v", err)
|
|
}
|
|
if err := c.Ping(context.Background()); err != nil {
|
|
t.Fatalf("Ping: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestListDevicesLive(t *testing.T) {
|
|
token := integrationToken(t)
|
|
c, _ := netbox.NewClient("http://10.5.0.130:8000/api", token)
|
|
devices, err := c.ListDevices(context.Background(), 5)
|
|
if err != nil {
|
|
t.Fatalf("ListDevices: %v", err)
|
|
}
|
|
t.Logf("found %d devices in NetBox", len(devices))
|
|
// Not asserting count — NetBox may be empty; just assert no error
|
|
}
|