diff --git a/internal/model/model_test.go b/internal/model/model_test.go new file mode 100644 index 0000000..5e3bf64 --- /dev/null +++ b/internal/model/model_test.go @@ -0,0 +1,63 @@ +package model + +import "testing" + +func TestParseElement(t *testing.T) { + tests := []struct { + in string + wantZone string + wantSel SelectorKind + wantRef string + wantErr bool + }{ + {in: "loc", wantZone: "loc", wantSel: SelNone}, + {in: " net ", wantZone: "net", wantSel: SelNone}, + {in: "net:+asn_cloudflare", wantZone: "net", wantSel: SelIPSet, wantRef: "asn_cloudflare"}, + {in: "dmz:&api.partner", wantZone: "dmz", wantSel: SelFQDN, wantRef: "api.partner"}, + {in: "net: +office", wantZone: "net", wantSel: SelIPSet, wantRef: "office"}, + + // Bare selectors must be rejected: a selector always needs a zone. + {in: "+office", wantErr: true}, + {in: "&host", wantErr: true}, + {in: "asn:13335", wantErr: true}, // no + or & sigil -> invalid selector + {in: "", wantErr: true}, + {in: "net:", wantErr: true}, + {in: ":+office", wantErr: true}, + {in: "net:+", wantErr: true}, + } + + for _, tt := range tests { + got, err := ParseElement(tt.in) + if tt.wantErr { + if err == nil { + t.Errorf("ParseElement(%q): expected error, got %+v", tt.in, got) + } + continue + } + if err != nil { + t.Errorf("ParseElement(%q): unexpected error: %v", tt.in, err) + continue + } + if got.Zone != tt.wantZone || got.Selector != tt.wantSel || got.Ref != tt.wantRef { + t.Errorf("ParseElement(%q) = %+v, want zone=%q sel=%q ref=%q", + tt.in, got, tt.wantZone, tt.wantSel, tt.wantRef) + } + } +} + +func TestAddressGroupSetName(t *testing.T) { + cases := []struct { + group AddressGroup + want string + }{ + {AddressGroup{Name: "asn_cloudflare", Type: GroupASN}, "asn_cloudflare"}, + {AddressGroup{Name: "cloudflare", Type: GroupASN}, "asn_cloudflare"}, + {AddressGroup{Name: "office", Type: GroupStatic}, "office"}, + {AddressGroup{Name: "vpn", Type: GroupDNS}, "vpn"}, + } + for _, c := range cases { + if got := c.group.SetName(); got != c.want { + t.Errorf("SetName(%+v) = %q, want %q", c.group, got, c.want) + } + } +}