github.com/SmartMeshFoundation/Spectrum@v0.0.0-20220621030607-452a266fee1e/swarm/storage/dbstore_test.go (about) 1 // Copyright 2016 The Spectrum Authors 2 // This file is part of the Spectrum library. 3 // 4 // The Spectrum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The Spectrum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the Spectrum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package storage 18 19 import ( 20 "bytes" 21 "io/ioutil" 22 "testing" 23 24 "github.com/SmartMeshFoundation/Spectrum/common" 25 ) 26 27 func initDbStore(t *testing.T) *DbStore { 28 dir, err := ioutil.TempDir("", "bzz-storage-test") 29 if err != nil { 30 t.Fatal(err) 31 } 32 m, err := NewDbStore(dir, MakeHashFunc(SHA3Hash), defaultDbCapacity, defaultRadius) 33 if err != nil { 34 t.Fatal("can't create store:", err) 35 } 36 return m 37 } 38 39 func testDbStore(l int64, branches int64, t *testing.T) { 40 m := initDbStore(t) 41 defer m.Close() 42 testStore(m, l, branches, t) 43 } 44 45 func TestDbStore128_0x1000000(t *testing.T) { 46 testDbStore(0x1000000, 128, t) 47 } 48 49 func TestDbStore128_10000_(t *testing.T) { 50 testDbStore(10000, 128, t) 51 } 52 53 func TestDbStore128_1000_(t *testing.T) { 54 testDbStore(1000, 128, t) 55 } 56 57 func TestDbStore128_100_(t *testing.T) { 58 testDbStore(100, 128, t) 59 } 60 61 func TestDbStore2_100_(t *testing.T) { 62 testDbStore(100, 2, t) 63 } 64 65 func TestDbStoreNotFound(t *testing.T) { 66 m := initDbStore(t) 67 defer m.Close() 68 _, err := m.Get(ZeroKey) 69 if err != notFound { 70 t.Errorf("Expected notFound, got %v", err) 71 } 72 } 73 74 func TestDbStoreSyncIterator(t *testing.T) { 75 m := initDbStore(t) 76 defer m.Close() 77 keys := []Key{ 78 Key(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000000")), 79 Key(common.Hex2Bytes("4000000000000000000000000000000000000000000000000000000000000000")), 80 Key(common.Hex2Bytes("5000000000000000000000000000000000000000000000000000000000000000")), 81 Key(common.Hex2Bytes("3000000000000000000000000000000000000000000000000000000000000000")), 82 Key(common.Hex2Bytes("2000000000000000000000000000000000000000000000000000000000000000")), 83 Key(common.Hex2Bytes("1000000000000000000000000000000000000000000000000000000000000000")), 84 } 85 for _, key := range keys { 86 m.Put(NewChunk(key, nil)) 87 } 88 it, err := m.NewSyncIterator(DbSyncState{ 89 Start: Key(common.Hex2Bytes("1000000000000000000000000000000000000000000000000000000000000000")), 90 Stop: Key(common.Hex2Bytes("4000000000000000000000000000000000000000000000000000000000000000")), 91 First: 2, 92 Last: 4, 93 }) 94 if err != nil { 95 t.Fatalf("unexpected error creating NewSyncIterator") 96 } 97 98 var chunk Key 99 var res []Key 100 for { 101 chunk = it.Next() 102 if chunk == nil { 103 break 104 } 105 res = append(res, chunk) 106 } 107 if len(res) != 1 { 108 t.Fatalf("Expected 1 chunk, got %v: %v", len(res), res) 109 } 110 if !bytes.Equal(res[0][:], keys[3]) { 111 t.Fatalf("Expected %v chunk, got %v", keys[3], res[0]) 112 } 113 114 if err != nil { 115 t.Fatalf("unexpected error creating NewSyncIterator") 116 } 117 118 it, err = m.NewSyncIterator(DbSyncState{ 119 Start: Key(common.Hex2Bytes("1000000000000000000000000000000000000000000000000000000000000000")), 120 Stop: Key(common.Hex2Bytes("5000000000000000000000000000000000000000000000000000000000000000")), 121 First: 2, 122 Last: 4, 123 }) 124 125 res = nil 126 for { 127 chunk = it.Next() 128 if chunk == nil { 129 break 130 } 131 res = append(res, chunk) 132 } 133 if len(res) != 2 { 134 t.Fatalf("Expected 2 chunk, got %v: %v", len(res), res) 135 } 136 if !bytes.Equal(res[0][:], keys[3]) { 137 t.Fatalf("Expected %v chunk, got %v", keys[3], res[0]) 138 } 139 if !bytes.Equal(res[1][:], keys[2]) { 140 t.Fatalf("Expected %v chunk, got %v", keys[2], res[1]) 141 } 142 143 if err != nil { 144 t.Fatalf("unexpected error creating NewSyncIterator") 145 } 146 147 it, _ = m.NewSyncIterator(DbSyncState{ 148 Start: Key(common.Hex2Bytes("1000000000000000000000000000000000000000000000000000000000000000")), 149 Stop: Key(common.Hex2Bytes("4000000000000000000000000000000000000000000000000000000000000000")), 150 First: 2, 151 Last: 5, 152 }) 153 res = nil 154 for { 155 chunk = it.Next() 156 if chunk == nil { 157 break 158 } 159 res = append(res, chunk) 160 } 161 if len(res) != 2 { 162 t.Fatalf("Expected 2 chunk, got %v", len(res)) 163 } 164 if !bytes.Equal(res[0][:], keys[4]) { 165 t.Fatalf("Expected %v chunk, got %v", keys[4], res[0]) 166 } 167 if !bytes.Equal(res[1][:], keys[3]) { 168 t.Fatalf("Expected %v chunk, got %v", keys[3], res[1]) 169 } 170 171 it, _ = m.NewSyncIterator(DbSyncState{ 172 Start: Key(common.Hex2Bytes("2000000000000000000000000000000000000000000000000000000000000000")), 173 Stop: Key(common.Hex2Bytes("4000000000000000000000000000000000000000000000000000000000000000")), 174 First: 2, 175 Last: 5, 176 }) 177 res = nil 178 for { 179 chunk = it.Next() 180 if chunk == nil { 181 break 182 } 183 res = append(res, chunk) 184 } 185 if len(res) != 1 { 186 t.Fatalf("Expected 1 chunk, got %v", len(res)) 187 } 188 if !bytes.Equal(res[0][:], keys[3]) { 189 t.Fatalf("Expected %v chunk, got %v", keys[3], res[0]) 190 } 191 }