Files
blockbook/bchain/basemempool_test.go
2025-02-06 22:44:02 +01:00

177 lines
3.6 KiB
Go

package bchain
import (
reflect "reflect"
"strconv"
"testing"
)
func generateAddIndexes(count int) []addrIndex {
rv := make([]addrIndex, count)
for i := range count {
rv[i] = addrIndex{
addrDesc: "ad" + strconv.Itoa(i),
}
}
return rv
}
func generateTxEntries(count int, skipTx int) map[string]txEntry {
rv := make(map[string]txEntry)
for i := range count {
if i != skipTx {
tx := "tx" + strconv.Itoa(i)
rv[tx] = txEntry{
addrIndexes: generateAddIndexes(count),
}
}
}
return rv
}
func generateAddrDescToTx(count int, skipTx int) map[string][]Outpoint {
rv := make(map[string][]Outpoint)
for i := range count {
ad := "ad" + strconv.Itoa(i)
op := []Outpoint{}
for j := range count {
if j != skipTx {
tx := "tx" + strconv.Itoa(j)
op = append(op, Outpoint{
Txid: tx,
})
}
}
if len(op) > 0 {
rv[ad] = op
}
}
return rv
}
func TestBaseMempool_removeEntryFromMempool(t *testing.T) {
tests := []struct {
name string
m *BaseMempool
want *BaseMempool
txid string
entry txEntry
}{
{
name: "test1",
m: &BaseMempool{
txEntries: map[string]txEntry{
"tx1": {
addrIndexes: []addrIndex{{addrDesc: "ad1", n: 0}, {addrDesc: "ad1", n: 1}},
},
"tx2": {
addrIndexes: []addrIndex{{addrDesc: "ad1"}},
},
},
addrDescToTx: map[string][]Outpoint{
"ad1": {
{Txid: "tx1", Vout: 0},
{Txid: "tx1", Vout: 1},
{Txid: "tx2"},
},
},
},
want: &BaseMempool{
txEntries: map[string]txEntry{
"tx2": {
addrIndexes: []addrIndex{{addrDesc: "ad1"}},
},
},
addrDescToTx: map[string][]Outpoint{
"ad1": {{Txid: "tx2"}}},
},
txid: "tx1",
entry: txEntry{
addrIndexes: []addrIndex{
{addrDesc: "ad1"},
{addrDesc: "ad2"},
},
},
},
{
name: "test2",
m: &BaseMempool{
txEntries: map[string]txEntry{
"tx1": {
addrIndexes: []addrIndex{{addrDesc: "ad1"}, {addrDesc: "ad1", n: 1}},
},
},
addrDescToTx: map[string][]Outpoint{
"ad1": {
{Txid: "tx1", Vout: 0},
{Txid: "tx1", Vout: 1},
},
},
},
want: &BaseMempool{
txEntries: map[string]txEntry{},
addrDescToTx: map[string][]Outpoint{},
},
txid: "tx1",
entry: txEntry{
addrIndexes: []addrIndex{
{addrDesc: "ad1"},
},
},
},
{
name: "generated1",
m: &BaseMempool{
txEntries: generateTxEntries(1, -1),
addrDescToTx: generateAddrDescToTx(1, -1),
},
want: &BaseMempool{
txEntries: generateTxEntries(1, 0),
addrDescToTx: generateAddrDescToTx(1, 0),
},
txid: "tx0",
entry: txEntry{
addrIndexes: generateAddIndexes(1),
},
},
{
name: "generated2",
m: &BaseMempool{
txEntries: generateTxEntries(2, -1),
addrDescToTx: generateAddrDescToTx(2, -1),
},
want: &BaseMempool{
txEntries: generateTxEntries(2, 1),
addrDescToTx: generateAddrDescToTx(2, 1),
},
txid: "tx1",
entry: txEntry{
addrIndexes: generateAddIndexes(2),
},
},
{
name: "generated5000",
m: &BaseMempool{
txEntries: generateTxEntries(5000, -1),
addrDescToTx: generateAddrDescToTx(5000, -1),
},
want: &BaseMempool{
txEntries: generateTxEntries(5000, 2),
addrDescToTx: generateAddrDescToTx(5000, 2),
},
txid: "tx2",
entry: txEntry{
addrIndexes: generateAddIndexes(5000),
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.m.removeEntryFromMempool(tt.txid, tt.entry)
if !reflect.DeepEqual(tt.m, tt.want) {
t.Errorf("removeEntryFromMempool() got = %+v, want %+v", tt.m, tt.want)
}
})
}
}