|
1 | 1 | package store |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "context" |
5 | 6 | "encoding/binary" |
6 | 7 | "strconv" |
@@ -205,6 +206,46 @@ func TestRbMemoryStore_Txn(t *testing.T) { |
205 | 206 | }) |
206 | 207 | } |
207 | 208 |
|
| 209 | +func TestRbMemoryStore_SnapshotChecksum(t *testing.T) { |
| 210 | + t.Parallel() |
| 211 | + |
| 212 | + t.Run("success", func(t *testing.T) { |
| 213 | + t.Parallel() |
| 214 | + ctx := context.Background() |
| 215 | + st := NewRbMemoryStore() |
| 216 | + assert.NoError(t, st.Put(ctx, []byte("foo"), []byte("bar"))) |
| 217 | + |
| 218 | + buf, err := st.Snapshot() |
| 219 | + assert.NoError(t, err) |
| 220 | + |
| 221 | + st2 := NewRbMemoryStore() |
| 222 | + err = st2.Restore(bytes.NewReader(buf.(*bytes.Buffer).Bytes())) |
| 223 | + assert.NoError(t, err) |
| 224 | + |
| 225 | + v, err := st2.Get(ctx, []byte("foo")) |
| 226 | + assert.NoError(t, err) |
| 227 | + assert.Equal(t, []byte("bar"), v) |
| 228 | + }) |
| 229 | + |
| 230 | + t.Run("corrupted", func(t *testing.T) { |
| 231 | + t.Parallel() |
| 232 | + ctx := context.Background() |
| 233 | + st := NewRbMemoryStore() |
| 234 | + assert.NoError(t, st.Put(ctx, []byte("foo"), []byte("bar"))) |
| 235 | + |
| 236 | + buf, err := st.Snapshot() |
| 237 | + assert.NoError(t, err) |
| 238 | + data := buf.(*bytes.Buffer).Bytes() |
| 239 | + corrupted := make([]byte, len(data)) |
| 240 | + copy(corrupted, data) |
| 241 | + corrupted[0] ^= 0xff |
| 242 | + |
| 243 | + st2 := NewRbMemoryStore() |
| 244 | + err = st2.Restore(bytes.NewReader(corrupted)) |
| 245 | + assert.ErrorIs(t, err, ErrInvalidChecksum) |
| 246 | + }) |
| 247 | +} |
| 248 | + |
208 | 249 | func TestRbMemoryStore_TTL(t *testing.T) { |
209 | 250 | ctx := context.Background() |
210 | 251 | t.Parallel() |
|
0 commit comments