From ec6f0e2edb7bf70f3b8c7404c058f14ee578b1d6 Mon Sep 17 00:00:00 2001 From: Lilleman auf Larv Date: Sun, 20 Sep 2026 00:16:56 +0200 Subject: [PATCH] Pin the port tie-break on a port where it discriminates, and protocol selection by name --- data_test.go | 2 +- table_test.go | 104 +++++++++++++++++++++++++------------------------- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/data_test.go b/data_test.go index d6b2d57..a67110a 100644 --- a/data_test.go +++ b/data_test.go @@ -115,7 +115,7 @@ func TestShippedMiscReferenceData(t *testing.T) { "httpmethod.safe": regexp.MustCompile(`^(yes|no)$`), "httpmethod.idempotent": regexp.MustCompile(`^(yes|no)$`), "port": regexp.MustCompile(`^[1-9]\d{0,4}$`), - "port.name": regexp.MustCompile(`^\S+$`), + "port.service": regexp.MustCompile(`^\S+$`), "protocol": regexp.MustCompile(`^\S+( \S+)*$`), "protocol.name": regexp.MustCompile(`\S`), "protocol.number": regexp.MustCompile(`^\d{1,3}$`), diff --git a/table_test.go b/table_test.go index 6facdbc..c73f392 100644 --- a/table_test.go +++ b/table_test.go @@ -663,57 +663,59 @@ func TestTableOverridesByLayering(t *testing.T) { func TestShippedTables(t *testing.T) { f := newGenerator(t, "data/misc", WithSeed(1)) for path, want := range map[string]string{ - "territory[SE]": "Sweden", - "territory[Sweden].alpha3": "SWE", - "territory[SE].numeric": "752", - "territory[SE].tld": ".se", - "territory[SE].calling-code": "46", - "territory[SE].capital": "Stockholm", - "territory[SE].currency": "SEK", - "territory[SE].flag": "🇸🇪", - "territory[SE].country": "SE", - "territory[GL]": "Greenland", - "territory[GL].country": "DK", - "territory[Åland Islands].country": "FI", - "currency[SEK].name": "Swedish Krona", - "currency[SEK].symbol": "kr", - "currency[SEK].numeric": "752", - "currency[SEK].decimals": "2", - "currency[Euro].code": "EUR", - "language[sv]": "Swedish", - "language[sv].code3": "swe", - "language[Swedish].code": "sv", - "language[nl]": "Dutch", - "httpstatus[200]": "200 OK", - "httpstatus[404]": "404 Not Found", - "httpstatus[404].reason": "Not Found", - "httpstatus[451].reason": "Unavailable For Legal Reasons", - "httpstatus[500].reason": "Internal Server Error", - "mimetype[application/json].ext": ".json", - "mimetype[text/markdown].ext": ".md", - "mimetype[.jpg]": "image/jpeg", - "mimetype[.mov]": "video/quicktime", - "mimetype[.mp3]": "audio/mpeg", - "mimetype[.mp4]": "video/mp4", - "mimetype[.ogg]": "audio/ogg", - "timezone[Europe/Stockholm]": "Europe/Stockholm", - "timezone[Europe/Stockholm].offset": "+01:00", - "timezone[Asia/Kathmandu].offset": "+05:45", - "timezone[America/New_York].offset": "-05:00", - "territory[SE].timezone": "Europe/Stockholm", - "httpmethod[GET].safe": "yes", - "httpmethod[GET].idempotent": "yes", - "httpmethod[POST].safe": "no", - "httpmethod[POST].idempotent": "no", - "httpmethod[PUT].idempotent": "yes", - "protocol[TCP].number": "6", - "protocol[UDP].number": "17", - "protocol[ICMP].name": "Internet Control Message", - "port[443]": "443", - "port[443].name": "https", - "port[22].name": "ssh", - "port[3306].name": "mysql", - "territory[NP].timezone.offset": "+05:45", + "territory[SE]": "Sweden", + "territory[Sweden].alpha3": "SWE", + "territory[SE].numeric": "752", + "territory[SE].tld": ".se", + "territory[SE].calling-code": "46", + "territory[SE].capital": "Stockholm", + "territory[SE].currency": "SEK", + "territory[SE].flag": "🇸🇪", + "territory[SE].country": "SE", + "territory[GL]": "Greenland", + "territory[GL].country": "DK", + "territory[Åland Islands].country": "FI", + "currency[SEK].name": "Swedish Krona", + "currency[SEK].symbol": "kr", + "currency[SEK].numeric": "752", + "currency[SEK].decimals": "2", + "currency[Euro].code": "EUR", + "language[sv]": "Swedish", + "language[sv].code3": "swe", + "language[Swedish].code": "sv", + "language[nl]": "Dutch", + "httpstatus[200]": "200 OK", + "httpstatus[404]": "404 Not Found", + "httpstatus[404].reason": "Not Found", + "httpstatus[451].reason": "Unavailable For Legal Reasons", + "httpstatus[500].reason": "Internal Server Error", + "mimetype[application/json].ext": ".json", + "mimetype[text/markdown].ext": ".md", + "mimetype[.jpg]": "image/jpeg", + "mimetype[.mov]": "video/quicktime", + "mimetype[.mp3]": "audio/mpeg", + "mimetype[.mp4]": "video/mp4", + "mimetype[.ogg]": "audio/ogg", + "timezone[Europe/Stockholm]": "Europe/Stockholm", + "timezone[Europe/Stockholm].offset": "+01:00", + "timezone[Asia/Kathmandu].offset": "+05:45", + "timezone[America/New_York].offset": "-05:00", + "territory[SE].timezone": "Europe/Stockholm", + "httpmethod[GET].safe": "yes", + "httpmethod[GET].idempotent": "yes", + "httpmethod[POST].safe": "no", + "httpmethod[POST].idempotent": "no", + "httpmethod[PUT].idempotent": "yes", + "protocol[TCP].number": "6", + "protocol[UDP].number": "17", + "protocol[ICMP].name": "Internet Control Message", + "port[443]": "443", + "port[443].service": "https", + "port[22].service": "ssh", + "port[3306].service": "mysql", + "port[2049].service": "nfs", + "protocol[Transmission Control].number": "6", + "territory[NP].timezone.offset": "+05:45", } { if got := fake(t, f, path); got != want { t.Errorf("Fake(%q) = %q, want %q", path, got, want)