feat(client): lodge remote binds a repository to another server

This commit is contained in:
hh committed 2026-10-02 22:05:10 +00:00
1 parent 45c81cfcaf
commit 91d83f3032
10 files changed
+639 -147

No files matched your search

+31 -11
View File
@@ -19,6 +19,7 @@ const adminToken = "admin"
type machine struct {
t *testing.T
config *Config
client *Client
root string
}
@@ -34,7 +35,7 @@ func git(t *testing.T, dir string, args ...string) string {
return string(out)
}
func setup(t *testing.T) (*machine, *machine) {
func newServer(t *testing.T) string {
t.Helper()
store, err := server.OpenStore(filepath.Join(t.TempDir(), "lodge.db"))
if err != nil {
@@ -43,22 +44,41 @@ func setup(t *testing.T) (*machine, *machine) {
t.Cleanup(func() { store.Close() })
api := httptest.NewServer(server.New(store, server.Config{AdminToken: adminToken}))
t.Cleanup(api.Close)
return api.URL
}
func newOrigin(t *testing.T) string {
t.Helper()
origin := t.TempDir()
git(t, origin, "init", "-b", "main")
write(t, origin, "README.md", "readme")
write(t, origin, "docs/agents/tracked.md", "in git")
git(t, origin, "add", ".")
git(t, origin, "commit", "-m", "root")
git(t, origin, "commit", "-m", "root "+origin)
return origin
}
machines := [2]*machine{}
for i := range machines {
root := filepath.Join(t.TempDir(), "clone")
git(t, origin, "clone", origin, root)
resolved, _ := filepath.EvalSymlinks(root)
machines[i] = &machine{t: t, root: resolved, client: &Client{URL: api.URL, Token: adminToken, DataDir: t.TempDir()}}
func newMachine(t *testing.T, origin, url, token string) *machine {
t.Helper()
cfg := &Config{URL: url, Token: token, DataDir: t.TempDir(), path: filepath.Join(t.TempDir(), "config.json")}
if err := writeJSONFile(cfg.path, cfg); err != nil {
t.Fatal(err)
}
return machines[0], machines[1]
return &machine{t: t, config: cfg, client: &Client{URL: url, Token: token, DataDir: cfg.DataDir}, root: clone(t, origin)}
}
func clone(t *testing.T, origin string) string {
t.Helper()
root := filepath.Join(t.TempDir(), "clone")
git(t, origin, "clone", origin, root)
resolved, _ := filepath.EvalSymlinks(root)
return resolved
}
func setup(t *testing.T) (*machine, *machine) {
t.Helper()
url, origin := newServer(t), newOrigin(t)
return newMachine(t, origin, url, adminToken), newMachine(t, origin, url, adminToken)
}
func write(t *testing.T, root, path, content string) {
@@ -70,7 +90,7 @@ func write(t *testing.T, root, path, content string) {
func (m *machine) sync() Result {
m.t.Helper()
res, err := m.client.Sync(context.Background(), m.root, true)
res, err := m.config.Sync(context.Background(), m.root, true)
if err != nil {
m.t.Fatal(err)
}
@@ -130,7 +150,7 @@ func TestBranchNotesFollowTheBranchAndSharedStay(t *testing.T) {
mac.sync()
git(t, mac.root, "checkout", "main")
if _, err := mac.client.Sync(context.Background(), mac.root, false); err != nil {
if _, err := mac.config.Sync(context.Background(), mac.root, false); err != nil {
t.Fatal(err)
}
mac.expect(".agent/plan.md", "main plan")