blockbook/bchain/coins/nuls/nulsparser_test.go
kiss1987f4 954619efe9 Add NULS supported. (#135)
Add NULS supported.
2019-03-28 14:44:40 +01:00

344 lines
10 KiB
Go

package nuls
import (
"blockbook/bchain"
"blockbook/bchain/coins/btc"
"encoding/hex"
"encoding/json"
"math/big"
"reflect"
"testing"
)
var (
testTx1, testTx2 bchain.Tx
testTxPacked1 = "0001e240daadfbe7931e000000007b22686578223a22222c2274786964223a223030323036626231323431303861356664393865383238623138316666303162393237633063366234373764343531326266656638346366353266306663326136613161222c2276657273696f6e223a312c226c6f636b74696d65223a302c2276696e223a5b7b22636f696e62617365223a22222c2274786964223a223030323035343537616230373033623164313034363264343334373034386330626233353634653430663537616531663632353136393539343364653161633831306130222c22766f7574223a302c22736372697074536967223a7b22686578223a22227d2c2273657175656e6365223a302c22616464726573736573223a5b224e736535334d77524c424a31575555365365644d485141466643507442377734225d7d5d2c22766f7574223a5b7b2256616c7565536174223a3339393939393030303030302c2276616c7565223a302c226e223a302c227363726970745075624b6579223a7b22686578223a224e7365347a705a4873557555376835796d7632387063476277486a75336a6f56222c22616464726573736573223a5b224e7365347a705a4873557555376835796d7632387063476277486a75336a6f56225d7d7d5d2c22626c6f636b74696d65223a313535323335373834343137357d"
testTxPacked2 = "0007c91adaadfbb89946000000007b22686578223a22222c2274786964223a223030323037386139386633383163373134613036386436303565346265316565323139353438353736313165303938616262636333663530633536383066386164326535222c2276657273696f6e223a312c226c6f636b74696d65223a302c2276696e223a5b7b22636f696e62617365223a22222c2274786964223a223030323037613430646334623661633430376434396133633333616137353462623466303565343565353763323438313162313437653762663363616630363361383233222c22766f7574223a312c22736372697074536967223a7b22686578223a22227d2c2273657175656e6365223a302c22616464726573736573223a5b224e73653131397a326f53444a596b466b786d775944695974506642654e6b7169225d7d5d2c22766f7574223a5b7b2256616c7565536174223a3430303030303030303030302c2276616c7565223a302c226e223a302c227363726970745075624b6579223a7b22686578223a224e736534696b6a45383867324267734e7773737754646b53776953724b6a6a53222c22616464726573736573223a5b224e736534696b6a45383867324267734e7773737754646b53776953724b6a6a53225d7d7d2c7b2256616c7565536174223a373238363536353537303030302c2276616c7565223a302c226e223a312c227363726970745075624b6579223a7b22686578223a224e73653131397a326f53444a596b466b786d775944695974506642654e6b7169222c22616464726573736573223a5b224e73653131397a326f53444a596b466b786d775944695974506642654e6b7169225d7d7d5d2c22626c6f636b74696d65223a313535323335373435393535357d"
)
func init() {
testTx1 = bchain.Tx{
Hex: "",
Blocktime: 1552357844175,
Txid: "00206bb124108a5fd98e828b181ff01b927c0c6b477d4512bfef84cf52f0fc2a6a1a",
LockTime: 0,
Version: 1,
Vin: []bchain.Vin{
{
Txid: "00205457ab0703b1d10462d4347048c0bb3564e40f57ae1f6251695943de1ac810a0",
Vout: 0,
Sequence: 0,
Addresses: []string{
"Nse53MwRLBJ1WUU6SedMHQAFfCPtB7w4",
},
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(399999000000),
N: 0,
JsonValue: json.Number("0"),
ScriptPubKey: bchain.ScriptPubKey{
Hex: "Nse4zpZHsUuU7h5ymv28pcGbwHju3joV",
Addresses: []string{
"Nse4zpZHsUuU7h5ymv28pcGbwHju3joV",
},
},
},
},
//CoinSpecificData: []string{},
}
testTx2 = bchain.Tx{
Hex: "",
Blocktime: 1552357459555,
Txid: "002078a98f381c714a068d605e4be1ee21954857611e098abbcc3f50c5680f8ad2e5",
LockTime: 0,
Version: 1,
Vin: []bchain.Vin{
{
Txid: "00207a40dc4b6ac407d49a3c33aa754bb4f05e45e57c24811b147e7bf3caf063a823",
Vout: 1,
Sequence: 0,
Addresses: []string{
"Nse119z2oSDJYkFkxmwYDiYtPfBeNkqi",
},
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(400000000000),
N: 0,
JsonValue: json.Number("0"),
ScriptPubKey: bchain.ScriptPubKey{
Hex: "Nse4ikjE88g2BgsNwsswTdkSwiSrKjjS",
Addresses: []string{
"Nse4ikjE88g2BgsNwsswTdkSwiSrKjjS",
},
},
},
{
ValueSat: *big.NewInt(7286565570000),
N: 1,
JsonValue: json.Number("0"),
ScriptPubKey: bchain.ScriptPubKey{
Hex: "Nse119z2oSDJYkFkxmwYDiYtPfBeNkqi",
Addresses: []string{
"Nse119z2oSDJYkFkxmwYDiYtPfBeNkqi",
},
},
},
},
//CoinSpecificData: []string{},
}
}
func TestGetAddrDescFromAddress(t *testing.T) {
type args struct {
address string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "P2PKH",
args: args{address: "Nse4j39uEMuxx5j577h3K2MDLAQ64JZN"},
want: "042301ac78cd3eb193287e2c59e4cbd765c5c47d432c2fa1",
wantErr: false,
},
{
name: "P2PKH",
args: args{address: "Nse2e7U7nmGT8UHsvQ7JfksLtWwoLwrd"},
want: "0423018a90e66a64318f6af6d673487a6560f5686fd26a2e",
wantErr: false,
},
{
name: "P2PKH",
args: args{address: "NsdvMEP57nzxmBa5z18rx9sQsLgUfNtw"},
want: "04230124422cfe426573e476fd45d7c2a43a75a0b6b8c478",
wantErr: false,
},
}
parser := NewNulsParser(GetChainParams("main"), &btc.Configuration{})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parser.GetAddrDescFromAddress(tt.args.address)
if (err != nil) != tt.wantErr {
t.Errorf("GetAddrDescFromAddress() error = %v, wantErr %v", err, tt.wantErr)
return
}
h := hex.EncodeToString(got)
if !reflect.DeepEqual(h, tt.want) {
t.Errorf("GetAddrDescFromAddress() = %v, want %v", h, tt.want)
}
})
}
}
func TestGetAddrDescFromVout(t *testing.T) {
type args struct {
vout bchain.Vout
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "P2PK",
args: args{vout: bchain.Vout{ScriptPubKey: bchain.ScriptPubKey{Hex: "Nse4j39uEMuxx5j577h3K2MDLAQ64JZN"}}},
want: "042301ac78cd3eb193287e2c59e4cbd765c5c47d432c2fa1",
wantErr: false,
},
{
name: "P2PK",
args: args{vout: bchain.Vout{ScriptPubKey: bchain.ScriptPubKey{Hex: "Nse2e7U7nmGT8UHsvQ7JfksLtWwoLwrd"}}},
want: "0423018a90e66a64318f6af6d673487a6560f5686fd26a2e",
wantErr: false,
},
{
name: "P2PK",
args: args{vout: bchain.Vout{ScriptPubKey: bchain.ScriptPubKey{Hex: "NsdvMEP57nzxmBa5z18rx9sQsLgUfNtw"}}},
want: "04230124422cfe426573e476fd45d7c2a43a75a0b6b8c478",
wantErr: false,
},
}
parser := NewNulsParser(GetChainParams("main"), &btc.Configuration{})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parser.GetAddrDescFromVout(&tt.args.vout)
if (err != nil) != tt.wantErr {
t.Errorf("GetAddrDescFromVout() error = %v, wantErr %v", err, tt.wantErr)
return
}
h := hex.EncodeToString(got)
if !reflect.DeepEqual(h, tt.want) {
t.Errorf("GetAddrDescFromVout() = %v, want %v", h, tt.want)
}
})
}
}
func TestGetAddressesFromAddrDesc(t *testing.T) {
type args struct {
script string
}
tests := []struct {
name string
args args
want []string
want2 bool
wantErr bool
}{
{
name: "P2PKH",
args: args{script: "042301ac78cd3eb193287e2c59e4cbd765c5c47d432c2fa1"},
want: []string{"Nse4j39uEMuxx5j577h3K2MDLAQ64JZN"},
want2: true,
wantErr: false,
},
{
name: "P2PKH",
args: args{script: "0423018a90e66a64318f6af6d673487a6560f5686fd26a2e"},
want: []string{"Nse2e7U7nmGT8UHsvQ7JfksLtWwoLwrd"},
want2: true,
wantErr: false,
},
{
name: "P2PKH",
args: args{script: "04230124422cfe426573e476fd45d7c2a43a75a0b6b8c478"},
want: []string{"NsdvMEP57nzxmBa5z18rx9sQsLgUfNtw"},
want2: true,
wantErr: false,
},
}
parser := NewNulsParser(GetChainParams("main"), &btc.Configuration{})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b, _ := hex.DecodeString(tt.args.script)
got, got2, err := parser.GetAddressesFromAddrDesc(b)
if (err != nil) != tt.wantErr {
t.Errorf("GetAddressesFromAddrDesc() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetAddressesFromAddrDesc() = %v, want %v", got, tt.want)
}
if !reflect.DeepEqual(got2, tt.want2) {
t.Errorf("GetAddressesFromAddrDesc() = %v, want %v", got2, tt.want2)
}
})
}
}
func TestPackTx(t *testing.T) {
type args struct {
tx bchain.Tx
height uint32
blockTime int64
parser *NulsParser
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "test-1",
args: args{
tx: testTx1,
height: 123456,
blockTime: 1552357844175,
parser: NewNulsParser(GetChainParams("main"), &btc.Configuration{}),
},
want: testTxPacked1,
wantErr: false,
},
{
name: "test-2",
args: args{
tx: testTx2,
height: 510234,
blockTime: 1552357459555,
parser: NewNulsParser(GetChainParams("main"), &btc.Configuration{}),
},
want: testTxPacked2,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.args.parser.PackTx(&tt.args.tx, tt.args.height, tt.args.blockTime)
if (err != nil) != tt.wantErr {
t.Errorf("packTx() error = %v, wantErr %v", err, tt.wantErr)
return
}
h := hex.EncodeToString(got)
if !reflect.DeepEqual(h, tt.want) {
t.Errorf("packTx() = %v, want %v", h, tt.want)
}
})
}
}
func TestUnpackTx(t *testing.T) {
type args struct {
packedTx string
parser *NulsParser
}
tests := []struct {
name string
args args
want *bchain.Tx
want1 uint32
wantErr bool
}{
{
name: "test-1",
args: args{
packedTx: testTxPacked1,
parser: NewNulsParser(GetChainParams("main"), &btc.Configuration{}),
},
want: &testTx1,
want1: 123456,
wantErr: false,
},
{
name: "test-2",
args: args{
packedTx: testTxPacked2,
parser: NewNulsParser(GetChainParams("main"), &btc.Configuration{}),
},
want: &testTx2,
want1: 510234,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b, _ := hex.DecodeString(tt.args.packedTx)
got, got1, err := tt.args.parser.UnpackTx(b)
if (err != nil) != tt.wantErr {
t.Errorf("unpackTx() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("unpackTx() got = %+v, want %+v", got, tt.want)
}
if got1 != tt.want1 {
t.Errorf("unpackTx() got1 = %v, want %v", got1, tt.want1)
}
})
}
}