-
Notifications
You must be signed in to change notification settings - Fork 0
/
point_test.go
113 lines (96 loc) · 2.25 KB
/
point_test.go
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package goutube
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
var (
write = []byte("hello world")
width = uint64(len(write))
)
func TestPointAppendRead(t *testing.T) {
f, err := ioutil.TempFile("", "point_close_test")
require.NoError(t, err)
defer os.Remove(f.Name())
fi, err := os.Stat(f.Name())
config := Config{}
config.Distributed.MaxChunkSize = width
p, err := newPoint(filepath.Dir(f.Name()), fi.Name(), config)
require.NoError(t, err)
testAppend(t, p)
testRead(t, p)
testReadAt(t, p)
p, err = newPoint(filepath.Dir(f.Name()), fi.Name(), config)
require.NoError(t, err)
testRead(t, p)
}
func testAppend(t *testing.T, p *Point) {
t.Helper()
for i := uint64(1); i < 4; i++ {
n, _, err := p.Append(write)
require.NoError(t, err)
require.Equal(t, n, width*i)
}
}
func testRead(t *testing.T, p *Point) {
t.Helper()
var pos uint64
for i := uint64(1); i < 4; i++ {
nextOffset, read, err := p.Read(pos, 0, 0)
require.NoError(t, err)
require.Equal(t, write, read)
pos += width
require.Equal(t, pos, nextOffset)
}
}
func testReadAt(t *testing.T, p *Point) {
t.Helper()
size := width
for i, off := uint64(1), uint64(0); i < 4; i++ {
b := make([]byte, size)
n, err := p.ReadAt(b, off)
require.NoError(t, err)
require.Equal(t, int(size), n)
off += uint64(n)
}
}
func TestPointOpenClose(t *testing.T) {
f, err := ioutil.TempFile("", "point_close_test")
require.NoError(t, err)
defer func(name string) {
err := os.Remove(name)
if err != nil {
}
}(f.Name())
fi, err := os.Stat(f.Name())
config := Config{}
config.Distributed.MaxChunkSize = 256
p, err := newPoint(filepath.Dir(f.Name()), fi.Name(), config)
require.NoError(t, err)
_, _, err = p.Append(write)
require.NoError(t, err)
f, beforeSize, err := openFile(f.Name())
require.NoError(t, err)
err = p.Close()
require.NoError(t, err)
_, afterSize, err := openFile(f.Name())
require.NoError(t, err)
require.True(t, afterSize >= beforeSize)
}
func openFile(name string) (file *os.File, size int64, err error) {
f, err := os.OpenFile(
name,
os.O_RDWR|os.O_CREATE|os.O_APPEND,
0644,
)
if err != nil {
return nil, 0, err
}
fi, err := f.Stat()
if err != nil {
return nil, 0, err
}
return f, fi.Size(), nil
}