dashboard and status API list a port's domains apart from its hostnames (closes #245)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
A port entry in the state saves the apex domains that resolve to its address with its hostnames. The dashboard's Ports table now has a Domains column next to Hostnames, and a port entry in /api/v1/status has a `domains` list, with `hostnames` no longer holding a domain. A name is taken as a domain when it has a domain entry, as the dashboard and API already tell a domain's own records from a hostname's. Both read the split from one function, buildPorts. The state file is unchanged; README says its port `hostnames` include domains. Model: opus-5-5
This commit was merged in pull request #247.
This commit is contained in:
@@ -205,3 +205,51 @@ func TestDashboardShowsDomainRecordsUnderDomains(t *testing.T) {
|
||||
t.Errorf("summary bar does not say %q", summary)
|
||||
}
|
||||
}
|
||||
|
||||
// rowCells returns the text of each cell of a dashboard table row
|
||||
// whose cells start with tag, "<th" or "<td".
|
||||
func rowCells(row string, tag string) []string {
|
||||
tags := regexp.MustCompile(`<[^>]*>`)
|
||||
parts := strings.Split(row, tag)[1:]
|
||||
cells := make([]string, 0, len(parts))
|
||||
|
||||
for _, cell := range parts {
|
||||
text := tags.ReplaceAllString(tag+cell, " ")
|
||||
cells = append(cells, strings.Join(strings.Fields(text), " "))
|
||||
}
|
||||
|
||||
return cells
|
||||
}
|
||||
|
||||
// TestDashboardPortsTellDomainsFromHostnames checks that the Ports
|
||||
// table lists an apex domain under Domains and a hostname under
|
||||
// Hostnames when both resolve to the port's address.
|
||||
func TestDashboardPortsTellDomainsFromHostnames(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
page := get(t, newHandlersWithFailures(t).HandleDashboard())
|
||||
ports := dashboardSection(t, page, "Ports")
|
||||
|
||||
headings := rowCells(dashboardRow(t, ports, "Address</th>"), "<th")
|
||||
cells := rowCells(dashboardRow(t, ports, sharedPort), "<td")
|
||||
|
||||
if len(cells) != len(headings) {
|
||||
t.Fatalf("row of %s has cells %q under headings %q",
|
||||
sharedPort, cells, headings)
|
||||
}
|
||||
|
||||
under := make(map[string]string)
|
||||
for i, heading := range headings {
|
||||
under[heading] = cells[i]
|
||||
}
|
||||
|
||||
if under["Domains"] != testDomain {
|
||||
t.Errorf("row of %s lists %q under Domains, want %q",
|
||||
sharedPort, under["Domains"], testDomain)
|
||||
}
|
||||
|
||||
if under["Hostnames"] != testHostname {
|
||||
t.Errorf("row of %s lists %q under Hostnames, want %q",
|
||||
sharedPort, under["Hostnames"], testHostname)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user