github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/accounts/abi/bind/util_test.go (about) 1 package bind_test 2 3 import ( 4 "context" 5 "math/big" 6 "testing" 7 "time" 8 9 "github.com/quickchainproject/quickchain/accounts/abi/bind" 10 "github.com/quickchainproject/quickchain/accounts/abi/bind/backends" 11 "github.com/quickchainproject/quickchain/common" 12 "github.com/quickchainproject/quickchain/core" 13 "github.com/quickchainproject/quickchain/core/types" 14 "github.com/quickchainproject/quickchain/crypto" 15 ) 16 17 var testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") 18 19 var waitDeployedTests = map[string]struct { 20 code string 21 gas uint64 22 wantAddress common.Address 23 wantErr error 24 }{ 25 "successful deploy": { 26 code: `6060604052600a8060106000396000f360606040526008565b00`, 27 gas: 3000000, 28 wantAddress: common.HexToAddress("0x3a220f351252089d385b29beca14e27f204c296a"), 29 }, 30 "empty code": { 31 code: ``, 32 gas: 300000, 33 wantErr: bind.ErrNoCodeAfterDeploy, 34 wantAddress: common.HexToAddress("0x3a220f351252089d385b29beca14e27f204c296a"), 35 }, 36 } 37 38 func TestWaitDeployed(t *testing.T) { 39 for name, test := range waitDeployedTests { 40 backend := backends.NewSimulatedBackend(core.GenesisAlloc{ 41 crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000)}, 42 }) 43 44 // Create the transaction. 45 tx := types.NewContractCreation(0, big.NewInt(0), test.gas, big.NewInt(1), common.FromHex(test.code)) 46 tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) 47 48 // Wait for it to get mined in the background. 49 var ( 50 err error 51 address common.Address 52 mined = make(chan struct{}) 53 ctx = context.Background() 54 ) 55 go func() { 56 address, err = bind.WaitDeployed(ctx, backend, tx) 57 close(mined) 58 }() 59 60 // Send and mine the transaction. 61 backend.SendTransaction(ctx, tx) 62 backend.Commit() 63 64 select { 65 case <-mined: 66 if err != test.wantErr { 67 t.Errorf("test %q: error mismatch: got %q, want %q", name, err, test.wantErr) 68 } 69 if address != test.wantAddress { 70 t.Errorf("test %q: unexpected contract address %s", name, address.Hex()) 71 } 72 case <-time.After(2 * time.Second): 73 t.Errorf("test %q: timeout", name) 74 } 75 } 76 }