github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/mmap_test.go (about) 1 package util 2 3 import ( 4 "os" 5 "testing" 6 7 "syscall" 8 9 "gotest.tools/assert" 10 ) 11 12 func TestMmap(t *testing.T) { 13 fileName := "/tmp/test_util.txt" 14 os.Remove(fileName) 15 f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600) 16 assert.Assert(t, err == nil) 17 defer func() { 18 f.Close() 19 os.Remove(fileName) 20 }() 21 22 size := 64000 23 n, err := f.Write(make([]byte, size)) 24 assert.Assert(t, n == size && err == nil) 25 bytes, err := Mmap(f, true, int64(size)) 26 assert.Assert(t, err == nil && len(bytes) == size) 27 bytes[0] = 1 28 assert.Assert(t, MSync(bytes, 1, syscall.MS_SYNC) == nil) 29 assert.Assert(t, MSync(bytes, 1, syscall.MS_SYNC) == nil) // call twice is ok 30 assert.Assert(t, MLock(bytes, 1) == nil) 31 assert.Assert(t, MUnlock(bytes, 1) == nil) 32 err = Madvise(bytes, true) 33 assert.Assert(t, err == nil) 34 err = Madvise(bytes, false) 35 assert.Assert(t, err == nil) 36 err = Munmap(bytes) 37 assert.Assert(t, err == nil) 38 err = Madvise(bytes, false) 39 assert.Assert(t, err != nil) 40 err = Munmap(bytes) 41 assert.Assert(t, err != nil) 42 43 bytes = make([]byte, 10) 44 err = Munmap(bytes) 45 assert.Assert(t, err != nil) 46 47 }