feat/data-dnd e05cb15

busretry_test.go RawHistoryFolder

1package busretry
2
3import (
4	"context"
5	"errors"
6	"testing"
7	"time"
8
9	"github.com/bnema/neferwl/internal/adapters/logging"
10)
11
12// A failing or returning attempt runs again until ctx ends, and Run returns
13// without waiting out the delay.
14func TestRunRetriesUntilCancelled(t *testing.T) {
15	ctx, cancel := context.WithCancel(context.Background())
16	calls := make(chan int, 8)
17	n := 0
18	done := make(chan struct{})
19	go func() {
20		defer close(done)
21		Run(ctx, time.Millisecond, "test feature", logging.For(ctx, "test"), func(context.Context) error {
22			n++
23			select {
24			case calls <- n:
25			case <-ctx.Done():
26			}
27			if n%2 == 0 {
28				return nil
29			}
30			return errors.New("bus gone")
31		})
32	}()
33	for want := 1; want <= 3; want++ {
34		select {
35		case got := <-calls:
36			if got != want {
37				t.Fatalf("attempt %d, want %d", got, want)
38			}
39		case <-time.After(5 * time.Second):
40			t.Fatalf("attempt %d never ran", want)
41		}
42	}
43	cancel()
44	select {
45	case <-done:
46	case <-time.After(5 * time.Second):
47		t.Fatal("Run outlived its context")
48	}
49}
50
51// A long delay does not hold Run once ctx ends.
52func TestRunStopsDuringDelay(t *testing.T) {
53	ctx, cancel := context.WithCancel(context.Background())
54	started := make(chan struct{})
55	done := make(chan struct{})
56	go func() {
57		defer close(done)
58		Run(ctx, time.Hour, "test feature", logging.For(ctx, "test"), func(context.Context) error {
59			close(started)
60			return errors.New("fail")
61		})
62	}()
63	<-started
64	cancel()
65	select {
66	case <-done:
67	case <-time.After(5 * time.Second):
68		t.Fatal("Run waits out the retry delay after cancel")
69	}
70}

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 25

Tags 10

↑↓ moveenter openesc close