1package neferclient
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7)
8
9func TestSecretBufferEditing(t *testing.T) {
10 b := NewSecretBuffer(4)
11 storage := b.buf
12 require.True(t, b.appendText([]byte("a")))
13 require.True(t, b.appendText([]byte("é€")))
14 require.Equal(t, 3, b.Len())
15 require.Equal(t, []byte("aé€"), b.Bytes())
16
17 require.True(t, b.backspace()) // one code point, not one byte
18 require.Equal(t, 2, b.Len())
19 require.Equal(t, []byte("aé"), b.Bytes())
20 require.Equal(t, make([]byte, 3), storage[3:6], "removed bytes are wiped")
21
22 require.False(t, b.appendText([]byte("xyz")), "does not fit: nothing changes")
23 require.Equal(t, []byte("aé"), b.Bytes())
24 require.True(t, b.appendText([]byte("xy")))
25 require.False(t, b.appendText([]byte("z")), "full")
26
27 b.Wipe()
28 require.Zero(t, b.Len())
29 require.Empty(t, b.Bytes())
30 require.Equal(t, make([]byte, len(storage)), storage, "whole storage zeroed")
31 require.False(t, b.backspace())
32}
33
34func TestSecretBufferCapacityClampAndNil(t *testing.T) {
35 require.Equal(t, 1, NewSecretBuffer(-5).max)
36 require.Equal(t, 1, NewSecretBuffer(0).max)
37 require.Equal(t, maxSecretCapacity, NewSecretBuffer(1<<20).max)
38 var b *SecretBuffer
39 require.Zero(t, b.Len())
40 require.Nil(t, b.Bytes())
41 b.Wipe()
42}
43
44func TestClassifySecretText(t *testing.T) {
45 for _, ok := range []string{"a", "é", "€", " ", "日本"} {
46 require.True(t, classifySecretText([]byte(ok)), ok)
47 }
48 for _, bad := range [][]byte{nil, {}, {'\r'}, {0x1b}, {0x7f}, {'a', '\n'}, {0xff}, {0xc3}} {
49 require.False(t, classifySecretText(bad), "%q", bad)
50 }
51}