1 // Copyright (c) 2012, Suryandaru Triandana <syndtr@gmail.com>
2 // All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
16 var cases = []struct {
22 {nil, "000100.log", TypeJournal, 100},
23 {nil, "000000.log", TypeJournal, 0},
24 {[]string{"000000.sst"}, "000000.ldb", TypeTable, 0},
25 {nil, "MANIFEST-000002", TypeManifest, 2},
26 {nil, "MANIFEST-000007", TypeManifest, 7},
27 {nil, "9223372036854775807.log", TypeJournal, 9223372036854775807},
28 {nil, "000100.tmp", TypeTemp, 100},
31 var invalidCases = []string{
49 "18446744073709551616.log",
50 "184467440737095516150.log",
56 func TestFileStorage_CreateFileName(t *testing.T) {
57 for _, c := range cases {
58 if name := fsGenName(FileDesc{c.ftype, c.num}); name != c.name {
59 t.Errorf("invalid filename got '%s', want '%s'", name, c.name)
64 func TestFileStorage_ParseFileName(t *testing.T) {
65 for _, c := range cases {
66 for _, name := range append([]string{c.name}, c.oldName...) {
67 fd, ok := fsParseName(name)
69 t.Errorf("cannot parse filename '%s'", name)
72 if fd.Type != c.ftype {
73 t.Errorf("filename '%s' invalid type got '%d', want '%d'", name, fd.Type, c.ftype)
76 t.Errorf("filename '%s' invalid number got '%d', want '%d'", name, fd.Num, c.num)
82 func TestFileStorage_InvalidFileName(t *testing.T) {
83 for _, name := range invalidCases {
84 if fsParseNamePtr(name, nil) {
85 t.Errorf("filename '%s' should be invalid", name)
90 func TestFileStorage_Locking(t *testing.T) {
91 path := filepath.Join(os.TempDir(), fmt.Sprintf("goleveldb-testrwlock-%d", os.Getuid()))
92 if err := os.RemoveAll(path); err != nil && !os.IsNotExist(err) {
93 t.Fatal("RemoveAll: got error: ", err)
95 defer os.RemoveAll(path)
97 p1, err := OpenFile(path, false)
99 t.Fatal("OpenFile(1): got error: ", err)
102 p2, err := OpenFile(path, false)
104 t.Logf("OpenFile(2): got error: %s (expected)", err)
108 t.Fatal("OpenFile(2): expect error")
113 p3, err := OpenFile(path, false)
115 t.Fatal("OpenFile(3): got error: ", err)
121 t.Fatal("storage lock failed(1): ", err)
125 t.Fatal("expect error for second storage lock attempt")
127 t.Logf("storage lock got error: %s (expected)", err)
132 t.Fatal("storage lock failed(2): ", err)
136 func TestFileStorage_ReadOnlyLocking(t *testing.T) {
137 path := filepath.Join(os.TempDir(), fmt.Sprintf("goleveldb-testrolock-%d", os.Getuid()))
138 if err := os.RemoveAll(path); err != nil && !os.IsNotExist(err) {
139 t.Fatal("RemoveAll: got error: ", err)
141 defer os.RemoveAll(path)
143 p1, err := OpenFile(path, false)
145 t.Fatal("OpenFile(1): got error: ", err)
148 _, err = OpenFile(path, true)
150 t.Logf("OpenFile(2): got error: %s (expected)", err)
152 t.Fatal("OpenFile(2): expect error")
157 p3, err := OpenFile(path, true)
159 t.Fatal("OpenFile(3): got error: ", err)
162 p4, err := OpenFile(path, true)
164 t.Fatal("OpenFile(4): got error: ", err)
167 _, err = OpenFile(path, false)
169 t.Logf("OpenFile(5): got error: %s (expected)", err)
171 t.Fatal("OpenFile(2): expect error")