- formatHWID/parseHWID with HW-NNNNN regex validation - AllocateNextHWID with optimistic-lock retry (3 attempts) - getHighestHWIDNumber scans all devices for highest existing asset_tag - hwIDExists checks specific asset_tag via DcimDevicesList filter - Unit tests for format/parse covering valid and invalid cases
48 lines
1 KiB
Go
48 lines
1 KiB
Go
package netbox
|
|
|
|
import "testing"
|
|
|
|
func TestFormatHWID(t *testing.T) {
|
|
tests := []struct {
|
|
n int
|
|
want string
|
|
}{
|
|
{1, "HW-00001"},
|
|
{42, "HW-00042"},
|
|
{99999, "HW-99999"},
|
|
}
|
|
for _, tt := range tests {
|
|
got := formatHWID(tt.n)
|
|
if got != tt.want {
|
|
t.Errorf("formatHWID(%d) = %q, want %q", tt.n, got, tt.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseHWID(t *testing.T) {
|
|
tests := []struct {
|
|
s string
|
|
want int
|
|
wantErr bool
|
|
}{
|
|
{"HW-00001", 1, false},
|
|
{"HW-00042", 42, false},
|
|
{"HW-99999", 99999, false},
|
|
{"", 0, true},
|
|
{"not-a-hw-id", 0, true},
|
|
{"HW-0001", 0, true}, // only 4 digits — invalid
|
|
{"hw-00001", 0, true}, // lowercase — invalid
|
|
}
|
|
for _, tt := range tests {
|
|
got, err := parseHWID(tt.s)
|
|
if tt.wantErr && err == nil {
|
|
t.Errorf("parseHWID(%q): expected error, got nil", tt.s)
|
|
}
|
|
if !tt.wantErr && err != nil {
|
|
t.Errorf("parseHWID(%q): unexpected error: %v", tt.s, err)
|
|
}
|
|
if !tt.wantErr && got != tt.want {
|
|
t.Errorf("parseHWID(%q) = %d, want %d", tt.s, got, tt.want)
|
|
}
|
|
}
|
|
}
|