Files
clio/tools/snapshot/internal/ledgers/ledgers_test.go
cyan317 f454076fb6 feat: Snapshot import feature (#1970)
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
2025-03-26 09:11:15 +00:00

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))
}