OSDN Git Service

063d02abdd620b604ffec0a8f080743d2cbfd12b
[bytom/bytom.git] / test / integration / standard_transaction_test.go
1 package integration
2
3 import (
4         "io/ioutil"
5         "os"
6         "testing"
7
8         dbm "github.com/tendermint/tmlibs/db"
9
10         "github.com/bytom/blockchain/account"
11         "github.com/bytom/blockchain/pseudohsm"
12         "github.com/bytom/crypto/ed25519/chainkd"
13         "github.com/bytom/protocol/bc/legacy"
14         "github.com/bytom/protocol/validation"
15         "github.com/bytom/test"
16 )
17
18 func TestP2PKH(t *testing.T) {
19         dirPath, err := ioutil.TempDir(".", "")
20         if err != nil {
21                 t.Fatal(err)
22         }
23         defer os.RemoveAll(dirPath)
24
25         testDB := dbm.NewDB("testdb", "leveldb", "temp")
26         defer os.RemoveAll("temp")
27
28         chain, err := test.MockChain(testDB)
29         if err != nil {
30                 t.Fatal(err)
31         }
32
33         accountManager := account.NewManager(testDB, chain)
34         hsm, err := pseudohsm.New(dirPath)
35         if err != nil {
36                 t.Fatal(err)
37         }
38
39         xpub, err := hsm.XCreate("test_pub", "password")
40         if err != nil {
41                 t.Fatal(err)
42         }
43
44         testAccount, err := accountManager.Create(nil, []chainkd.XPub{xpub.XPub}, 1, "testAccount", nil)
45         if err != nil {
46                 t.Fatal(err)
47         }
48
49         controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
50         if err != nil {
51                 t.Fatal(err)
52         }
53
54         utxo := test.MockUTXO(controlProg)
55         tpl, tx, err := test.MockTx(utxo, testAccount)
56         if err != nil {
57                 t.Fatal(err)
58         }
59
60         if err := test.MockSign(tpl, hsm); err != nil {
61                 t.Fatal(err)
62         }
63
64         if _, _, err = validation.ValidateTx(legacy.MapTx(tx), test.MockBlock()); err != nil {
65                 t.Fatal(err)
66         }
67 }
68
69 func TestP2SH(t *testing.T) {
70         dirPath, err := ioutil.TempDir(".", "")
71         if err != nil {
72                 t.Fatal(err)
73         }
74         defer os.RemoveAll(dirPath)
75
76         testDB := dbm.NewDB("testdb", "leveldb", "temp")
77         defer os.RemoveAll("temp")
78
79         chain, err := test.MockChain(testDB)
80         if err != nil {
81                 t.Fatal(err)
82         }
83
84         accountManager := account.NewManager(testDB, chain)
85         hsm, err := pseudohsm.New(dirPath)
86         if err != nil {
87                 t.Fatal(err)
88         }
89
90         xpub1, err := hsm.XCreate("test_pub1", "password")
91         if err != nil {
92                 t.Fatal(err)
93         }
94
95         xpub2, err := hsm.XCreate("test_pub2", "password")
96         if err != nil {
97                 t.Fatal(err)
98         }
99
100         testAccount, err := accountManager.Create(nil, []chainkd.XPub{xpub1.XPub, xpub2.XPub}, 2, "testAccount", nil)
101         if err != nil {
102                 t.Fatal(err)
103         }
104
105         controlProg, err := accountManager.CreateAddress(nil, testAccount.ID, false)
106         if err != nil {
107                 t.Fatal(err)
108         }
109
110         utxo := test.MockUTXO(controlProg)
111         tpl, tx, err := test.MockTx(utxo, testAccount)
112         if err != nil {
113                 t.Fatal(err)
114         }
115
116         if err := test.MockSign(tpl, hsm); err != nil {
117                 t.Fatal(err)
118         }
119
120         if _, _, err = validation.ValidateTx(legacy.MapTx(tx), test.MockBlock()); err != nil {
121                 t.Fatal(err)
122         }
123 }