mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
* ttl support first commit * imports fix * put api args correction * put options added * upgrade method added * upgrade log added * v0 to v1 migration script added * error assertion added * temp migration dir fix Co-authored-by: yash <yash.chandra@grabpay.com>
59 lines
2.0 KiB
Go
59 lines
2.0 KiB
Go
package migrations
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_ApplyV0ToV1(t *testing.T) {
|
|
assert := assert.New(t)
|
|
testdir, err := ioutil.TempDir("/tmp", "bitcask")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(testdir)
|
|
w0, err := os.OpenFile(filepath.Join(testdir, "000000000.data"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0640)
|
|
assert.NoError(err)
|
|
w1, err := os.OpenFile(filepath.Join(testdir, "000000001.data"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0640)
|
|
assert.NoError(err)
|
|
w2, err := os.OpenFile(filepath.Join(testdir, "000000002.data"), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0640)
|
|
assert.NoError(err)
|
|
defer w0.Close()
|
|
defer w1.Close()
|
|
defer w2.Close()
|
|
buf := make([]byte, 104)
|
|
binary.BigEndian.PutUint32(buf[:4], 5)
|
|
binary.BigEndian.PutUint64(buf[4:12], 7)
|
|
copy(buf[12:28], "mykeymyvalue0AAA")
|
|
binary.BigEndian.PutUint32(buf[28:32], 3)
|
|
binary.BigEndian.PutUint64(buf[32:40], 5)
|
|
copy(buf[40:52], "keyvalue0BBB")
|
|
_, err = w0.Write(buf[:52])
|
|
assert.NoError(err)
|
|
_, err = w1.Write(buf[:52])
|
|
assert.NoError(err)
|
|
_, err = w2.Write(buf[:52])
|
|
assert.NoError(err)
|
|
err = ApplyV0ToV1(testdir, 104)
|
|
assert.NoError(err)
|
|
r0, err := os.Open(filepath.Join(testdir, "000000000.data"))
|
|
assert.NoError(err)
|
|
defer r0.Close()
|
|
n, err := io.ReadFull(r0, buf)
|
|
assert.NoError(err)
|
|
assert.Equal(104, n)
|
|
assert.Equal("0000000500000000000000076d796b65796d7976616c75653041414100000000000000000000000300000000000000056b657976616c75653042424200000000000000000000000500000000000000076d796b65796d7976616c7565304141410000000000000000", hex.EncodeToString(buf))
|
|
r1, err := os.Open(filepath.Join(testdir, "000000001.data"))
|
|
assert.NoError(err)
|
|
defer r1.Close()
|
|
n, err = io.ReadFull(r1, buf[:100])
|
|
assert.NoError(err)
|
|
assert.Equal(100, n)
|
|
assert.Equal("0000000300000000000000056b657976616c75653042424200000000000000000000000500000000000000076d796b65796d7976616c75653041414100000000000000000000000300000000000000056b657976616c7565304242420000000000000000", hex.EncodeToString(buf[:100]))
|
|
}
|