mirror of https://github.com/poanetwork/quorum.git
144 lines
4.7 KiB
Go
144 lines
4.7 KiB
Go
package permissions
|
|
|
|
import (
|
|
"fmt"
|
|
"math/big"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/ethclient"
|
|
)
|
|
|
|
const key = `{"address":"ed9d02e382b34818e88b88a309c7fe71e65f419d","crypto":{"cipher":"aes-128-ctr","ciphertext":"4e77046ba3f699e744acb4a89c36a3ea1158a1bd90a076d36675f4c883864377","cipherparams":{"iv":"a8932af2a3c0225ee8e872bc0e462c11"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"8ca49552b3e92f79c51f2cd3d38dfc723412c212e702bd337a3724e8937aff0f"},"mac":"6d1354fef5aa0418389b1a5d1f5ee0050d7273292a1171c51fd02f9ecff55264"},"id":"a65d1ac3-db7e-445d-a1cc-b6c5eeaa05e0","version":3}`
|
|
|
|
//const enode1 = "ac6b1096ca56b9f6d004b779ae3728bf83f8e22453404cc3cef16a3d9b96608bc67c4b30db88e0a5a6c6390213f7acbe1153ff6d23ce57380104288ae19373ef"
|
|
const enode1 = "abhb1096ca56b9f6d004b779ae3728bf83f8e22453404cc3cef16a3d9b96608bc67c4b30db88e0a5a6c6390213f7acbe1153ff6d23ce57380104288ae19373ef"
|
|
const enode2 = "0ba6b9f606a43a95edc6247cdb1c1e105145817be7bcafd6b2c0ba15d58145f0dc1a194f70ba73cd6f4cdd6864edc7687f311254c7555cc32e4d45aeb1b80416"
|
|
|
|
// const addr = "0x9d13c6d3afe1721beef56b55d303b09e021e27ab"
|
|
const addr = "0x0000000000000000000000000000000000000020"
|
|
|
|
// function to test proposeNode
|
|
func TestContract_ProposeNode(t *testing.T) {
|
|
conn, err := ethclient.Dial("/home/vagrant/quorum-examples/examples/7nodes/qdata/dd1/geth.ipc")
|
|
if err != nil {
|
|
t.Errorf("Failed to connect to the Ethereum client: %v", err)
|
|
}
|
|
|
|
var contractAddr = common.HexToAddress(addr)
|
|
|
|
permissions, err := NewPermissions(contractAddr, conn)
|
|
if err != nil {
|
|
t.Errorf("Failed to instantiate a Permissions contract: %v", err)
|
|
}
|
|
auth, err := bind.NewTransactor(strings.NewReader(key), "")
|
|
if err != nil {
|
|
t.Errorf("Failed to create authorized transactor: %v", err)
|
|
}
|
|
|
|
session := &PermissionsSession{
|
|
Contract: permissions,
|
|
CallOpts: bind.CallOpts{
|
|
Pending: true,
|
|
},
|
|
TransactOpts: bind.TransactOpts{
|
|
From: auth.From,
|
|
Signer: auth.Signer,
|
|
GasLimit: 3558096384,
|
|
GasPrice: big.NewInt(0),
|
|
},
|
|
}
|
|
|
|
tx, err := session.ProposeNode(enode1, true, true)
|
|
if err != nil {
|
|
t.Errorf("Failed to propose node: %v", err)
|
|
}
|
|
fmt.Printf("Transaction pending: 0x%x\n", tx.Hash())
|
|
}
|
|
|
|
// function to test getNodeIndex for a given enode
|
|
func TestContract_GetNodeStatus(t *testing.T) {
|
|
conn, err := ethclient.Dial("/home/vagrant/quorum-examples/examples/7nodes/qdata/dd1/geth.ipc")
|
|
if err != nil {
|
|
t.Errorf("Failed to connect to the Ethereum client: %v", err)
|
|
}
|
|
|
|
var contractAddr = common.HexToAddress(addr)
|
|
|
|
permissions, err := NewPermissions(contractAddr, conn)
|
|
if err != nil {
|
|
t.Errorf("Failed to instantiate a Permissions contract: %v", err)
|
|
}
|
|
|
|
status, err := permissions.GetNodeStatus(nil, enode1)
|
|
|
|
if err != nil {
|
|
t.Errorf("Failed to create authorized transactor: %v", err)
|
|
} else {
|
|
fmt.Printf("node status: %v\n", status)
|
|
}
|
|
|
|
}
|
|
|
|
// function to test filterNewNodeProposed. Returns list of all nodes added
|
|
func TestContract_filterNewNodeProposed(t *testing.T) {
|
|
conn, err := ethclient.Dial("/home/vagrant/quorum-examples/examples/7nodes/qdata/dd1/geth.ipc")
|
|
if err != nil {
|
|
t.Errorf("Failed to connect to the Ethereum client: %v", err)
|
|
}
|
|
|
|
var contractAddr = common.HexToAddress(addr)
|
|
|
|
permissions, err := NewPermissionsFilterer(contractAddr, conn)
|
|
if err != nil {
|
|
t.Errorf("some error")
|
|
}
|
|
|
|
opts := &bind.FilterOpts{}
|
|
|
|
past, err := permissions.FilterNewNodeProposed(opts)
|
|
|
|
notEmpty := true
|
|
for notEmpty {
|
|
notEmpty = past.Next()
|
|
if notEmpty {
|
|
fmt.Printf("Enode Id - %v, Can Write - %v, Can Lead - %v\n", past.Event.EnodeId, past.Event.CanWrite, past.Event.CanLead)
|
|
fmt.Println("********************************************************")
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// function to test watch new node proposed. wats on the channel for new node add event
|
|
func TestContract_watchNewNodeProposed(t *testing.T) {
|
|
conn, err := ethclient.Dial("/home/vagrant/quorum-examples/examples/7nodes/qdata/dd1/geth.ipc")
|
|
if err != nil {
|
|
t.Errorf("Failed to connect to the Ethereum client: %v", err)
|
|
}
|
|
|
|
var contractAddr = common.HexToAddress(addr)
|
|
|
|
permissions, err := NewPermissionsFilterer(contractAddr, conn)
|
|
if err != nil {
|
|
t.Errorf("some error")
|
|
} else {
|
|
fmt.Printf("value is %v", permissions)
|
|
}
|
|
|
|
ch := make(chan *PermissionsNewNodeProposed)
|
|
// nodeIndex := []uint32{}
|
|
|
|
opts := &bind.WatchOpts{}
|
|
var blockNumber uint64 = 1
|
|
opts.Start = &blockNumber
|
|
_, err = permissions.WatchNewNodeProposed(opts, ch)
|
|
if err != nil {
|
|
t.Error("Failed NewNodeProposed: %v", err)
|
|
}
|
|
var newEvent *PermissionsNewNodeProposed = <-ch
|
|
fmt.Printf("Found event: Enode Id - %v, Can Write - %v, Can Lead - %v\n", newEvent.EnodeId, newEvent.CanWrite, newEvent.CanLead)
|
|
fmt.Println("**************************************")
|
|
}
|