v0.8.0 cad1d13

registry_lookup_test.go RawHistoryFolder

1package broker
2
3import (
4	"context"
5	"testing"
6	"time"
7
8	"github.com/bnema/vev/internal/domain"
9	"github.com/bnema/vev/internal/ports"
10	"github.com/stretchr/testify/require"
11)
12
13// TestRegistryLookupHostDeepCopyAndCancel pins the committed-authority read
14// seam: a lookup returns a defensive deep copy of durable routing authority (so
15// a caller cannot alias the registry's record through the route's argv), a
16// cancelled context is refused before authority is consulted, and an unknown
17// endpoint reports absence without an error.
18func TestRegistryLookupHostDeepCopyAndCancel(t *testing.T) {
19	clock := newManualClock(time.Unix(100, 0))
20	registry := newTestRegistry(t, 1, newTestStore(), newTestProbe(1), clock)
21	reg := registration(t, "user@host:22", 1)
22	require.NoError(t, registry.ReplaceHosts(hostRecords(reg)))
23
24	want := hostRecord(reg)
25	got, found, err := registry.LookupHost(context.Background(), reg.Endpoint)
26	require.NoError(t, err)
27	require.True(t, found)
28	require.Equal(t, want, got)
29	require.Equal(t, canonicalRoute(poolPolicy(), reg.Endpoint), got.Route)
30
31	// Mutating the returned copy touches nothing: the route's argv never aliases
32	// registry authority, and neither do the value fields.
33	got.Route.Argv[0] = "mutated"
34	got.Policy.Trust = "mutated"
35	got.Registration.Generation = 99
36	got.Identity = "mutated"
37	again, found, err := registry.LookupHost(context.Background(), reg.Endpoint)
38	require.NoError(t, err)
39	require.True(t, found)
40	require.Equal(t, want, again, "the returned record is a deep copy of authority")
41
42	cancelled, cancel := context.WithCancel(context.Background())
43	cancel()
44	absent, found, err := registry.LookupHost(cancelled, reg.Endpoint)
45	require.ErrorIs(t, err, context.Canceled)
46	require.False(t, found)
47	require.Equal(t, ports.BrokerHostRecord{}, absent)
48
49	missing, found, err := registry.LookupHost(context.Background(), "user@absent:22")
50	require.NoError(t, err)
51	require.False(t, found)
52	require.Equal(t, ports.BrokerHostRecord{}, missing)
53
54	// The refused lookups never moved authority.
55	require.Equal(t, []ports.BrokerHostRecord{want}, registry.authority.Hosts)
56	require.Equal(t, domain.RemoteRegistration{}, missing.Registration)
57}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 12

Tags 11

↑↓ moveenter openesc close