refactor/kvconf 3421f16

codec_test.go RawHistoryFolder

1package auth
2
3import (
4	"bytes"
5	"encoding/binary"
6	"errors"
7	"io"
8	"testing"
9
10	"github.com/bnema/neferafk/internal/ports"
11)
12
13func TestCodecBoundsAndTruncation(t *testing.T) {
14	f := ports.AuthFrame{Kind: ports.AuthSecret, Generation: 7, Attempt: ^uint64(0), Payload: bytes.Repeat([]byte{'x'}, 512)}
15	var wire bytes.Buffer
16	if err := WriteFrame(&wire, f); err != nil {
17		t.Fatal(err)
18	}
19	encoded := bytes.Clone(wire.Bytes())
20	got, err := ReadFrame(&wire)
21	if err != nil || got.Generation != 7 || got.Attempt != f.Attempt || !bytes.Equal(got.Payload, f.Payload) {
22		t.Fatalf("roundtrip %v", err)
23	}
24	clear(got.Payload)
25	for _, n := range []int{1, 4, 10, 26, len(encoded) - 1} {
26		if _, err := ReadFrame(bytes.NewReader(encoded[:n])); err == nil {
27			t.Fatalf("truncation %d accepted", n)
28		}
29	}
30	for _, corrupt := range []string{"magic", "kind", "generation", "secret-length", "huge"} {
31		b := bytes.Clone(encoded)
32		switch corrupt {
33		case "magic":
34			b[4] = 'X'
35		case "kind":
36			b[8] = 255
37		case "generation":
38			clear(b[10:18])
39		case "secret-length":
40			binary.BigEndian.PutUint32(b[:4], frameHeader+513)
41		case "huge":
42			binary.BigEndian.PutUint32(b[:4], ^uint32(0))
43		}
44		if _, err := ReadFrame(bytes.NewReader(b)); !errors.Is(err, ErrProtocol) {
45			t.Fatalf("%s error %v", corrupt, err)
46		}
47	}
48	f.Payload = append(f.Payload, 1)
49	if err := WriteFrame(io.Discard, f); !errors.Is(err, ErrProtocol) {
50		t.Fatal("oversize secret accepted")
51	}
52}

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 2

Tags 9

↑↓ moveenter openesc close