tinyrelayfile
tinyrelay/internal/daemon/inbox_reconcile_test.go/

internal/daemon/inbox_reconcile_test.go raw
1package daemon
2
3import (
4 "context"
5 "testing"
6
7 "github.com/FelineStateMachine/tinyrelay/internal/catalog"
8 "github.com/FelineStateMachine/tinyrelay/internal/policy"
9 "github.com/FelineStateMachine/tinyrelay/internal/replication"
10 "github.com/FelineStateMachine/tinyrelay/internal/storage"
11)
12
13func TestAutomaticInboxJobReconcilesPolicyChanges(t *testing.T) {
14 ctx := context.Background()
15 store, err := storage.Open(ctx, t.TempDir()+"/tenant.db")
16 if err != nil {
17 t.Fatal(err)
18 }
19 defer store.Close()
20 service, err := replication.NewService(replication.Config{Store: store, DataDir: t.TempDir()})
21 if err != nil {
22 t.Fatal(err)
23 }
24 tenant := &Tenant{meta: catalog.Tenant{ID: "tenant"}, store: store, replication: service}
25 owner := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
26 previous := policy.Policy{Owner: owner}
27 current := previous
28 current.Inbox.Targeted = true
29 current.AllowedKinds = []int{1, 7}
30 if err := tenant.reconcileAutomaticInbox(ctx, previous, current); err != nil {
31 t.Fatal(err)
32 }
33 jobs, err := service.ListJobs(ctx)
34 if err != nil {
35 t.Fatal(err)
36 }
37 if len(jobs) != 1 || jobs[0].DiscoverPubKey != owner {
38 t.Fatalf("jobs after enable = %#v", jobs)
39 }
40 if err := tenant.reconcileAutomaticInbox(ctx, previous, current); err != nil {
41 t.Fatal(err)
42 }
43 var intents int
44 if err := store.DB().QueryRowContext(ctx, `SELECT count(*) FROM work_intents WHERE event_id=? AND kind='job'`, "source-tenant").Scan(&intents); err != nil {
45 t.Fatal(err)
46 }
47 if intents != 1 {
48 t.Fatalf("reconcile created %d job intents, want one", intents)
49 }
50 disabled := current
51 disabled.Inbox.Targeted = false
52 if err := tenant.reconcileAutomaticInbox(ctx, current, disabled); err != nil {
53 t.Fatal(err)
54 }
55 jobs, err = service.ListJobs(ctx)
56 if err != nil {
57 t.Fatal(err)
58 }
59 if len(jobs) != 0 {
60 t.Fatalf("jobs after disable = %#v", jobs)
61 }
62 if err := tenant.reconcileAutomaticInbox(ctx, disabled, current); err != nil {
63 t.Fatal(err)
64 }
65 jobs, err = service.ListJobs(ctx)
66 if err != nil {
67 t.Fatal(err)
68 }
69 if len(jobs) != 1 {
70 t.Fatalf("jobs after re-enable = %#v", jobs)
71 }
72}
73
74func TestAutomaticInboxTransferFollowsCurrentOwner(t *testing.T) {
75 ctx := context.Background()
76 store, err := storage.Open(ctx, t.TempDir()+"/tenant.db")
77 if err != nil {
78 t.Fatal(err)
79 }
80 defer store.Close()
81 service, err := replication.NewService(replication.Config{Store: store, DataDir: t.TempDir()})
82 if err != nil {
83 t.Fatal(err)
84 }
85 tenant := &Tenant{meta: catalog.Tenant{ID: "tenant"}, store: store, replication: service}
86 oldOwner := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
87 newOwner := "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
88 previous := policy.Policy{Owner: oldOwner, Inbox: policy.Inbox{Targeted: true}, AllowedKinds: []int{1}}
89 if err := tenant.reconcileAutomaticInbox(ctx, policy.Policy{Owner: oldOwner}, previous); err != nil {
90 t.Fatal(err)
91 }
92 next := previous
93 next.Owner = newOwner
94 if err := tenant.reconcileAutomaticInbox(ctx, previous, next); err != nil {
95 t.Fatal(err)
96 }
97 jobs, err := service.ListJobs(ctx)
98 if err != nil {
99 t.Fatal(err)
100 }
101 if len(jobs) != 1 || jobs[0].DiscoverPubKey != newOwner || inboxJobOwner(jobs[0]) != newOwner {
102 t.Fatalf("transfer did not update discovery owner: %#v", jobs)
103 }
104}

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs