772ef36f5f
gates / gates (push) Successful in 48s
FileBrowser config carries server.internalUrl http://filebrowser:80 (OnlyOffice fetched the public files address and got 403); Nextcloud's DocumentServerInternalUrl gets its trailing slash (every save was lost: http://onlyoffice:80cache/...); RestartStack("filebrowser") runs the R-1126 gate at once (files.<domain> was 502 for up to 5 min after the link switched). Each red-proofed. MinAgent 0.158.1.
45 lines
1.8 KiB
Go
45 lines
1.8 KiB
Go
package integrations
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// R-1018: Nextcloud's OnlyOffice connector builds its server-to-server requests by APPENDING a path to the two inside
|
|
// addresses the apply sets. The consequence pinned: the address the apply really sends, plus such a path, is a request
|
|
// to the right container. Measured on demo-hp 2026-10-18: without the slash Nextcloud asked
|
|
// http://onlyoffice:80cache/files/… and every save was lost. RED-PROOF: drop the slash from ncDocServerInternalURL →
|
|
// the cache URL no longer parses (port "80cache") and this fails.
|
|
func TestNextcloudApply_R1018_InternalAddressesTakeAPath(t *testing.T) {
|
|
values := map[string]string{}
|
|
for _, c := range nextcloudApplyCommands("https://office.example.hu", "secret") {
|
|
if len(c.args) >= 11 && c.args[7] == "config:app:set" {
|
|
values[c.args[9]] = strings.TrimPrefix(c.args[10], "--value=")
|
|
}
|
|
}
|
|
for _, tc := range []struct {
|
|
key, path, host string
|
|
}{
|
|
{"DocumentServerInternalUrl", "cache/files/data/2153553391_5872/output.docx/output.docx", "onlyoffice:80"},
|
|
{"DocumentServerInternalUrl", "converter?shardkey=thumb_1", "onlyoffice:80"},
|
|
{"StorageUrl", "apps/onlyoffice/track?doc=x", "nextcloud"},
|
|
} {
|
|
base, ok := values[tc.key]
|
|
if !ok {
|
|
t.Fatalf("the apply does not set %s (set: %v)", tc.key, values)
|
|
}
|
|
u, err := url.Parse(base + tc.path)
|
|
if err != nil {
|
|
t.Errorf("%s %q + %q is not a URL: %v", tc.key, base, tc.path, err)
|
|
continue
|
|
}
|
|
if u.Host != tc.host || !strings.HasPrefix(u.Path, "/"+strings.SplitN(tc.path, "?", 2)[0][:4]) {
|
|
t.Errorf("%s %q + %q reaches host %q path %q, want host %q", tc.key, base, tc.path, u.Host, u.Path, tc.host)
|
|
}
|
|
}
|
|
if values["DocumentServerUrl"] != "https://office.example.hu" {
|
|
t.Errorf("DocumentServerUrl = %q, want the public office address", values["DocumentServerUrl"])
|
|
}
|
|
}
|