mirror of
https://github.com/trezor/blockbook.git
synced 2026-02-19 16:31:19 +01:00
177 lines
3.6 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|