scripts/txs/random.go

This commit is contained in:
Ethan Buchman 2019-04-02 15:39:42 -04:00
parent e4a03f249d
commit ccbeca742e
No known key found for this signature in database
GPG Key ID: DBB0B3EC64A4BDAA

113
scripts/txs/random.go Normal file
View File

@ -0,0 +1,113 @@
package main
import (
"context"
"crypto/rand"
"fmt"
mrand "math/rand"
"os"
"strconv"
"strings"
"time"
rpclib "github.com/tendermint/tendermint/rpc/lib/client"
)
func main() {
args := os.Args[1:]
ports, err := stringToInts(args[0])
if err != nil {
panic(err)
}
N, err := strconv.Atoi(args[1])
if err != nil {
panic(err)
}
txSize, err := strconv.Atoi(args[2])
if err != nil {
panic(err)
}
clients := []*rpclib.WSClient{} //.Client{}
for _, port := range ports {
url := fmt.Sprintf("localhost:%d", port)
websocket := "/websocket"
//client := rpcclient.NewHTTP(url, websocket)
client := rpclib.NewWSClient(url, websocket, rpclib.PingPeriod(1*time.Second))
//op, err := log.AllowLevel("debug")
if err != nil {
panic(err)
}
/* logger := log.NewFilter(
log.NewTMLogger(log.NewSyncWriter(os.Stdout)),
op,
).With("port", port)
client.SetLogger(logger)*/
if err := client.Start(); err != nil {
panic(err)
}
clients = append(clients, client)
}
for i := 0; i < N; i++ {
b := make([]byte, txSize)
if _, err := rand.Read(b); err != nil {
panic(err)
}
time.Sleep(time.Millisecond * time.Duration(mrand.Intn(10)))
client := randClient(clients)
err := client.Call(context.TODO(), "broadcast_tx_async", map[string]interface{}{
"tx": b,
})
// r, err := client.BroadcastTxAsync(b)
//resp := <-client.ResponsesCh
fmt.Printf("%d %v; ", i, err)
}
fmt.Println("--")
done := make(chan struct{}, N)
for _, client := range clients {
go func(c *rpclib.WSClient) {
for {
<-c.ResponsesCh
done <- struct{}{}
}
}(client)
}
for i := 0; i < N; i++ {
<-done
fmt.Printf("%d ", i)
}
fmt.Println("")
for _, client := range clients {
client.Stop()
}
}
func randClient(clients []*rpclib.WSClient) *rpclib.WSClient {
i := mrand.Intn(len(clients))
return clients[i]
}
func stringToInts(listOfPorts string) ([]int, error) {
spl := strings.Split(listOfPorts, ",")
ports := []int{}
for _, sp := range spl {
port, err := strconv.Atoi(sp)
if err != nil {
return nil, err
}
ports = append(ports, port)
}
return ports, nil
}