1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
package shm
import (
"crypto/rand"
"errors"
"fmt"
"io/fs"
"os"
"reflect"
"testing"
)
var _ = fmt.Print
func TestSHM(t *testing.T) {
data := make([]byte, 13347)
_, _ = rand.Read(data)
mm, err := CreateTemp("test-kitty-shm-", uint64(len(data)))
if err != nil {
t.Fatal(err)
}
copy(mm.Slice(), data)
err = mm.Flush()
if err != nil {
t.Fatalf("Failed to msync() with error: %v", err)
}
err = mm.Close()
if err != nil {
t.Fatalf("Failed to close with error: %v", err)
}
g, err := Open(mm.Name(), uint64(len(data)))
if err != nil {
t.Fatal(err)
}
data2 := g.Slice()
if !reflect.DeepEqual(data, data2) {
t.Fatalf("Could not read back written data: Written data length: %d Read data length: %d", len(data), len(data2))
}
err = g.Close()
if err != nil {
t.Fatalf("Failed to close with error: %v", err)
}
err = g.Unlink()
if err != nil {
t.Fatalf("Failed to unlink with error: %v", err)
}
g, err = Open(mm.Name(), uint64(len(data)))
if err == nil {
t.Fatalf("Unlinking failed could re-open the SHM data. Data equal: %v Data length: %d", reflect.DeepEqual(g.Slice(), data), len(g.Slice()))
}
if mm.IsFileSystemBacked() {
_, err = os.Stat(mm.FileSystemName())
if !errors.Is(err, fs.ErrNotExist) {
t.Fatalf("Unlinking %s did not work", mm.Name())
}
}
}
|