mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-20 03:35:55 +00:00
Implement snapshot import cmd `clio_snapshot --server --grpc_server 0.0.0.0:12345 --path <snapshot_path>` Implement snapshot range cmd `./clio_snapshot --range --path <snapshot_path>` Add LedgerHouses: It is responsible for reading/writing snapshot data Server: Start grpc server and ws server
189 lines
4.8 KiB
Go
189 lines
4.8 KiB
Go
package ledgers
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
pb "xrplf/clio/clio_snapshot/org/xrpl/rpc/v1"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCheckPath(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
path string
|
|
}{
|
|
{"Path", "test/d.dat"},
|
|
{"NestedPath", "test/test/d.dat"}}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := checkPath(tt.path)
|
|
assert.NoError(t, err)
|
|
dir := filepath.Dir(tt.path)
|
|
defer os.RemoveAll("test")
|
|
_, err = os.Stat(dir)
|
|
assert.False(t, os.IsNotExist(err))
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
func TestRoundDown(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in1 uint32
|
|
in2 uint32
|
|
out uint32
|
|
}{
|
|
{"RoundDownToZero", 10, 0, 10},
|
|
{"RoundDown12To10", 12, 10, 10},
|
|
{"RoundDownToOne", 13, 1, 13},
|
|
{"RoundDown100", 103, 100, 100},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
assert.Equal(t, roundDown(tt.in1, tt.in2), tt.out)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConvertInnerMarkerToMarker(t *testing.T) {
|
|
|
|
tests := []struct {
|
|
name string
|
|
in []byte
|
|
out []byte
|
|
}{
|
|
{"SingleByte", []byte{0x01}, []byte{0x00}},
|
|
{"MultipleBytes", []byte{0x01, 0x02, 0x03}, []byte{0x00, 0x00, 0x00}},
|
|
{"MultipleBytes2", []byte{0xf1, 0x02, 0x03}, []byte{0xf0, 0x00, 0x00}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
assert.Equal(t, convertInnerMarkerToMarker(tt.in), tt.out)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLedgersHouseGetDeltaPath(t *testing.T) {
|
|
lh := NewLedgersHouse("testdata")
|
|
assert.Equal(t, lh.deltaDataPath(12345), "testdata/ledger_diff_10000/12345.dat")
|
|
|
|
assert.Equal(t, lh.deltaDataPath(3), "testdata/ledger_diff_0/3.dat")
|
|
|
|
assert.Equal(t, lh.deltaDataPath(0), "testdata/ledger_diff_0/0.dat")
|
|
}
|
|
|
|
func TestLedgersHouseGetFullDataPath(t *testing.T) {
|
|
lh := NewLedgersHouse("testdata")
|
|
assert.Equal(t, lh.fullDataPath(12345, "fffff", "ababab"), "testdata/ledger_data_12345/marker_fffff/ababab.dat")
|
|
}
|
|
|
|
func TestLedgerHouseLedgerDeltaData(t *testing.T) {
|
|
defer os.RemoveAll("testdata")
|
|
lh := NewLedgersHouse("testdata")
|
|
data, err := lh.ReadLedgerDeltaData(12345)
|
|
assert.True(t, data == nil)
|
|
assert.True(t, err != nil)
|
|
|
|
lh.WriteLedgerDeltaData(12345, &pb.GetLedgerResponse{})
|
|
data, err = lh.ReadLedgerDeltaData(12345)
|
|
assert.True(t, data != nil)
|
|
assert.True(t, err == nil)
|
|
}
|
|
|
|
func TestLedgerHouseInvalidLedgerDeltaPath(t *testing.T) {
|
|
lh := NewLedgersHouse("/etc")
|
|
data, err := lh.ReadLedgerDeltaData(12345)
|
|
assert.True(t, data == nil)
|
|
assert.True(t, err != nil)
|
|
|
|
err = lh.WriteLedgerDeltaData(12345, &pb.GetLedgerResponse{})
|
|
assert.True(t, err != nil)
|
|
}
|
|
|
|
func TestLedgerHouseLedgerData(t *testing.T) {
|
|
defer os.RemoveAll("testdata")
|
|
lh := NewLedgersHouse("testdata")
|
|
data, err := lh.ReadLedgerData(12345, []byte{0x01})
|
|
assert.True(t, data == nil)
|
|
assert.True(t, err != nil)
|
|
|
|
lh.WriteLedgerData(12345, []byte{0x01}, &pb.GetLedgerDataResponse{})
|
|
data, err = lh.ReadLedgerData(12345, []byte{0x01})
|
|
assert.True(t, data != nil)
|
|
assert.True(t, err == nil)
|
|
}
|
|
|
|
func TestLedgerHouseInvalidLedgerDataPath(t *testing.T) {
|
|
lh := NewLedgersHouse("/etc")
|
|
data, err := lh.ReadLedgerData(12345, []byte{0x01})
|
|
assert.True(t, data == nil)
|
|
assert.True(t, err != nil)
|
|
|
|
err = lh.WriteLedgerData(12345, []byte{0x01}, &pb.GetLedgerDataResponse{})
|
|
assert.True(t, err != nil)
|
|
}
|
|
|
|
func TestLedgersHouseManifest(t *testing.T) {
|
|
|
|
defer os.RemoveAll("testdata")
|
|
|
|
lh := NewLedgersHouse("testdata")
|
|
startSeq, endSeq, err := lh.GetRange()
|
|
assert.True(t, err != nil)
|
|
assert.Equal(t, startSeq, uint32(0))
|
|
assert.Equal(t, endSeq, uint32(0))
|
|
assert.False(t, lh.IsExist())
|
|
|
|
lh.SetRange(1, 100)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(100))
|
|
|
|
lh.AppendDeltaLedger(100, 200)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(200))
|
|
|
|
lh.AppendDeltaLedger(201, 300)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(300))
|
|
|
|
err = lh.AppendDeltaLedger(201, 100)
|
|
assert.True(t, err != nil)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(300))
|
|
|
|
err = lh.AppendDeltaLedger(302, 350)
|
|
assert.True(t, err != nil)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(300))
|
|
|
|
err = lh.AppendDeltaLedger(0, 350)
|
|
assert.True(t, err != nil)
|
|
assert.True(t, lh.IsExist())
|
|
startSeq, endSeq, err = lh.GetRange()
|
|
assert.True(t, err == nil)
|
|
assert.Equal(t, startSeq, uint32(1))
|
|
assert.Equal(t, endSeq, uint32(300))
|
|
|
|
}
|