Files
pocket-id/backend/internal/cmds/francis_runtime_test.go
T
ItalyPaleAle fadb1a5552 feat: add FRANCIS_HOST to connect to a standalone Francis runtime
FRANCIS_HOST decides where the Francis actor runtime lives. When set to "embedded" (the default), Pocket ID starts the runtime inside its own process.

Any other value is the address, or a comma-separated list of addresses, of a standalone Francis runtime. Pocket ID then connects to it as a remote actor host and starts no embedded runtime.

Because when using a remote runtime, it's likewise not possible to enforce a single instance of Pocket ID is running at once, the env vars currently have the `EXPERIMENTAL_` prefix, are **undocumented**, and show a warning if used.

Notes:

- Connecting to a standalone runtime also needs FRANCIS_HOST_PSK or FRANCIS_HOST_JWT_FILE, and optionally (but recommended) FRANCIS_CA.
- When connecting to a remote runtime, exporting Pocket ID data does not include the actor state, which will need to be backed up and restored separately
2026-09-19 23:38:18 -07:00

44 lines
1.1 KiB
Go

package cmds
import (
"archive/zip"
"bytes"
"testing"
"github.com/stretchr/testify/require"
"github.com/pocket-id/pocket-id/backend/internal/service"
)
func TestEnsureNoActorsBackup(t *testing.T) {
buildZip := func(t *testing.T, names ...string) *zip.Reader {
t.Helper()
buf := &bytes.Buffer{}
zw := zip.NewWriter(buf)
for _, name := range names {
w, err := zw.Create(name)
require.NoError(t, err)
_, err = w.Write([]byte("payload"))
require.NoError(t, err)
}
require.NoError(t, zw.Close())
zr, err := zip.NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len()))
require.NoError(t, err)
return zr
}
t.Run("accepts an archive without the actor data", func(t *testing.T) {
err := ensureNoActorsBackup(buildZip(t, "database.json", "uploads/logo.png"))
require.NoError(t, err)
})
t.Run("rejects an archive carrying the actor data", func(t *testing.T) {
err := ensureNoActorsBackup(buildZip(t, "database.json", service.ActorsBackupFileName))
require.Error(t, err)
require.ErrorContains(t, err, service.ActorsBackupFileName)
})
}