| 139 | } |
| 140 | |
| 141 | func TestStoreReduceSize(t *testing.T) { |
| 142 | tmpf, err := os.CreateTemp("", "lfstest3") |
| 143 | assert.Nil(t, err) |
| 144 | filename := tmpf.Name() |
| 145 | defer os.Remove(filename) |
| 146 | tmpf.Close() |
| 147 | |
| 148 | kvs, err := NewStore(filename) |
| 149 | assert.Nil(t, err) |
| 150 | |
| 151 | kvs.Set("key1", "I woke up in a Soho doorway") |
| 152 | kvs.Set("key2", "A policeman knew my name") |
| 153 | kvs.Set("key3", "He said 'You can go sleep at home tonight") |
| 154 | kvs.Set("key4", "If you can get up and walk away'") |
| 155 | |
| 156 | assert.NotNil(t, kvs.Get("key1")) |
| 157 | assert.NotNil(t, kvs.Get("key2")) |
| 158 | assert.NotNil(t, kvs.Get("key3")) |
| 159 | assert.NotNil(t, kvs.Get("key4")) |
| 160 | |
| 161 | assert.Nil(t, kvs.Save()) |
| 162 | |
| 163 | stat1, _ := os.Stat(filename) |
| 164 | |
| 165 | // Remove all but 1 key & save smaller version |
| 166 | kvs.Remove("key2") |
| 167 | kvs.Remove("key3") |
| 168 | kvs.Remove("key4") |
| 169 | assert.Nil(t, kvs.Save()) |
| 170 | |
| 171 | // Now reload fresh & prove works |
| 172 | kvs = nil |
| 173 | |
| 174 | kvs, err = NewStore(filename) |
| 175 | assert.Nil(t, err) |
| 176 | assert.NotNil(t, kvs.Get("key1")) |
| 177 | assert.Nil(t, kvs.Get("key2")) |
| 178 | assert.Nil(t, kvs.Get("key3")) |
| 179 | assert.Nil(t, kvs.Get("key4")) |
| 180 | |
| 181 | stat2, _ := os.Stat(filename) |
| 182 | |
| 183 | assert.True(t, stat2.Size() < stat1.Size(), "Size should have reduced, was %d now %d", stat1.Size(), stat2.Size()) |
| 184 | |
| 185 | } |