main f2d166b

capture_ownership_test.go RawHistoryFolder

1package drm
2
3import (
4	"context"
5	"image"
6	"os"
7	"testing"
8
9	"github.com/bnema/neferwl/internal/adapters/outputkit/capture"
10	portsmocks "github.com/bnema/neferwl/internal/mocks/ports"
11	"github.com/bnema/neferwl/internal/ports"
12	"github.com/stretchr/testify/mock"
13)
14
15func TestCaptureOwnershipTransferredBeforeCommitPanic(t *testing.T) {
16	o, _, _ := testOutput(t)
17	o.cursor = nil
18	k := newMockkms(t)
19	o.k = k
20	k.EXPECT().commit(mock.Anything, mock.Anything, mock.Anything).RunAndReturn(func(*atomicReq, uint32, uint64) error { panic("commit panic") }).Once()
21	r := portsmocks.NewMockRenderer(t)
22	r.EXPECT().UseTarget(0).Return().Once()
23	r.EXPECT().Render(mock.Anything, mock.Anything).Return(nil, nil).Once()
24	frame := portsmocks.NewMockCaptureFrame(t)
25	frame.EXPECT().Done().Return(nil).Maybe()
26	frame.EXPECT().Read(mock.Anything, mock.Anything, 8).Return(nil).Maybe()
27	r.EXPECT().BeginCapture().Return(frame, nil).Once()
28	r.EXPECT().EndCapture(frame).Return().Once()
29	f, err := os.CreateTemp(t.TempDir(), "capture")
30	if err != nil {
31		t.Fatal(err)
32	}
33	if err := f.Truncate(16); err != nil {
34		t.Fatal(err)
35	}
36	requests := []ports.CaptureRequest{{ID: 1, Dst: ports.SHMBuffer{File: f}, Region: image.Rect(0, 0, 2, 2), Width: 2, Height: 2, Stride: 8, Format: 1}}
37	replies := make(chan ports.CaptureDone, 2)
38	pipeline := capture.NewPipeline(context.Background(), replies)
39	func() {
40		defer func() {
41			if p := recover(); p != "commit panic" {
42				t.Fatalf("panic %v", p)
43			}
44		}()
45		_, _ = o.submitFrame(context.Background(), r, ports.Scene{Seq: 1}, nil, nil, requests, pipeline)
46	}()
47	pipeline.Close(r)
48	if requests[0].ID != 0 || requests[0].Dst.File != nil {
49		t.Fatal("owner retained handed-off request")
50	}
51	if result := <-replies; result.ID != 1 {
52		t.Fatalf("reply %+v", result)
53	}
54	select {
55	case result := <-replies:
56		t.Fatalf("duplicate reply %+v", result)
57	default:
58	}
59	if _, err := f.Stat(); err == nil {
60		t.Fatal("descriptor leaked")
61	}
62	frame.Calls = nil
63}

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