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  }