github.com/nutsdb/nutsdb@v1.0.4/recovery_reader_test.go (about) 1 package nutsdb 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "github.com/stretchr/testify/require" 6 "os" 7 "testing" 8 ) 9 10 func Test_readEntry(t *testing.T) { 11 path := "/tmp/test_read_entry" 12 13 fd, err := os.OpenFile(path, os.O_TRUNC|os.O_CREATE|os.O_RDWR, os.ModePerm) 14 require.NoError(t, err) 15 meta := NewMetaData().WithKeySize(uint32(len("key"))). 16 WithValueSize(uint32(len("val"))).WithTimeStamp(1547707905). 17 WithTTL(Persistent).WithFlag(DataSetFlag).WithBucketId(1) 18 19 expect := NewEntry().WithKey([]byte("key")).WithMeta(meta).WithValue([]byte("val")) 20 21 _, err = fd.Write(expect.Encode()) 22 require.NoError(t, err) 23 24 f, err := newFileRecovery(path, 4096) 25 require.NoError(t, err) 26 27 entry, err := f.readEntry(0) 28 require.NoError(t, err) 29 30 assert.Equal(t, expect.Encode(), entry.Encode()) 31 32 err = fd.Close() 33 require.NoError(t, err) 34 35 } 36 37 func Test_fileRecovery_readBucket(t *testing.T) { 38 filePath := "bucket_test_data" 39 bucket := &Bucket{ 40 Meta: &BucketMeta{ 41 Op: BucketInsertOperation, 42 }, 43 Id: 1, 44 Ds: DataStructureBTree, 45 Name: "bucket_1", 46 } 47 bytes := bucket.Encode() 48 49 fd, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, os.ModePerm) 50 defer func() { 51 err = fd.Close() 52 assert.Nil(t, err) 53 err = os.Remove(filePath) 54 assert.Nil(t, nil) 55 }() 56 assert.Nil(t, err) 57 _, err = fd.Write(bytes) 58 assert.Nil(t, err) 59 60 fr, err := newFileRecovery(filePath, 4*MB) 61 assert.Nil(t, err) 62 readBucket, err := fr.readBucket() 63 assert.Nil(t, err) 64 assert.Equal(t, readBucket.Meta.Op, BucketInsertOperation) 65 assert.Equal(t, int64(8+2+8), int64(readBucket.Meta.Size)) 66 assert.Equal(t, BucketId(1), readBucket.Id) 67 assert.Equal(t, readBucket.Name, "bucket_1") 68 }