package web import ( "bytes" "net/http" "os" "strings" "testing" ) func TestAboutPageForARelease(t *testing.T) { code, body := get(t, About("v1.2.3"), "http://llmgw.example/about", nil) if code != http.StatusOK { t.Fatalf("status %d", code) } for _, want := range []string{ "", repoURL + "/releases/download/v1.2.3/llmgw-v1.2.3-linux-amd64", "VERSION=v1.2.3", "reverse_proxy", // the Caddyfile, inline "proxy_read_timeout", // and nginx's `This gateway`, "/_static/fonts/archivo-latin.woff2?v=", } { if !strings.Contains(body, want) { t.Errorf("the page does not have %q", want) } } // Served to anyone, on networks that may reach nothing: the page sends no // browser elsewhere for its fonts, and does not announce unreleased work // in a binary that already has it. for _, not := range []string{"fonts.googleapis.com", "next release"} { if strings.Contains(body, not) { t.Errorf("the page has %q", not) } } } func TestAboutPageForADevelopmentBuild(t *testing.T) { _, body := get(t, About("v1.2.3-4-gabcdef"), "http://llmgw.example/about", nil) if strings.Contains(body, "/releases/download/v1.2.3-4") || strings.Contains(body, `class="dl"`) { t.Error("a development build links to release files that do not exist") } if !strings.Contains(body, "development build (v1.2.3-4-gabcdef)") { t.Error("a development build does not say what it is") } } func TestAboutPageAsTheWebsite(t *testing.T) { d := NewAboutData("v1.2.3") d.Site, d.Date = true, "1 January 2027" var b bytes.Buffer if err := RenderAbout(&b, d); err != nil { t.Fatal(err) } body := b.String() for _, want := range []string{"fonts.googleapis.com", "Released 1 January 2027"} { if !strings.Contains(body, want) { t.Errorf("the website does not have %q", want) } } for _, not := range []string{"", "This gateway", "/_static/"} { if strings.Contains(body, not) { t.Errorf("the website has %q", not) } } } func TestAboutProxyConfigsMatchDeploy(t *testing.T) { for _, name := range []string{"Caddyfile", "nginx.conf"} { want, err := os.ReadFile("../../deploy/proxy/" + name) if err != nil { t.Fatal(err) } got, err := proxyConfigs.ReadFile("proxy/" + name) if err != nil { t.Fatal(err) } if !bytes.Equal(got, want) { t.Errorf("internal/web/proxy/%s differs from deploy/proxy/%[1]s: copy it over", name) } } }